0

MediaFoundationEncoder に問題があります

入力デバイス ファイルからAAC形式で録音する必要があるため、次のコードを記述します。

    private Timer timer;
    private static IWaveIn _waveIn;
    private static IWaveProvider _provider;
    public void StartRecorder()
    {
        _waveIn = new WaveInEvent
            {
                WaveFormat = new WaveFormat(8000, 1)

            };
        _provider = new WaveInProvider(_waveIn);

        _waveIn.DataAvailable += OnDataAvailable;
        _waveIn.StartRecording();

        //for testing purpose write only first 5 seconds.
        timer = new Timer(5000);
        timer.Elapsed += (sender, args) => Stop();
        timer.Start();


    }

    private void Stop()
    {
        timer.Stop();
        _waveIn.StopRecording();
        _waveIn.Dispose();
        _waveIn = null;
        var outputFilename = String.Format("D:\\{0:yyy-mm-dd HH-mm-ss}.aac", DateTime.Now);
        MediaFoundationEncoder.EncodeToAac(_provider, outputFilename);
        _provider = null;
    }

また、MediaFoundationEncoder.EncodeToWma を使用しようとしましたが、記録を停止して _waveIn を破棄した後もファイル サイズが大きくなり続けました。ファイルのタイムラインは正しいです。何かがファイルのゴミ箱バイトに書き込みます。

PS Imは、NAudio(1.7)のlastetビルドを使用しています。

4

1 に答える 1

0

入力プロバイダーが Read メソッドから 0 を返さないため、ファイル サイズが無制限に大きくなる可能性があります。すべてのオーディオをメモリ ストリームに書き込み、それを RawSourceWaveProvider と共に使用して、エンコーダへの入力を形成することをお勧めします。(エンコードする前に、MemoryStream の位置を 0 に設定することを忘れないでください)

于 2013-06-02T18:59:49.437 に答える