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 我正在使用 NAudio (1.7) 的最新版本。

4

1 回答 1

0

文件大小无限增长的问题很可能是因为您的输入提供程序从不从其 Read 方法返回 0。我建议您将所有音频写入内存流,然后将其与 RawSourceWaveProvider 一起使用以形成编码器的输入。(记得在编码前将 MemoryStream 位置设置为 0)

于 2013-06-02T18:59:49.437 回答