【发布时间】:2010-05-11 15:15:41
【问题描述】:
当使用NAudio 播放MP3 文件[在控制台中] 时,我不知道如何停止播放。当我调用 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;
}
【问题讨论】:
-
我觉得
using语句在这里会很方便,但我没有 naudio,所以我无法真正测试它。 -
这只是示例代码,我认为从长远来看,使用 using 语句不会真正起作用。它实际上根本没有从调用 waveout.Stop() 中返回。它进入函数,似乎根本没有离开。