ここ:
CSCore ライブラリを使用した実装例ですが、コンソール アプリケーションでのみ動作します。これを Windows フォーム アプリケーションで使用することは可能ですか?
ここ:
CSCore ライブラリを使用した実装例ですが、コンソール アプリケーションでのみ動作します。これを Windows フォーム アプリケーションで使用することは可能ですか?
はい、可能です。
startたとえばとの 2 つのボタンにコードを分割する必要がありstopます。
の前のコードはボタンConsole.ReadKey()の Click イベントに入り、startその後のすべてのコードはボタンConsole.ReadKey()のクリック イベントに入りstopます。
コンソール バリアントでは、すべての変数がメソッドに対してローカルです。動作しなくなる WinForms バリアントでは、ローカル変数をフォームのクラス レベルに昇格させます。
using ステートメントは、基本的に try/catch/finally ブロックであり、finally ブロックで Dispose が呼び出されます。クローズと破棄は私たち自身の責任になるため、Writer と Capture の両方のメソッドが呼び出された後、クラス変数に null 値が割り当てられますstop。Dispose
次のような結果になります。
public class Form1:Form
{
// other stuff
private WasapiCapture capture = null;
private WaveWriter w = null;
private void start_Click(object sender, EventArgs e)
{
capture = new WasapiLoopbackCapture();
capture.Initialize();
//create a wavewriter to write the data to
w = new WaveWriter("dump.wav", capture.WaveFormat));
//setup an eventhandler to receive the recorded data
capture.DataAvailable += (s, capData) =>
{
//save the recorded audio
w.Write(capData.Data, capData.Offset, capData.ByteCount);
};
//start recording
capture.Start();
}
private void stop_Click(object sender, EventArgs e)
{
if (w != null && capture !=null)
{
//stop recording
capture.Stop();
w.Dispose();
w = null;
capture.Dispose();
capture = null;
}
}
}
上記のコードは、ユーザーthefiloeによってこの回答から改作されました