【问题标题】:Sound processing: Should I use DirectSound or directly Win32 APIs?声音处理:我应该使用 DirectSound 还是直接使用 Win32 API?
【发布时间】:2010-10-06 19:10:19
【问题描述】:

我正在申请:

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

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

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

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    也没有? :)

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

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

    【讨论】:

    • 好的,但是如果我使用这个 WASAPI... 我的软件也可以在 XP 上运行吗?还是我应该为 XP 使用不同的“旧版”代码库? (在这种情况下,我会选择弃用的 API,除非 WASAPI 给了我非常好的改进)
    • 是的,WASAPI 仅适用于 Vista。您绝对不想使用 WinMM 函数。大多数专业音频应用程序都使用内核流(WavePCI 或 WaveCyclic),因为它可以在 Windows 2000/XP/Vista(有驱动程序支持)中运行,尽管它比 DirectSound 等更难实现。
    • 如果您想要在 Vista 和 XP 中仍然有效但又不会让人头疼的东西,我会说使用 DirectSound。如果你有能力实现它,我会说内核流。
    • 正如您将在市场上看到的那样,大多数应用程序通过多种用户可选择的方法提供抽象输出;如果您的应用程序旨在成为专业应用程序,那么它可能会从类似的功能中受益匪浅。
    【解决方案2】:

    听起来您将对延迟非常敏感。看看ASIO可能会有所收获

    【讨论】:

      【解决方案3】:

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

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

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

      OpenAL 看起来很有希望。

      【讨论】:

        【解决方案4】:

        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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多