2013-03-11 106 views
0

我試圖從聲卡中發出的音頻創建一個錄音機,這是迄今爲止我的進展,問題是錄製的音頻在保存到文件時如同歌曲一樣大,最多可達到數百兆字節。在寫入文件時壓縮音頻

這裏是我的代碼

using NAudio.CoreAudioApi; 
using NAudio.Wave; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Record_From_Soundcard 
{ 
    public partial class frmMain : Form 
    { 
     private WaveFileWriter writer; 
     private WasapiLoopbackCapture waveInSel; 

     public frmMain() 
     { 
      InitializeComponent(); 
     } 

     private void frmMain_Load(object sender, EventArgs e) 
     { 
      MMDeviceEnumerator deviceEnum = new MMDeviceEnumerator(); 
      MMDeviceCollection deviceCol = deviceEnum.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active); 

      cboAudioDrivers.DataSource = deviceCol.ToList(); 
     }  

     private void btnStopRecord_Click(object sender, EventArgs e) 
     { 
      waveInSel.StopRecording(); 
      writer.Close(); 
     }   

     private void btnStartRecord_Click(object sender, EventArgs e) 
     { 
      using (SaveFileDialog _sfd = new SaveFileDialog()) 
      { 
       _sfd.Filter = "Mp3 File (*.mp3)|*.mp3";    

       if (_sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
       { 
        MMDevice _device = (MMDevice)cboAudioDrivers.SelectedItem; 
        waveInSel = new WasapiLoopbackCapture(_device); 
        writer = new WaveFileWriter(_sfd.FileName, waveInSel.WaveFormat);      

        waveInSel.DataAvailable += (n, m) => 
        { 
         writer.Write(m.Buffer, 0, m.BytesRecorded); 
        }; 

        waveInSel.StartRecording(); 
       } 
      } 
     } 
    } 

} 

誰能幫助我如何在保存壓縮音頻?

也許這將是這部分提前..添加

waveInSel.DataAvailable += (n, m) => 
    { 
     writer.Write(m.Buffer, 0, m.BytesRecorded); 
    }; 

感謝;)

回答

0

您不能保存WAV文件帶有.MP3擴展使一個MP3文件(該文件就是你在這裏做的)。您需要選擇機器上可用的編碼器,並通過該編碼器傳遞音頻。我在this article中詳細討論瞭如何使用NAudio來做到這一點。

+0

我有這樣的想法,將結果編碼爲mp3,但我總是得到一個錯誤**請選擇一個PCM WAV文件進行編碼。**所以也許創建的WAV文件沒有完成?或沒有正確格式化爲WAV? – 2013-03-14 07:05:50

+0

是否有任何代碼片斷,當數據在** waveInSel.DataAvailable **中可用時,緊湊的m.Buffer? – 2013-03-14 07:25:35