C#如何使用NAudio API记录来自输出设备(扬声器)的常规音频

问题描述 投票:1回答:2

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

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

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

waveInStream = new WaveIn(44100,2);

“ 44100,2”是什么意思?是否将设备定位为要从???

进行记录

我如何定位扬声器输出?

有人可以帮助我吗?甚至使用其他API?

thx

c# record naudio speaker
2个回答
6
投票

您可能正在寻找的是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分别表示采样率和通道数。


0
投票

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

作为答案,建议您使用WasapiLoopbackCapture,也许这可以对它进行补充。

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

waveInStream = new WaveIn();
© www.soinside.com 2019 - 2024. All rights reserved.