波形文件的时间长度

我有一些简单的代码使用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();
    }
}

一切工作正常,但我想知道在开始播放wave文件之前它会持续多久。 有没有计算这个的方法,还是可以在某个地方使用?

如果它在某处可用,它是如何计算的? 我假设它与流中的数据量有关,但是如何?


您可以使用CSCore或NAudio:

CSCore (从此示例中提取,当前播放位置和总持续时间在此处使用):

using System;
using CSCore;
using CSCore.Codecs.WAV;

IWaveSource wavSource = new WaveFileReader(stream);
TimeSpan totalTime = wavSource.GetLength();

NAudio

using System;
using NAudio.Wave;

using (var wfr = new WaveFileReader(stream))
{
    TimeSpan totalTime = wfr.TotalTime;
}

另请参阅TimeSpan的MSDN文档。

持续时间根据WAVE数据的总长度(可以是压缩文件的估计值)和每秒平均字节数(按照属性TotalTime的NAudio源)计算:

totalTimeInSeconds = LengthInBytes / AverageBytesPerSecond;

using CSCore;

IWaveSource waveSource = new WaveFileReader(stream);
TimeSpan totalTime = waveSource.GetLength( ); //get length returns a timespan
链接地址: http://www.djcxy.com/p/31919.html

上一篇: Length in time of a wave file

下一篇: Microsoft Azure DDOS protection