【发布时间】:2016-05-19 22:00:14
【问题描述】:
我有一些使用 TTS 生成波形文件然后播放的简单代码:
public void TestSpeech()
{
SpeechSynthesizer synth = new SpeechSynthesizer();
using (MemoryStream stream = new MemoryStream())
{
synth.SetOutputToWaveStream(stream);
synth.Speak("Hello world");
stream.Seek(0, SeekOrigin.Begin);
IWaveSource source = new WaveFileReader(stream);
EventWaitHandle waitHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
var soundOut = new WasapiOut();
soundOut.Initialize(source);
soundOut.Stopped += (s, e) => waitHandle.Set();
soundOut.Play();
waitHandle.WaitOne();
soundOut.Dispose();
source.Dispose();
}
}
一切正常,但在我开始播放波形文件之前我想知道它会持续多久。是否有某种计算方法,或者它在某处可用?
如果它在某处可用,它是如何计算的?我假设它与流中的数据量有关,但是如何?
【问题讨论】:
-
类似问题已在此处得到解答stackoverflow.com/questions/82319/…
-
会有办法的,没有什么是不可能的。这个让我着迷。我会发布我的想法,如果我有什么想法 - 在那个事件中,我会夹着尾巴走到远方。
-
正如链接文章中发布的那样,事先没有可靠的方法,但是 Genti 的解决方案是实现您的结果的好方法。有关长度计算的详细信息,请参阅 Genti 描述的评论。