【问题标题】:Best cross-platform audio library for synchronizing audio playback用于同步音频播放的最佳跨平台音频库
【发布时间】:2010-01-24 21:54:40
【问题描述】:

我正在编写一个跨平台程序,该程序涉及滚动波形以及未压缩的 wav/aiff 音频播放。低延迟和准确性非常重要。与外部时钟同步时,用于音频播放的最佳跨平台音频库是什么?我的意思是我希望能够编写播放代码,以便它每秒多次向侦听器发送事件,其中包括通知时的“听力帧”。 这就是我需要做的。没有录音,没有混音,没有 3d 音频,什么都没有。只需播放可用的最佳听力框架通知即可。

现在我正在考虑 RTAudio 和 PortAudio,主要是前者,因为它使用 ALSA。 目标平台按重要性顺序依次是 Mac OSX 10.5/6、Ubuntu 10.11、Windows XP/7。 C/C++ 都很好。

感谢您的帮助!

【问题讨论】:

    标签: audio cross-platform


    【解决方案1】:

    性能最好的跨平台库是 jack。正确配置,Linux 上的 jack 可以轻松胜过 Windows asio(在低延迟处理方面没有丢失)。但是你不能指望普通用户使用jack(恶魔应该在应用程序启动之前由用户启动,设置起来可能有点棘手)。如果您正在为专业音频制作应用程序,我强烈建议您查看 jack。

    编辑:

    Portaudio 没有那么高性能,但对用户来说更简单(不像杰克那样,他们不需要特殊配置)。我使用过的大多数开源跨平台音频程序都使用 portaudio(比 openal 更多),但与 jack 不同的是,我没有亲自使用过它。它是基于回调的,虽然看起来很简单。

    【讨论】:

    • 感谢您的想法。有没有办法静态链接到可再发行版本的千斤顶?如果不是,我认为它不会对我有用。我们非常关心易于部署。我会继续阅读它们。
    • 为了最终用户的方便,portaudio 可能是你最好的选择,我编辑了我的答案以反映这一点。
    • 我重新阅读并看到您已经在使用 portaudio - 如果您在仅显示波形时遇到性能问题,我建议从回调中删除非 rt-safe 函数,并将它们移动到主线程中.非 rt 函数主要是:printf 或任何其他 io 到文件或套接字,任何在信号量上等待的东西,或 malloc。
    • 再次感谢。我目前没有使用 PortAudio,现在该应用程序使用 Java Sound,这在 Mac 上很好,在 Windows 上几乎不能接受,在 Linux 上基本上坏了。所以我希望用 JNI 重新实现我的音频接口。我玩了一下 RTAudio。我无法让它在 Linux 上编译,但在 Mac 上它运行良好。我看到的唯一缺点是它的级别非常高,因此获取进度通知的唯一方法是在睡眠循环中查询该行。而且它不支持增益控制。
    • 增益控制在客户端很容易实现 for(i = 0; i
    【解决方案2】:

    OpenAL 可能是您的一个选择。

    【讨论】:

    • 嗨西蒙,感谢您的反馈。我研究了 OpenAL,但我担心它仅在创意卡上受支持,并且未来有些不确定。您是否不同意,或者与包装系统原生音频 API 的跨平台库相比,OpenAL 是否有额外的好处?再次感谢。
    • 从 iPhone 到 Linux 到 Windows 到 Mac OS X 的许多卡和平台都支持 OpenAL。它最初是由 creative 启动的,但现在可以被认为是 OpenGL 和其他的音频等价物开放*标准。事实上,OpenAL 是 iPhone 的原生音频 API。
    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多