3

我正在尝试记录扬声器输出以检测任何使用 C# 和 NAudio API 播放的音乐的音量和 BPM。

问题是,我不知道该怎么做:/

我有一个来自http://opensebj.blogspot.de/2009/04/naudio-tutorial-5-recording-audio.html的示例代码,他们用更少的代码记录简单的输入......

waveInStream = new WaveIn(44100,2);

“44100, 2”是什么意思?这是否针对要记录的设备???

我如何定位扬声器输出?

有人可以帮帮我吗?甚至使用另一个 API?

谢谢

4

2 回答 2

8

您可能正在寻找的是WasapiLoopbackCapture类,它允许您录制计算机产生的所有声音。注意:这仅适用于 Windows Vista/7!

要开始录制,请执行以下操作:

waveIn = new WasapiLoopbackCapture();
waveIn.DataAvailable += InputBufferToFileCallback;    
waveIn.StartRecording();

然后,每次录制缓冲区满时,InputBufferToFileCallback都会调用该函数:

public void InputBufferToFileCallback(object sender, WaveInEventArgs e)
{
  // The recorder bytes can be found in e.Buffer
  // The number of bytes recorded can be found in e.BytesRecorded
  // Process the audio data any way you wish...
}

我认为您链接的教程已将您置于错误的轨道上,因为在当前版本的 NAudio 中,我看不到new WaveIn(44100,2);构造函数。自本教程首次编写以来,NAudio 可能已被修改。

最后一点,数字 44100 和 2 分别表示采样率和通道数。

于 2012-08-22T23:15:31.837 回答
0

正如在接受的答案中所说,您所遵循的教程中的代码来自旧版本的 NAudio,在该版本中,需要将采样率和通道数作为参数传递给WaveIn构造函数。

正如答案建议您使用WasapiLoopbackCapture,也许这可以补充它。

NAudio 的较新实现不将采样率 ( 44100) 和通道数 ( 2) 作为WaveIn构造函数的参数。您可以简单地调用WaveIn不带参数的构造函数:

waveInStream = new WaveIn();
于 2019-10-08T02:55:57.530 回答