这里:
是使用 CSCore 库的示例实现,但它仅适用于控制台应用程序。是否可以在 Windows 窗体应用程序中使用它?
对的,这是可能的。
您必须将代码拆分为两个按钮,例如start
和stop
。按钮的 Click 事件中 go
之前的代码以及按钮的 click 事件中 go之后的所有内容。Console.ReadKey()
start
Console.ReadKey()
stop
在控制台变体中,所有变量都是该方法的本地变量。在不再起作用的 WinForms 变体中,我们将局部变量提升到表单的类级别。
using 语句基本上是一个 try/catch/finally 块,在 finally 块中调用 Dispose。关闭和处理现在成为我们自己的责任,因此在调用 Writer 和 Capturestop
的方法之后,类变量被分配一个空值。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;
}
}
}