【问题标题】:MP3 Playing with NAudio - Problems with Stop()使用 NAudio 播放 MP3 - Stop() 的问题
【发布时间】:2011-09-08 18:24:23
【问题描述】:

我刚刚开始使用 NAudio (1.4) 来播放 MP3。我一直在研究示例的文档和源代码。目前我在课堂上有这个:

    IWavePlayer waveOutDevice;
    WaveStream mainOutputStream;
    WaveChannel32 volumeStream;

    public AudioPlaybackService() : base() {
        waveOutDevice = new WasapiOut(AudioClientShareMode.Shared, 100);    
    }

    public bool LoadTrack(string trackPath, float volume)
    {
        if (!File.Exists(trackPath))
            return false;
        try
        {
            mainOutputStream = new Mp3FileReader(trackPath);
            volumeStream = new WaveChannel32(mainOutputStream);
            volumeStream.Volume = volume;
            waveOutDevice.Init(mainOutputStream);
        }
        catch (Exception e)
        {
            Logger.Error("Failed to load track for playback {0} :: {1}", trackPath, e.ToString());
            return false;
        }
        return true;
    }

    public bool PlayTrack()
    {
        if (waveOutDevice == null || waveOutDevice.PlaybackState == PlaybackState.Playing)
            return false;
        waveOutDevice.Play();
        return true;
    }

    public bool StopTrack()
    {
        if (waveOutDevice == null || waveOutDevice.PlaybackState == PlaybackState.Stopped)
            return false;
        waveOutDevice.Stop();
        mainOutputStream.CurrentTime = TimeSpan.Zero;
        return true;
    }

这可以很好地加载和播放我的测试曲目,我的问题在于 Stop() 函数。首先,我是否需要在调用 Stop() 后重置 CurrentTime 属性?目前它更像是一个暂停按钮,即它在“停止”的同一位置恢复轨道。如果我确实需要重置 CurrentTime,我现在会遇到一个问题,如果我单击停止,曲目会停止,但如果我之后再次单击播放,我会在曲目再次开始之前得到一点剩余的噪音。

查看其中一个示例的源代码,它所做的只是调用 Stop()。

【问题讨论】:

  • 您是否尝试过使用任何 WaveOut 选项?几乎没有理由使用 WasapiOut。我很惊讶你得到剩余的音频,因为 WasapiOut 应该在调用 Stop 时调用 audioClient.Reset(),这应该完全刷新任何现有的缓冲音频以进行播放。
  • 由于还必须支持 XP,我现在已切换到 WaveOut(codeplex wiki 页面中的方法 2),但仍然会留下音频。

标签: naudio


【解决方案1】:

our use of naudio,我们从不停止音频。任何类似停止的功能都会导致将无声波形(零)馈送到波输出。这主要是由于过于频繁地停止和启动时naaudio不稳定,但它也防止了“剩余缓冲区”问题。

【讨论】:

  • 谢谢。所以不是阻止你换成沉默?如果用户点击播放(可能与您的广播流略有不同),它会再次加载流还是使用相同的流并重置时间?
  • 我们必须编写自己的没有搜索能力的 MP3 帧解析器,所以我无法很好地回答这个问题。我根本不知道什么是最好的。
  • 好吧,我会再试一试,看看我能不能让它为我工作。
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多