Record Audio with timestamp

I’ve been trying out the audio recording tool with speech to text. Works fine but new recordings always write to the top row. I’d like each new recording to write to the last row so I can accompany it with a timestamp column. Not sure whether this requires an Add Row action or a Set Columns action - tried both but with Add Row the timestamp ends up in the row under the recording, and with Set Columns, each new recording writes over the previous one.

Is this in a Form, Form Container, Edit screen, or Detail screen?
What’s your flow from beginning to end?

1 Like

I’m using a custom screen with the audio recorder component. Tapping record writes to a table with the URL, speech to text columns in place. That part works. The optional Action that is on the component - not sure how to set that up. Leaving it to do nothing has it set columns by default.

Tried an add row action and the timestamp writes a few seconds before the recording. When the recording arrives it goes to the top row and timestamp stays where it is

So, it sounds like you are on a Detail screen, so that screen is going to be attached to a row in the table, which in this case is most likely the first row in the table. That first row is the one that’s going to receive the recording.

I assume the action is executed after the recording is done. It sounds like you want the timestamp to happen at that time. Since you are recording to the first row, a Set Column action would make the most sense because you want to set the timestamp on the same row that the recording gets stored to. On the other hand, it sounds like you want a new row for each recording, so you are attempting to use an Add Row, which writes a new row, but are you also writing the URL of that recording at the same time that you are setting the timestamp.

It seems that you are trying to use the table as both a placeholder for a “custom form-ish” experience, as well as using the same table as the destination table. If what I highlighted above doesn’t work, then I think I would consider a native Form Screen or Form Container. I think the way you are trying to use it as a sort of custom form (minus a submit button, user specific columns, and a separate single row table) may not lead to the best experience.

Just remember that when you are on a detail screen that accepts user input…you are updating an actual row of data in real time. As soon as you stop recording, it’s written to that row, regardless of any additional actions you have after the fact.

2 Likes

Thank you, I’m not sure if I’m in a details screen though? It was created by adding a new tab > Custom screen. The audio button is the only component on the screen.

When I tried a form container the submit button remains greyed out until something is filled in. It doesn’t recognise when the recording is finished so another input would be needed to activate it. Ideally, the user would tap record and a row is written automatically when they push stop. Having a submit button adds a step for the user.

If you didn’t specifically specify to open a Form or Form Container, then you are most likely on a Detail screen.
If there are not any automatically created Cancel and Submit buttons then you are on a Detail screen.
If the audio url is written to the table immediately after you stop recording without pressing any other buttons, then you are on a Detail screen.

Point being, you are updating an existing row without requiring any additional user interaction. Any action you specify on the recorder is ‘In Additional To’ the audio being uploaded and stored as a url in the table.

I would consider this a bug.

What I would do is create a separate table with a single row. Then add a user specific column to hold the url of the recording. That new table should be the source of your tab/screen. So, when you record something it will write the url to that user specific column. Then on the Action part of the component, add an Add Row action that writes both the url as well as a timestamp to your existing table. If you want, you could make that a custom action and follow the Add Row with a Set Column action to clear the recording url from you single the table, so it’s ready for the next recording.

3 Likes

That’s exactly what I would have suggested :slight_smile:

4 Likes

Ah ok, I’ve always considered a details screen to be when you tap an item or something in a collection and are taken to another screen to see its ‘details’.

1 Like

Think if it this way. We have Tab level screens, as well as ‘Show New Screen’ and ‘Show Detail Screen’ actions. All of them give you access to a detail view of an existing row if data. You may not be displaying data from that specific row that it’s connected to, but that screen is still connected to a row. I just tend to generalize that a Detail screen is any time that your screen is connected to an actual row of data, and you are not within Form of some sort that contains Cancel/Submit buttons.

3 Likes

I’ve clearly missed something in your suggestion, it’s still doing what it was doing before. The timestamp wasn’t user specific, I switched it to see if that might change anything

image

image

This must be a race condition situation. It’s writing the new row (second row) before the url has been written to the original row (first row).

Couple of things:

  • First, it looks like you are still utilizing the same table to both obtain your recording as well as write a new row for that recording. They should be separate tables for simplicity. One table with ONLY ever one single row with the user specific column to obtain the recording from the recording component, and the other table with non user specific columns to permanently hold each recording and timestamp in separate rows. The way you are doing it with user specific columns for both the input and output in the same table is going to bite you some day. Only use user specific columns if you expect multiple users to update a column in the SAME row without interfering with other users.
  • Second, I would add a ‘Wait For Condition’ action before the Add Row action. Set it to wait until the the recording column is not empty. This will allow for the recording to upload and process before writing the new row, so you should end up with the url as well as the timestamp in the new row
3 Likes

Went to bed, woke up, set it up as you described. It works! Thank you :slightly_smiling_face:

1 Like

I’ve noticed a couple of things

  1. The set columns action that’s supposed to clear the user specific URL at the end of the action sequence does not clear the column
  2. Sometimes the result is the one from before the current one (so each time the action is run, the result I get is the one I did previously, and the current one will arrive when the next one is done).

I’m guessing number 2 is due to number 1?

image

My recommendation would be to have a separate action that clears the User Specific Column before the recording is made. Assuming that you have an action that navigates to this screen, it could be a part of that action.

2 Likes

Thanks Darren, it’s a tab so there isn’t an action that gets me there but I will add one

That fixed it :+1:t2:

Are you creating the transcript within the single row table?

My thought was that the single row table should have nothing more than just the one recording column and nothing else. That should be the column that the wait condition is looking at.

I was thinking that the transcript would happen in your other table.

Yes it’s in the single row table. Initially, I only had the recording column but I placed the transcript column in there so I could add it to the destination table as a text column. This allows me to edit the transcript if there are any errors (can’t edit the computed one, and with names being included in almost every transcript, there are lots of spelling errors). There was probably a better way to do that but it seems to work…so far

1 Like

Ah, that makes sense.

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.