4

我正在申请我将:

  • 从麦克风录制并对输入进行一些实时处理
  • 播放 MP3 文件(一首普通歌曲),但实时处理输出
  • 有时我也需要在这首歌上播放额外的声音,但我想我可以通过简单地添加缓冲区来做到这一点。

简而言之,我需要有用于录制和播放的循环缓冲区,并且我需要每 20 毫秒左右向输出缓冲区“输入”即将播放的新数据。

我一直在研究 DirectSound,它似乎并没有多大帮助。对输出缓冲区的读取和写入似乎与 Win32 非常相似,它似乎有帮助的唯一地方是在主歌曲上播放“附加声音”。

我应该使用 DirectSound,还是应该直接使用原始 Windows API?
DirectSound 会为我做些什么吗?

提前致谢!

4

4 回答 4

5

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

于 2009-02-11T00:25:14.327 回答
5

两者都不?:)

故事是 DirectSound 是 waveOut 的替代品,但 DirectSound 在 Vista 中作为已弃用的 API 加入 DirectInput 并被WASAPI取代。DirectSound 和 waveOut 在 Vista 中的用户空间 WASAPI 之上实现。在 XP 上,waveOut 和 DirectSound 提供给同一个内核级别的 Mixer API。

要整合所有这些接口,请看一下 OpenAL 之类的东西,它是一种与 OpenGL 相同的受良好支持的音频标准。

于 2009-02-11T00:32:27.350 回答
3

听起来您将对延迟非常敏感。看看ASIO可能是值得的

于 2009-02-11T00:27:13.993 回答
2

我找到了Harmony Central - 音频编程。另请阅读w:DirectSound

Windows Vista 具有基于通用音频体系结构的完全重写的音频堆栈。由于重新设计的音频堆栈中的体系结构更改,从 DirectSound 到音频驱动程序的直接路径不存在。

由于 Xbox 360 和 Microsoft Windows 的集成,Microsoft 正在积极推动开发人员将新应用程序迁移到等效的 Xbox 音频 API,例如 XAudio 和 XACT。

OpenAL看起来很有希望。

于 2009-02-11T00:25:50.707 回答