gpt4 book ai didi

c# - NAudio PlaybackState 永不停止?

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:29 25 4
gpt4 key购买 nike

我正在使用 NAudio 创建一个简单的音频播放器,但我找不到可以更改 WaveOutPlaybackState 的解决方案> 流式传输到“已停止”并因此触发 PlaybackState 事件。

我是这样做的,如下图所示:

private BlockAlignReductionStream stream = null;

private NAudio.Wave.WaveOut output = null;

private void Add_to_stream()
{

string[] files = Directory.GetFiles(Settings.Default.m + "\\","*"+selected_music+"*");

if (files[0].EndsWith(".mp3"))
{
NAudio.Wave.Mp3FileReader mp3fr = new NAudio.Wave.Mp3FileReader(Settings.Default.m + "\\" + selected_music + ".mp3");
var pcm = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(mp3fr);
stream = new NAudio.Wave.BlockAlignReductionStream(pcm);

}
else if (files[0].EndsWith(".wav"))
{
NAudio.Wave.WaveFileReader wavfr = new NAudio.Wave.WaveFileReader(Settings.Default.m + "\\" + selected_music + ".wav");
var pcm = new NAudio.Wave.WaveChannel32(wavfr);
pcm.PadWithZeroes = false;
stream = new NAudio.Wave.BlockAlignReductionStream(pcm);
}
else throw new InvalidOperationException("file type is not supported.");

output = new NAudio.Wave.WaveOut();
output.Init(stream);

}

最初,我使用的是 DirectSoundOut而不是 WaveOut类,我能够克服这个问题,但那个不支持恢复。

我知道有很多人已经遇到过这个问题,但是对于这两种情况(恢复和触发 PlaybackState)是否有替代方案?

最佳答案

您必须将 WaveCallbackInfo 添加到 WaveOut 类的构造函数中才能引发事件。

output = new NAudio.Wave.WaveOut(WaveCallbackInfo.FunctionCallback());
output.PlaybackStopped += (pbss, pbse) => { Debug.WriteLine("Stopped"); };

关于c# - NAudio PlaybackState 永不停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com