I’m currently making adjustments to the acknowledgement feature based on beta feedback.
Reiterate can be described very simply: you record audio clips, and the app repeats them back at you. But, as they say, the devil’s in the details. Reiterate gives the user a plethora of configuration options, allowing them to fine-tune the coaching and feedback.
One such adjustment are the timing features. You can set gates on a clip so that it will only play during certain times. This allows you to, for example, have clips that play only in the first few minutes of a game, or clips that only play if the game goes late.
You can also change the timing mode. There are three modes: shuffle, metronome, and one-shot. Shuffle is the main mode, and most clips should be of the shuffle type. Shuffle clips all get grouped together, and randomly selected during playback. Metronome clips play regularly, so you can set a clip to play every 30 seconds if you like. And one-shot clips play just once, but are guaranteed to play at that specific time, unlike shuffle clips which have no guarantee they’ll every get played.
All this flexibility means that Reiterate has to do some extra management in how it plays clips. Whenever a clip is selected for playback, be it a shuffle, metronome, or one-shot, it doesn’t get played immediately but instead is placed into a queue. While the queue is not empty, the app pops a clip off the queue and plays it. This means that, if two clips happen to have timers set so that they’ll play at the same time, they instead will be played one after the other, avoiding a confusing overlap of audio.
But! This turned out to be too confusing for Acknowledgement. If you have multiple clips all playing in a row, the user can get confused as to which clip they need to acknowledge. I had actually set it up so they could acknowledge any clip in any order, but it was still too confusing.
So I need to adjust it so that when Acknowledge mode is enabled, there’s a gap between each played clip. There will be only one clip to acknowledge at a time.
During my own testing, I enjoyed trying to “beat the buzzer”. If you don’t acknowledge a clip in time, it buzzes you and moves on to the next clip. This also gives you a score at the end, a concrete number you can work to improve. If Reiterate pauses all playback until you acknowledge a clip, does that mean you always score 100%? I’d like to try still having a timeout and a buzzer.
The other adjustment is with the audio API itself. Apple’s AVFoundation, the API that governs audio in and output, doesn’t seem to be set up for an app like mine. If I configure simultaneous playback and recording, then I can hear the playback during recording. That confuses the speech recognition, and the app basically triggers itself when it plays back a clip.
I could work around this by only enabling recording after playback, but that seems really clunky to me. I like being able to acknowledge a clip while it is playing. Having to wait for the clip to end would be frustrating.
Currently I’m avoiding the issue by requiring the use of headphones. But not everyone has headphones or wants to use them. I know that speakerphone apps exist, but I’m not sure my particular application (simultaneous recording and playback of audio, while doing speech recognition) is something Apple anticipated.