我有一些简单的代码使用TTS生成一个wave文件,然后播放它:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
一切都工作正常,但我想知道在我开始播放wave文件之前会持续多长时间.有没有计算这个的方法,或者它可以在某个地方使用?
如果它在某处可用,它是如何计算的?我假设它与流中的数据量有关,但是如何?
CSCore(从此示例中提取,此处使用当前播放位置和总持续时间):
using System;
using CSCore;
using CSCore.Codecs.WAV;
IWaveSource wavSource = new WaveFileReader(stream);
TimeSpan totalTime = wavSource.GetLength();
Run Code Online (Sandbox Code Playgroud)
NAudio:
using System;
using NAudio.Wave;
using (var wfr = new WaveFileReader(stream))
{
TimeSpan totalTime = wfr.TotalTime;
}
Run Code Online (Sandbox Code Playgroud)
另请参阅有关TimeSpan的MSDN文档。
持续时间是根据WAVE数据的总长度(可以是压缩文件的估计值)和每秒的平均字节数来计算的(根据属性中的NAudio来源TotalTime):
totalTimeInSeconds = LengthInBytes / AverageBytesPerSecond;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1998 次 |
| 最近记录: |