2011-12-12 114 views
2

我試圖創建一個應用程序,允許我在每次輸入音量大於給定音量時錄製一個wav文件。當聲音輸入達到一定水平時,使用naudio開始記錄波

我的代碼來記錄聲音關閉按鈕,但我想將其自動化,下面我的代碼:

public partial class Form1 : Form 
{ 
    private WaveIn waveIn; 
    private WaveFileWriter writer; 
    String outputFilename = @"c:\test.wav"; 

    public Form1() 
    { 
     InitializeComponent(); 

     int sampleRate = 22000; 
     int channels = 1; 
     waveIn = new WaveIn(); 
     waveIn.WaveFormat = new WaveFormat(sampleRate, channels); 
     waveIn.DeviceNumber = 0; 
     waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(
      waveIn_DataAvailable); 
     writer = new WaveFileWriter(outputFilename, waveIn.WaveFormat);   
     waveIn.StartRecording(); 
    } 

    void waveIn_DataAvailable(object sender, WaveInEventArgs e) 
    { 
     writer.WriteData(e.Buffer, 0, e.BytesRecorded); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     waveIn.StopRecording(); 
     waveIn.Dispose(); 
     writer.Close(); 
    } 
} 
+3

請不要在「C#」前添加標題。這就是標籤的用途。另請參閱http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ –

回答

3

waveIn_DataAvailable您可以通過在e.Buffer看字節檢查每一個樣品。 (假設您以16位記錄,每對字節是一個樣本 - 使用BitConverter.ToInt16)。如果有任何樣本超出您指定的閾值,那麼您可以使用writer.WriteData進行編寫。

要關閉錄音,您可能需要檢查一定數量的「無聲」樣本是否已通過。