程序在 NAudio WaveOut.init() 时停止;
Program halts when NAudio WaveOut.init();
我正在使用 NAudio 库制作自己的音乐播放器,并配置播放列表功能。
一切正常,但我在完成它时遇到了一点问题。
播放完成后,调用播放函数播放下一首音乐,程序暂停
设置断点逐行执行,发现是哪一行让程序挂了
AudioFileReader _audioFileReader;
IWavePlayer _waveOutDevice = new WaveOut();
(...)
private void PlaybackStopped(object sender, EventArgs e)
{
if (_manual_stop == false)
{
if (nowIndex + 1 == listMusic.Items.Count)
{
btnPlayCtrl.Text = "▶";
return;
}
else
{
nowIndex++;
playMusic();
}
}
else
{
btnPlayCtrl.Text = "▶";
return;
}
}
private void playMusic()
{
if (_paused == true)
{
_waveOutDevice.Play();
_paused = false;
return;
}
stopMusic();
_audioFileReader = new AudioFileReader(listMusic.Items[nowIndex].Text);
_waveOutDevice.Init(new WaveChannel32(_audioFileReader)); //It makes program halt
getProperties(listMusic.Items[nowIndex].Text);
_waveOutDevice.Play();
_manual_stop = false;
}
我用的是1.7.3.0版本的NAudio,尝试替换了另外一个DLL,还是不行。
您应该只在输出设备上调用一次 Init
。尝试关闭现有的 WaveOut
设备并创建一个新设备来播放下一个文件。
我正在使用 NAudio 库制作自己的音乐播放器,并配置播放列表功能。
一切正常,但我在完成它时遇到了一点问题。
播放完成后,调用播放函数播放下一首音乐,程序暂停
设置断点逐行执行,发现是哪一行让程序挂了
AudioFileReader _audioFileReader;
IWavePlayer _waveOutDevice = new WaveOut();
(...)
private void PlaybackStopped(object sender, EventArgs e)
{
if (_manual_stop == false)
{
if (nowIndex + 1 == listMusic.Items.Count)
{
btnPlayCtrl.Text = "▶";
return;
}
else
{
nowIndex++;
playMusic();
}
}
else
{
btnPlayCtrl.Text = "▶";
return;
}
}
private void playMusic()
{
if (_paused == true)
{
_waveOutDevice.Play();
_paused = false;
return;
}
stopMusic();
_audioFileReader = new AudioFileReader(listMusic.Items[nowIndex].Text);
_waveOutDevice.Init(new WaveChannel32(_audioFileReader)); //It makes program halt
getProperties(listMusic.Items[nowIndex].Text);
_waveOutDevice.Play();
_manual_stop = false;
}
我用的是1.7.3.0版本的NAudio,尝试替换了另外一个DLL,还是不行。
您应该只在输出设备上调用一次 Init
。尝试关闭现有的 WaveOut
设备并创建一个新设备来播放下一个文件。