Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 波形文件的时间长度_C#_Cscore - Fatal编程技术网

C# 波形文件的时间长度

C# 波形文件的时间长度,c#,cscore,C#,Cscore,我有一些简单的代码,使用TTS生成一个wave文件,然后播放: public void TestSpeech() { SpeechSynthesizer synth = new SpeechSynthesizer(); using (MemoryStream stream = new MemoryStream()) { synth.SetOutputToWaveStream(stream); synth.Speak("Hello world

我有一些简单的代码,使用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(从中提取,使用当前播放位置和总持续时间):

诺迪奥:

using System;
using NAudio.Wave;

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

持续时间根据波形数据的总长度(可以是压缩文件的估计值)和平均每秒字节数(根据in属性
TotalTime
)计算得出:


如果有人在寻找解决办法,我会这样处理: (请原谅我的第一句话)

  • 我创建了bool mouseScrewsAround=false
  • 计时器事件,在播放时更改轨迹栏位置,仅在以下情况下触发!鼠标倒转
  • 轨迹栏\u MouseDown->mouseScrewsAround=true
  • 轨迹栏\ U鼠标点击->更改轨迹位置,然后鼠标旋转=false

  • 类似的问题已经在这里得到了回答,会有办法的,没有什么是不可能的。这个让我着迷。如果我有什么想法,我会发布我的想法——在那次活动中,我会两腿夹着尾巴走到远处。正如链接文章中所发布的,之前没有可靠的方法可以做到这一点,但是Genti的解决方案是实现你的结果的好方法。有关长度计算的详细信息,请参见Genti描述中的注释。不过,他可以访问
    。合成器写入
    。我在发布后直接删除了我的评论,因为我在单击“添加”时看到了我的逻辑错误。对不起,朋友,谢谢你。“持续时间是根据波形数据的总长度(可以是压缩文件的估计值)和平均每秒字节数计算的”我在哪里可以找到平均每秒字节数?这是在使用CSCore。它位于WAV文件头中,但我将了解如何在CSCore中实现这一点。在CSCore中,您可以使用
    wavSource.WaveFormat.BytesPerSecond
    获得它。
    using System;
    using NAudio.Wave;
    
    using (var wfr = new WaveFileReader(stream))
    {
        TimeSpan totalTime = wfr.TotalTime;
    }
    
    totalTimeInSeconds = LengthInBytes / AverageBytesPerSecond;
    
    using CSCore;
    
    IWaveSource waveSource = new WaveFileReader(stream);
    TimeSpan totalTime = waveSource.GetLength( ); //get length returns a timespan