使用 C++ 或 C# 实时录制声音

Posted

技术标签:

【中文标题】使用 C++ 或 C# 实时录制声音【英文标题】:Recording sound in real time with c++ or C# 【发布时间】:2013-12-17 12:28:43 【问题描述】:

我有一张专业的声卡,我想用 c++ 或 c# 记录吉他的信号,以便实时开发吉他效果。

如何通过c++方法实时记录?

这是否意味着我需要声卡 API? this one够了吗?

【问题讨论】:

【参考方案1】:

虽然可能不像使用预建库那么容易,但您可以从制造商处为您的声卡获取 C++ SDK。我会先浏览他们的网站或联系支持人员。

如果这不是一个选项,您还可以使用 DirectX 系列产品中的 DirectSound。学习曲线相当陡峭,但我相信它应该可以做任何你想做的事情。

最后一个选择是查看最喜欢的工具(例如 sound forge)。其中许多工具支持自动化,这意味着您可以点击应用程序,决定您想要什么,然后自动化该事件序列(例如See this)。

希望对您有所帮助,祝您好运!

旁注:我已经开发了许多硬件接口,根据我的经验,最好从一个至少可以完成您正在寻找的事情的示例开始,然后从那里修改代码.如果任何特定选项没有这样的示例,我可能会跳过它以支持有示例的示例。

示例

Direct Sound - Microsoft 有一个 Direct Sound 学习网站,您可以 find here。我还找到了this blog article,它有一个使用直接声音录制音频的示例。

Sound Forge - 如果您下载“脚本开发者工具包”,则脚本文件夹中的 C# 示例应该可以帮助您入门。我相信这个特殊的工具更专注于编辑和效果,但我猜应该有自动化录制。

【讨论】:

非常感谢 :) +1 的回答。你有什么简单的例子吗?我知道采样是PCM ..我想我会从从笔记本电脑的集成声卡线路输入输入中捕获声音开始,例如..然后尝试询问制造商是否有我的专业声音的SDK卡..你能举个例子吗?这会很有帮助:) @Elior 在我的帖子中添加了一些链接。我会从这些开始,看看他们会把你带到哪里! 所有声卡都在使用asio4all,不是吗?那么我在哪里可以找到这个 sdk? 在我撰写此评论时,您可以在此站点上找到 OEM SDK:mtippach.proboards.com/thread/1761 ASIO 和 DirectSound(或提到的其他选项)之间的主要区别是它将直接转到硬件而不是使用 windows 转换音频。这可以提高性能,但我认为查找文档和示例会更加困难,因为这是一个专有的 SDK。希望有帮助!【参考方案2】:

要实时录制音频,任何 API 都可以。请注意,WASAPI 是主要 API(自 Vista 以来),WaveIn API、DirectSound 等传统 API 作为兼容性层在 WASAPI 之上实现。

常规 API 假设您可以接受特定的处理延迟/开销,大约为几十毫秒。

如果您要比这更快,并且您需要实时性能,例如处理数据并尽快返回以进行回放,您需要所谓的exclusive mode streams,您可以在其中实现延迟几毫秒的数量级,与专业音频开发套件相当。

Windows SDK 在\Samples\multimedia\audio (C++) 中有一些录音示例

【讨论】:

【参考方案3】:

为此使用第三方库可能是个好主意。 有很多选择。我知道的有portaudio 和STK。

【讨论】:

【参考方案4】:

我喜欢Fmod API,它支持录制(Sound recording with FMOD library)和实时效果。

【讨论】:

以上是关于使用 C++ 或 C# 实时录制声音的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone 8 从麦克风 C# 录制声音

为啥我使用 WinAPI C++ 录制的声音无法正常播放?

使用 OpenAL(C++) 录制声音。缓冲区大小

从应用程序录制和保存声音?

录制发送到扬声器的声音

将实时音频与 Android 中录制的音频进行比较