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

Winapi 声音处理:我应该使用DirectSound还是直接使用Win32 API?,winapi,audio,audio-recording,directsound,audio-player,Winapi,Audio,Audio Recording,Directsound,Audio Player,我正在申请,我将: 从麦克风录制,并对输入进行实时处理 播放MP3文件(普通歌曲),但实时处理输出 偶尔我也需要在这首歌上播放额外的声音,但我想我可以通过简单地添加缓冲区来做到这一点 简言之,我需要为录制和播放设置循环缓冲区,并且我需要每隔20毫秒左右向输出缓冲区“输入”即将播放的新数据 我一直在看DirectSound,但它似乎没有什么帮助。对输出缓冲区的读取和写入似乎与Win32非常相似,唯一有帮助的地方似乎是在主歌上播放“附加声音” 我应该使用DirectSound,还是直接使用原始W

我正在申请,我将:

  • 从麦克风录制,并对输入进行实时处理
  • 播放MP3文件(普通歌曲),但实时处理输出
  • 偶尔我也需要在这首歌上播放额外的声音,但我想我可以通过简单地添加缓冲区来做到这一点
简言之,我需要为录制和播放设置循环缓冲区,并且我需要每隔20毫秒左右向输出缓冲区“输入”即将播放的新数据

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

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


提前谢谢

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

这个问题和你的问题很接近

最后但并非最不重要的一点是,这是我发现的微软所说的话。也读

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

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


看起来很有希望。

听起来你对延迟非常敏感。这两种情况都不值得一看

故事是DirectSound取代了waveOut,但DirectSound在Vista中加入了DirectInput作为不推荐的API,并被替换为。DirectSound和waveOut是在Vista的用户空间WASAPI之上实现的。在XP上,waveOut和DirectSound馈送到同一内核级混音器API


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

好的,但是如果我使用这个WASAPI。。。我的软件也能在XP上运行吗?或者我应该为XP使用不同的“遗留”代码库吗?(在这种情况下,我会选择不推荐的API,除非WASAPI给了我比它们非常好的改进)是的,WASAPI只是Vista。您肯定不想使用WinMM函数。大多数专业音频应用程序都使用内核流(WavePCI或WaveCyclic),因为它在Windows 2000/XP/Vista(有驱动程序支持)下工作,尽管它比DirectSound这样的应用程序更难实现。如果您想要在Vista和XP中仍能正常工作但又不太头疼的应用程序,我建议您使用DirectSound。如果你有能力实现内核流,我会说内核流。不过,正如你在市场上看到的,大多数应用程序通过多种用户选择的方法提供抽象输出;如果您的应用程序是一个专业的应用程序,它可能会从类似的功能中受益匪浅。