2013-06-01 101 views
0

我有MediaFoundationEncodern音訊1.7 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之後,文件大小仍在繼續增長。文件中的時間線是正確的,寫入文件垃圾字節。

P.S.我使用NAudio的最新版本(1.7)。

+1

有幾件事要嘗試:1.運行WPF演示應用程序來枚舉MF編碼器和解碼器,並檢查是否確實有AAC編碼器。 2.嘗試使用「.mp4」文件擴展名。 –

+0

感謝Mark的幫助,你是對的,問題出在MF編碼器上,我在Windows 8上成功運行上面的代碼。但文件大小增長的問題仍然存在。你能幫助解決這個問題嗎? –

回答

0

無限期增長的文件大小可能是因爲您的輸入提供程序從不從其Read方法返回0。我建議您將所有音頻寫入內存流,然後將其用於RawSourceWaveProvider以形成編碼器的輸入。 (請記住在編碼之前將MemoryStream位置設置爲0)

+0

謝謝馬克,它幫助了我,對於遲到的回覆感到抱歉。 –