声音处理:我应该使用 DirectSound 还是直接使用 Win32 API?
-
22-08-2019 - |
题
我正在申请:
- 从麦克风录音并对输入进行一些实时处理
- 播放 MP3 文件(一首普通歌曲),但实时操作输出
- 有时我也需要在这首歌上播放额外的声音,但我想我可以通过简单地添加缓冲区来做到这一点。
简而言之,我需要有用于录制和播放的循环缓冲区,并且我需要每 20 毫秒左右向输出缓冲区“馈送”即将播放的新数据。
我一直在研究 DirectSound,它似乎没有多大帮助。输出缓冲区的读取和写入看起来与 Win32 非常相似,唯一有帮助的地方是在主歌曲上播放“附加声音”。
我应该使用 DirectSound,还是应该直接使用原始 Windows API?
DirectSound 能为我做些什么吗?
提前致谢!
解决方案
Directsound API 为您提供更好的实时控制。它们也是 Windows 中支持的使用声音的方式。我的印象是 win32 api 已被废弃,但我对此可能是错的。
这个问题很接近你的问题
https://stackoverflow.com/questions/314522/what-is-the-best-c-sound-api-for-windows
还
DirectSound 是 Windows 上最好的音频抽象层吗?
最后但并非最不重要的一点是,这是微软必须说的 http://msdn.microsoft.com/en-us/library/dd370784(VS.85).aspx
其他提示
两者都不?:)
故事是 DirectSound 是 waveOut 的替代品,但 DirectSound 在 Vista 中作为已弃用的 API 加入了 DirectInput 并被替换为 WASAPI. 。DirectSound 和waveOut 是在Vista 中的用户空间WASAPI 之上实现的。在 XP 上,waveOut 和 DirectSound 提供相同的内核级 Mixer API。
为了整合所有这些接口,请查看 OpenAL 之类的接口,它是一个与 OpenGL 一样得到良好支持的音频标准。
听起来您对延迟非常敏感。可能值得一看 澳大利亚安全情报组织
我发现 Harmony Central - 音频编程. 。另请阅读 w:直接声音.
Windows Vista具有基于通用音频体系结构的完全重写的音频堆栈。由于重新设计的音频堆栈的架构变化,因此不存在从指导到音频驱动程序的直接路径。
由于Xbox 360和Microsoft Windows Integration,Microsoft正在积极推动开发人员将新应用程序迁移到等效的Xbox音频API,例如Xaudio和XACT。
开放AL 看起来很有希望。