【问题标题】:C# how to record general audio from output device ( speaker ) with NAudio APIC# 如何使用 NAudio API 从输出设备(扬声器)录制一般音频
【发布时间】:2012-08-03 10:23:57
【问题描述】:

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

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

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

waveInStream = new WaveIn(44100,2);

“44100, 2”是什么意思?这是否以设备为目标进行录制???

如何定位扬声器输出?

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

谢谢

【问题讨论】:

  • 44100 的意思是“每秒采样数” - 它与普通 cd 相同 - 通常缩短为 44.1 2 我不是 100% 确定,但它可能意味着立体声,即 2 通道不是单声道为 1。

标签: c# audio-recording naudio speaker


【解决方案1】:

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

【讨论】:

  • 谢谢。我会尽快尝试的。但现在它似乎适合我^^
  • 我怎样才能得到数据的价值,比如说更深层次的声音的音量,也许是 32 和 64 赫兹区域?我想让节拍稍微闪烁一下……我没有任何音频编程经验。如何实时处理音频数据?
  • 我不知道该问题的确切答案,但您可能需要执行以下操作: 1. 在开始录制后添加一个断点并查看 waveIn 变量以查看音频属性是(如采样率、位数、通道等) 2. 阅读 PCM(脉冲编码调制),这是音频编码的格式(也称为 WAV,维基百科可能是一个好的开始) 3. 仔细查看 Naudio 中包含的演示,并在那里搜索或询问更多信息。 (naudio.codeplex.com/discussions)
  • 我希望能给你买杯啤酒。 Loopback 正是我所需要的!
  • 什么是 windows 8.1 等效项?
【解决方案2】:

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

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

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

waveInStream = new WaveIn();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多