NAudio PlaybackState 始终播放

问题描述 投票:0回答:1

我在 .NET 控制台应用程序中有这段代码,可以使用 NAudio 播放录制的声音检查:

    static void Play(int outputDeviceIndex, byte[][] recordedChunks)
    {
        using (var waveOut = new WaveOutEvent())
        {
            waveOut.DeviceNumber = outputDeviceIndex;
            waveOut.PlaybackStopped += (sender, args) => Console.WriteLine("Playback stopped: " + args.Exception);

            var bufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(44100, 1));
            waveOut.Init(bufferedWaveProvider);
            waveOut.Play();
            
            foreach (var chunk in recordedChunks)
            {
                bufferedWaveProvider.AddSamples(chunk, 0, chunk.Length);
            }

            while (waveOut.PlaybackState == PlaybackState.Playing)
            {
                Thread.Sleep(100);
            }
        }
    }

录制的声音(在recordedChunks中)会回放,但while循环既不会终止,也不会激活waveOut.PlaybackStopped回调。

尝试过这个:

使用(var waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))

但对于我来说,上面的原始代码似乎失败了。

这有什么问题吗?感谢所有帮助。 (而且,奇怪的是,我上周以为这有效,但现在不行了?也许我错了!)

naudio playback
1个回答
0
投票

BufferedWaveProvider
是永无休止的溪流。它始终提供音频供阅读,即使是无声的。所以播放永远不会结束。

您可以通过将

ReadFully
属性设置为
false
来更改此设置。但在开始玩之前,您还需要更改上面的代码以写入
BufferedWaveProvider

此外,

BufferedWaveProvider
在幕后使用循环缓冲区。它适用于实时添加音频的情况。因此,如果您一次性添加所有内容,请小心不要溢出缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.