Oplæs

Less waiting for the voice

A customer wrote that Oplæs stopped reading when the iPhone locked. Looking into it turned up three things worth fixing, and one limit that can't be fixed yet. Version 1.2.5 has the fixes; it's out as soon as Apple has reviewed it.

Why the voice sometimes took so long

Oplæs makes its voice on your iPhone, sentence by sentence. After each sentence it listens to its own audio with the iPhone's dictation and checks that every word is there, because a voice that skips a word is no help to someone following along. If a word is missing, it makes the sentence again.

The trouble was dictation's ear. It hears “spurred” as “spirit” and “dispassionate” as “passionate”, and it rarely gets a surname right. The voice had said the word; the check thought it hadn't. So Oplæs made the same sentence again, and again: between two and seven times. On a news article full of names, the voice fell behind the reading and you waited at the spinner.

Now the check looks at what was heard in the word's place. If something was said there, it was a mishearing, and the sentence is used as it is. A word that is really left out, a voice that stops early or a phrase said twice still gets the sentence made again.

Measured on an iPhone 15 Pro with the same article: before, the voice made 0.3 to 0.7 seconds of speech per second. Now it makes 1.5 to 1.8, well ahead of normal reading speed.

Reading with the screen locked

This is the limit. The voice needs the iPhone's graphics chip, and iOS only lends that to the app that is on screen. With the screen locked, Oplæs can play what it has already made, and nothing more. When that runs out, it pauses and carries on when you open it again.

I tried the obvious way around it: making the voice on the processor instead, which iOS does allow in the background. It works, and it took 62 seconds to make 3.7 seconds of speech. That is no way to read a book.

So 1.2.5 does what it can. While Oplæs reads, the screen now stays on until about eight minutes of audio are ready ahead of you, and then locks as usual. Before, the screen could lock a minute into a text with only a few sentences ready, and the reading stopped almost at once.

For a long walk or a drive, use Prepare the rest in the voice sheet (the sliders button at the top of a text). Oplæs then prepares the whole text, and it plays to the end with the screen locked.

A way the app could stop when you left it

If you locked the iPhone or switched app at the moment Oplæs was making a sentence, iOS could stop the whole app, and with it the audio that was ready. Oplæs now lets go of the graphics chip before it leaves the screen. In my tests I switched away in the middle of a sentence twelve times in a row, and the reading carried on every time.

Smoother while it reads

Some of the work of preparing text for the voice was done on the same thread that draws the screen, once per sentence, for many sentences ahead. It has moved off that thread. Skipping to another place in a long book no longer prepares the whole book again, and the moving highlight redraws only the text, not the whole screen.

What's next

The voice itself is now the limit: about half the time goes to working out how the sentence should sound, the rest to turning that into audio. There are a few ideas left for making it faster. If Oplæs still keeps you waiting, write to oplaes@theill.com and tell me which text and which iPhone.

Get it on the App StoreAll posts