Synthesizer.ChangeRate question RRS feed

  • Question

  • When trying to change the synthesizer's Rate (TTS speed) I'm getting some weird behaviour. I'm testing this both on my desktop (OCS2007Beta + WinXP) using the Visual Studio "Voice Response Debugging Window" and on a server (OCS2007Beta + Win2003 Server + Telephony card) with different outcomes.

    First a simple question: When I change the Rate, the TTS voice's pitch also changes. Should this happen?

    On the desktop, when changing the Rate (with 0.01f leaps) from 0.9f to 1.0f I can see variations both on speed and pitch in a somewhat linear manner.
    On the server, the behaviour is way different, it looks binary: if I set the Rate to 0.9999999701f (achieved through try-and-error) both the TTS speed and pitch decrease abruptly; If I set it to 0.9999999702f the TTS speed and pitch go back to the standard rates, meaning the rates achieved with 1.0f.

    A theory for this behaviour would be that when changing the Rate, the soundcard sampling rate changes, changing also the pitch. Since the soundcard has a wide range of sample rates (8kHz, 16kHz, 22kHz, 44.1kHz, etc) this would explain the "linear" way the pitch and speed vary.
    On the other hand, on the server, since with a telephony card the sampling rates can only be 8kHz and 16kHz, the values for the pitch/speed would be binary.

    Is this what happens? Will this behaviour be any different in the final release of OCS2007?

    Monday, May 28, 2007 8:26 PM


  • Not sure how you detect the pitch changes. Speech is time vaired signal. Pitch value varies along the time axis. For human perception, we hear the average value of a segment of sound.


    The OCS 2007 Public Beta is using the Nuance’ engine, in which Rate change has impact on pitch. When you speed a wave up, if nothing else is done by the engine, the pitch will naturally increase.


    As to the “binary” behavior, you are seeing digital inaccuracies at the very small numbers. All computers have this problem, the degree of accuracy is dependent on what type they use to do the calculations: int vs. float vs. double.

    Tuesday, May 29, 2007 12:58 PM