声音处理:我应该使用DirectSound还是直接使用Win32 API?

时间:2009-02-11 00:00:47

标签: winapi audio audio-recording directsound audio-player

我正在申请:

  • 从麦克风录制并对输入进行实时处理
  • 播放MP3文件(常规歌曲),但实时操作输出
  • 我不时要在这首歌上播放额外的声音,但我想我只需添加缓冲区即可。

简而言之,我需要有循环缓冲区来进行录制和播放,我需要每隔20 ms左右“输入”输出缓冲区,以及即将播放的新数据。

我一直在关注DirectSound,它似乎没什么帮助。对输出缓冲区的读取和写入看起来与Win32非常相似,它是唯一有助于播放主歌曲“附加声音”的地方。

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

提前致谢!

4 个答案:

答案 0 :(得分:5)

Directsound API为您提供更好的实时控制。它们也是在Windows中使用声音的受支持方式。我的印象是win32 api被删除了,但我可能错了。

这个问题离您很近

https://stackoverflow.com/questions/314522/what-is-the-best-c-sound-api-for-windows

Is DirectSound the best audio abstraction layer for Windows?

最后但同样重要的是,这就是微软必须说的http://msdn.microsoft.com/en-us/library/dd370784(VS.85).aspx

答案 1 :(得分:5)

既不? :)

故事是DirectSound是waveOut的替代品,但DirectSound将DirectInput作为Vista中已弃用的API加入,并替换为WASAPI。 DirectSound和waveOut在Vista中的User-Space WASAPI之上实现。在XP上,waveOut和DirectSound提供给相同的内核级别的Mixer API。

要整合所有这些接口,请查看类似OpenAL的内容,它是与OpenGL相同的良好支持的音频标准。

答案 2 :(得分:3)

听起来你会对延迟非常敏感。查看ASIO

可能会有所收获

答案 3 :(得分:2)

我找到了Harmony Central - Audio Programming。另请阅读w:DirectSound

  

Windows Vista功能齐全   重写基于的音频堆栈   通用音频架构。因为   的建筑变化   重新设计的音频堆栈,直接路径   从DirectSound到音频驱动程序   不存在。

     

因为Xbox 360和Microsoft   Windows集成,微软是   积极推动开发人员迁移   等效Xbox的新应用程序   音频API,如XAudio和XACT。

OpenAL看起来很有希望。