2

私はナウディオ ライブラリを使用して音声録音プログラムに取り組んでいます。今、録音するには、保存ボタンよりも録音ボタンを押す必要があります。番組を常時録画して、録音した音声を自動で保存したい。助けてくれてありがとう。ここにコードの一部があります。録音開始:

    NAudio.Wave.WaveIn sourceStream = null;
    NAudio.Wave.WaveFileWriter waveWriter = null;

    private void SRecording_Click(object sender, EventArgs e)
    {
     if (sourceList.SelectedItems.Count == 0) return;

            SaveFileDialog save = new SaveFileDialog();
            save.Filter = "Wave File (*.wav)|*.wav;";
            string wavoutputpath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            wavoutputpath += "\\Speech.wav";
            save.FileName = wavoutputpath;

            int deviceNumber = sourceList.SelectedItems[0].Index;

            sourceStream = new NAudio.Wave.WaveIn();
            sourceStream.DeviceNumber = deviceNumber;
            sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);

            sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable);
            waveWriter = new NAudio.Wave.WaveFileWriter(save.FileName, sourceStream.WaveFormat);

            sourceStream.StartRecording();
    }

    private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
    {
        if (waveWriter == null) return;

        waveWriter.WriteData(e.Buffer, 0, e.BytesRecorded);
        waveWriter.Flush();
    }

記録を停止:

        if (sourceStream != null)
        {
            sourceStream.StopRecording();
            sourceStream.Dispose();
            sourceStream = null;
        }
        if (waveWriter != null)
        {
            waveWriter.Dispose();
            waveWriter = null;
        }
4

2 に答える 2

3

オーディオがないときに録音を停止したい場合は、一定数の「無音」サンプルが経過したかどうかを確認できます。イベント ハンドラーではWaveIn.DataAvailable、 のバイトを参照して各サンプルを調べることができますe.Buffer。で録音しているとします。16 bitすべて2 bytesが 1 つのサンプルを形成します。に変換しInt16て調べることができます。また、オーディオが再び利用可能になったときに録音を開始するために、サンプル値を調べて、しきい値を超えている場合は、それを書き始めることができます。

于 2013-11-14T14:15:06.693 に答える