C#での遅延時間の後に、独自のオーディオレコーダーを停止します(NAudioを使用して)

StackOverflow https://stackoverflow.com/questions/4203736

  •  25-09-2019
  •  | 
  •  

質問

私はC#でNAudioを使用して録音した音声を作っていると私は使用停止ボタンを削除し、単にいくつかの時間遅延の後、独自に録音を停止する必要があります。

レコードイベントのコードがある

     private void cmbRecord_Click(object sender, EventArgs e)
     {
            outputFilename = "file address";

            waveInStream = new WaveIn(44100,2);
            writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);

            waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
            waveInStream.StartRecording();


            // Just controling the objects on the screen.
            cmbRecord.Enabled = false;
            cmbStop.Enabled = true;

    } 


     void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
    {
        writer.WriteData(e.Buffer, 0, e.BytesRecorded);
        int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);

    }

ストップボタンが

のように与えられます。
      private void cmbStop_Click(object sender, EventArgs e)
    {
        waveInStream.StopRecording();
        waveInStream.Dispose();
        waveInStream = null;
        writer.Close();
        writer = null;

        cmbRecord.Enabled = true;
        cmbStop.Enabled = false;
    }

私はcmbRecord_Clickイベント内で自動的に録画を停止する必要があります。 事前に感謝します。

役に立ちましたか?

解決

セット

使用A タイマーに、 Intervalとは、タイマーのcmbStop_Clickイベントに上OnTickイベントのコードをコピーします。 mbRecord_Clickイベントでタイマーを有効にして、&cmbStop_Clickイベントでタイマーを無効にすることを忘れないでください。

編集

新しいタイマーを作成し、その値を設定

//フォームのクラスレベルでこの行を置く。

  System.Windows.Forms.Timer mytimer=new System.Windows.Forms.Timer(); //create a new Timer

//はちょうどInitializeComponent()後、フォームのコンストラクタにこれら二つを置きます。

mytimer.Interval=1000; //set the interval to 1 second.
mytimer.Tick += new EventHandler(mytimer_Tick);

mbRecord_Clickイベントでタイマーを有効にします。

private void cmbRecord_Click(object sender, EventArgs e)
{
            outputFilename = "file address";

            waveInStream = new WaveIn(44100,2);
            writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);

            waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
            waveInStream.StartRecording();


            // Just controling the objects on the screen.
            cmbRecord.Enabled = false;
            cmbStop.Enabled = true;

            //Enable the timer to fire
            mytimer.Enabled = true;

}

停止1秒後に記録..

void mytimer_Tick(object sender, EventArgs e)
{       
        waveInStream.StopRecording();
        waveInStream.Dispose();
        waveInStream = null;
        writer.Close();
        writer = null;

        cmbRecord.Enabled = true;
        cmbStop.Enabled = false;
//disable the timer here so it won't fire again...
        mytimer.Enabled = false;
}

他のヒント

あなたが遅延閉鎖する場合がありますので、DataAvailableへのコール(コールバックモデルに応じて、または時には、使用)の後StopRecordingコールバックのがあるでしょう - あなたの心に留めてよいでしょう。

一つのことWaveFileWriterあなたはすべてを書いたまで。

NAudioを使用し、60秒後に録画を停止 VoiceRecorder のサンプルプロジェクトを見てください。記録が自動的にどのように私はこの記事を説明します停止します。

long maxFileLength = this.recordingFormat.AverageBytesPerSecond * 60;

int toWrite = (int)Math.Min(maxFileLength - writer.Length, bytesRecorded);
if (toWrite > 0)
    writer.WriteData(buffer, 0, bytesRecorded);
else
    Stop();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top