[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Emacspeak] Omnivox: speech onset is damaged when playback starts after idle (1.12.0 and 1.13.0, Windows x64)



Hi Ľuboš,

Thanks for the detailed report and measurements. I reproduced the half-speed onset in a playback regression test, and a fix is now released in Omnivox 1.14.0.

Your channel-count suspicion was correct. The playback queue reported mono while idle, and that format could carry into the start of a stereo source. This reproduced the stretch you described: 256 stereo frames became 512 mono frames. The fix keeps the queue’s format consistently at stereo, 44.1 kHz across idle transitions. Both normal speech and --play-wav use the corrected path.

The regression tests reproduce the failure with the old queue behaviour and pass with the fix. I haven’t independently reproduced the separate initial 256-frame loss or the tick-followed-by-zeros lead-in collapse, so I can’t yet claim those are resolved.

Could you try 1.14.0, restart Omnivox, and repeat your loopback comparison with the helper’s lead-in disabled? It would be particularly useful to know whether either of those two effects remains.

Thanks again for narrowing this down so precisely.

Bart

Ľuboš Pinteš (via emacspeak Mailing List) <emacspeak@xxxxxxxxxxxxx>
writes:

> When Omnivox starts playing after a period of silence, the beginning of 
> the utterance is corrupted. On 1.13.0, measured at the 44.1 kHz stereo 
> pipeline rate:
>
> 1. About the first 256 frames of the utterance never reach the device.
> 2. The next 256 frames are played at half speed, an octave lower. They 
> look like interleaved stereo samples being read as mono: 512 samples 
> come out as 512 frames.
> 3. After that, playback is sample-exact.
>
> This is about 12 ms, but it sits right on the onset. With short 
> utterances such as character echo while typing, it is clearly audible: 
> vowels sound rough and "thick" instead of clean.
>
> The same half-speed stretch also happens with `omnivox --play-wav FILE` 
> on the first sound after idle. That path loses nothing, but its first 
> 256 frames are still played at half speed. So the problem seems to be in 
> the playback stage, not in helper streaming. My unconfirmed guess is a 
> channel-count mismatch in the output queue or mixer when a new source 
> starts on an idle stream.
>
> `--dump-wav` output is correct. The damage only shows in live playback, 
> so I measured it with WASAPI process loopback of the Omnivox process 
> tree and compared it with `--dump-wav` output.
>
> **Reproduction:** Let the server go idle for about a second, send `l 
> {e}` (any short utterance with a sharp onset), and repeat. Every 
> repetition after idle shows the same pattern.
>
> **A second observation from the workaround:** As a workaround, my helper 
> prepends 20 ms of low-level lead-in to each utterance, so the damaged 
> window falls on the lead-in instead of speech. The lead-in only survives 
> if every sample of it is above the 0.01 silence-trim threshold. With a 
> short tick followed by zeros, the live path collapses the lead-in to 
> about 253 frames regardless of its length (20 or 60 ms): the zeros after 
> the first non-zero sample get discarded. `--dump-wav` keeps the full 
> lead-in. The workaround is therefore fragile, and a fix in Omnivox would 
> let me remove it.
>
> Emacspeak discussion list -- emacspeak@xxxxxxxxxxxxx
> To unsubscribe send email to:
> emacspeak-request@xxxxxxxxxxxxx with a subject of: unsubscribe


|Full archive May 1995 - present by Year|Search the archive|


If you have questions about this archive or had problems using it, please contact us.

Contact Info Page