我正在使用 NAudio 创建一个简单的音频播放器,但找不到能将PlaybackState
流的WaveOut
更改为“Stopped”并因此触发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类,并且能够克服此问题,但该类不支持Resuming。
我知道有很多人已经遇到了这个问题,但是对于这两种情况(恢复和触发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/