Skip to content

tiger-speech 0.7.5 — the volume that would not come back, and speech that starts sooner

Choose a tag to compare

@tgeczy tgeczy released this 19 Aug 02:04
· 175 commits to main since this release

The volume comes back when you turn it up, and speech starts sooner.

Released in step with leopard-speech 0.5.0: both add-ons share one engine host, and every fix below was found in one or the other and applied to both.

The volume bug, which was a silence bug

Take the volume to 0 with Home and back to 100 with End, and the synthesizer stayed silent for good. Only 99 brought it back, because 99 is the one value that still sent a command.

[[volm]] is state on the speech channel, and it outlives the utterance that set it. Sending nothing at 100 therefore never meant "full volume" — it meant "whatever was set last", and the one setting where that is fatal is the one that can be zero. The command is now sent when the setting is off its default, once more when it returns, and then not again.

Inflection had the identical bug: a voice flattened to 0 stayed flat when the slider came back to the middle.

Speaking sooner

The audio is streamed from the engine as it is produced rather than accumulated first, so the first sound of a paragraph leaves the renderer in 11 to 53 ms instead of most of a second — flat, whether the text is 24 characters or 1117:

 17 chars ->  1.19 s of audio in  2 chunks; first sound after 24 ms
135 chars ->  6.36 s of audio in  5 chunks; first sound after 14 ms
540 chars -> 25.61 s of audio in 13 chunks; first sound after 12 ms

Thirty times the text, and the wait before the first sound does not move.

It is an improvement rather than a cure. Part of the wait lives past the renderer, in the audio device, and that part is unchanged. Interrupting is where it shows most: the next utterance used to wait up to 2255 ms behind the one you abandoned.

The samples are byte-identical to what the old path produced, and there is a test that renders the same request both ways and compares. A change to when audio arrives must not change what arrives — Tiger's renders are still exact.

Interrupting

Cancelling used to stop the sound and leave the engine synthesising the rest of a sentence nobody would hear, with the next thing you asked for queued behind it. Cancel now reaches the engine, and the audio already handed to the sound card is bounded rather than seconds deep.

Two faults found alongside it: a cancel arriving between requests could silence the next utterance entirely, and a rate that failed to apply fell back to the engine's own 180 wpm — which reads exactly like lag rather than like a wrong rate. It says so in the log now.

Also

  • Rate boost is now in the settings ring, so it can be toggled without opening the dialog.
  • Debug logging reports what each utterance cost: how much audio, in how many pieces, how long until the first sound and until the last.
  • The driver and its engine ship together. If the executable is ever older than the driver, it says so and falls back rather than going quiet.

Getting the engine

Unchanged: nothing of Apple's ships here. You supply your own Tiger install, and the add-on reads the engine and voices from wherever you extracted them.