1

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をリセットする必要がある場合、[停止]をクリックするとトラックが停止するという問題が発生しますが、後でもう一度[再生]をクリックすると、トラックが再開する前に少しノイズが残ります。

サンプルの1つのソースコードを見ると、Stop()を呼び出すだけです。

4

1 に答える 1

0

naudioの使用では、オーディオを停止することはありません。停止のような機能は、無音の波形 (ゼロ) をウェーブ出力に送ります。これは主に naudio が頻繁に停止および開始したときに不安定になることが原因でしたが、「残りのバッファ」の問題も防ぎます。

于 2011-09-08T10:24:23.000 に答える