NAudio播放不会成功停止

时间:2010-05-11 15:15:42

标签: c# .net audio naudio

使用NAudio播放[{3}}文件[在控制台中]时,我无法弄清楚如何停止播放。当我调用waveout.Stop()时代码停止运行并且waveout.Dispose()永远不会被调用。

它与函数回调有关吗?如果是,我该如何解决?

static string MP3 = @"song.mp3";
static WaveOut waveout;
static WaveStream playback;
static void Main(string[] args)
{
    waveout = new WaveOut(WaveCallbackInfo.FunctionCallback());
    playback = OpenMp3Stream(MP3);
    waveout.Init(playback);
    waveout.Play();
    Console.WriteLine("Started");

    Thread.Sleep(2 * 1000);

    Console.WriteLine("Ending");
    if (waveout.PlaybackState != PlaybackState.Stopped)
        waveout.Stop();
    Console.WriteLine("Stopped");
    waveout.Dispose();
    Console.WriteLine("1st dispose");
    playback.Dispose();
    Console.WriteLine("2nd dispose");
}
private static WaveChannel32 OpenMp3Stream(string fileName)
{
    WaveChannel32 inputStream;
    WaveStream mp3Reader = new Mp3FileReader(fileName);
    WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader);
    WaveStream blockAlignedStream = new BlockAlignReductionStream(pcmStream);
    inputStream = new WaveChannel32(blockAlignedStream);
    return inputStream;
}

2 个答案:

答案 0 :(得分:3)

你是说代码在对waveOutReset的调用中挂起?如果是这样,这是函数回调和某些音频驱动程序的已知问题(SoundMAX似乎特别容易受此影响)。几个月前我检查了NAudio源代码的可能修复程序,因此您可以尝试构建最新的代码,看看是否能解决问题。

答案 1 :(得分:0)

我的第一个猜测是,因为你没有console.read()或类似的调用,你的代码执行速度太快,你没有看到最后的写行。

如果NAudio实现了IDisposable,那么我建议使用using语句让.NET为你处理。