我能估计合成语音持续时间吗?

时间:2014-11-16 09:20:24

标签: c# signals signal-processing text-to-speech

我正在尝试使用用户输入特定持续时间的文本在Windows操作系统中生成wave文件。      例如,如果用户想要波形文件的“HH:MM:SS”时间跨度(获得格式为Total secs),则将文本“I love Stack Overflow”循环为“HH:MM:SS”。

如何从文本中计算Wavfile的持续时间,并生成具有特定持续时间的Wavefile并将其保存到磁盘。我需要遵循什么算法或代码?

目前我正在使用Speech.Synthesis为wavefile生成文本,但是从文本计算持续时间似乎是个大问题..

2 个答案:

答案 0 :(得分:1)

跟踪语音生成的进度。 SpeakProgressEventArgs的{​​{1}}属性为AudioPosition。如果您有多个短语,句子,ssml标记或具有不同重点,音量或速率的区域,则可以在TimeSpan个呼叫之间重置计时,以便您可以使用单个Speak来获取整个持续时间。

System.Speech.Synthesis.PromptBuilder

audio position progress

答案 1 :(得分:0)

因此,如果我理解正确,您需要输入文字并找出合成器语音说出来的时间

那是非确定性的,因为每个录制的声音都会以自己的方式发出每个音素。所以我可以说“我喜欢Stack Overflow ”比其他人更快或更慢。为了创建合成器,Microsoft使用不同的声音并要求他们说出不同的文本,并在创建演讲时使用与文本的最佳匹配。

请注意,说出每个音素的时间也因文字而异。例如“flow”中的“o”时间与“olive”中的“o”时间不同

这使得无法估计合成器说出你的文字所需的时间。您可以使用 Synthesizer.Rate 参数控制语音速度,但无法计算说话所需的确切时间。

所以我认为没有生成单一录音包含您想要的文字并从中获取时间,您无法准确地执行此操作