Воспроизведение MP3 с помощью NAudio - проблемы с остановкой () - PullRequest
1 голос
/ 08 сентября 2011

Я только начал использовать 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 (). Во-первых, мне нужно сбросить свойство CurrentTime после вызова Stop ()? В настоящее время он действует больше как кнопка паузы, то есть возобновляет трек в том же месте, где он был «остановлен». Если мне нужно сбросить CurrentTime, у меня теперь возникает проблема, при которой, если я нажимаю «Стоп», дорожка останавливается, но если я нажимаю «Воспроизвести» впоследствии, я получаю небольшой остаточный шум перед тем, как дорожка начинается снова.

Глядя на исходный код одного из примеров, все, что он делает, это вызывает Stop ().

1 Ответ

0 голосов
/ 08 сентября 2011

В нашем использовании naudio мы никогда не останавливаем звук. Любая функция, подобная остановке, приводит к тому, что бесшумный сигнал (нули) подается на выход волны. Это происходило главным образом из-за нестабильности в naudio при слишком частой остановке и запуске, но также предотвращает проблему «оставшегося буфера».

...