使用 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# 实时录制声音的主要内容,如果未能解决你的问题,请参考以下文章