Audio 用于同步音频播放的最佳跨平台音频库

Audio 用于同步音频播放的最佳跨平台音频库,audio,cross-platform,Audio,Cross Platform,我正在编写一个跨平台程序,其中包括滚动波形以及未压缩的wav/aiff音频播放。低延迟和准确性非常重要。与外部时钟同步时,用于音频播放的最佳跨平台音频库是什么?我的意思是,我希望能够编写回放代码,以便它每秒多次向侦听器发送事件,包括通知时的听觉帧。 这就是我需要做的。没有录音,没有混音,没有3d音频,什么都没有。只需播放尽可能最佳的听觉帧通知即可 现在我正在考虑RTAudio和PortAudio,主要是前者,因为它使用ALSA。 目标平台的重要性依次为MacOSX10.5/6、Ubuntu10.

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

现在我正在考虑RTAudio和PortAudio,主要是前者,因为它使用ALSA。 目标平台的重要性依次为MacOSX10.5/6、Ubuntu10.11、WindowsXP/7。 C/C++都很好


谢谢你的帮助

OpenAL可能是您的选择。

OpenAL可能是您的选择。

性能最好的跨平台库是jack。如果配置得当,Linux上的jack可以轻松地在低延迟处理方面胜过Windows asio,而不会丢失。但是你不能期望普通用户使用jack。demon应该在应用程序启动之前由用户启动,而且设置起来可能有点棘手。如果你是专门为专业音频制作应用程序,我强烈建议你去看看杰克

编辑:


虽然性能不高,但对用户来说要简单得多,与jack不同,他们的终端不需要特殊配置。我使用过的大多数开源跨平台音频程序使用的portaudio比openal多得多,但与jack不同的是,我没有亲自使用过portaudio。它是基于回调的,而且看起来非常简单。

对于它来说,性能最好的跨平台库是jack。如果配置得当,Linux上的jack可以轻松地在低延迟处理方面胜过Windows asio,而不会丢失。但是你不能期望普通用户使用jack。demon应该在应用程序启动之前由用户启动,而且设置起来可能有点棘手。如果你是专门为专业音频制作应用程序,我强烈建议你去看看杰克

编辑:


虽然性能不高,但对用户来说要简单得多,与jack不同,他们的终端不需要特殊配置。我使用过的大多数开源跨平台音频程序使用的portaudio比openal多得多,但与jack不同的是,我没有亲自使用过portaudio。它是基于回调的,看起来非常简单。

嗨,西蒙,谢谢你的反馈。我曾研究过OpenAL,但我担心它只在创意卡上得到支持,而且未来会有些不确定。您是否不同意,或者OpenAL是否比包装系统本机音频API的跨平台库有更多好处?再次感谢。从iPhone到Linux到Windows再到Mac OS X,OpenAL在很多卡片和平台上都得到了支持。它最初由creative发起,但现在可以被认为是OpenGL和其他OpenGL*标准的音频等价物。事实上,OpenAL是iPhone的原生音频API。嗨,西蒙,谢谢你的反馈。我曾研究过OpenAL,但我担心它只在创意卡上得到支持,而且未来会有些不确定。您是否不同意,或者OpenAL是否比包装系统本机音频API的跨平台库有更多好处?再次感谢。从iPhone到Linux到Windows再到Mac OS X,OpenAL在很多卡片和平台上都得到了支持。它最初由creative发起,但现在可以被认为是OpenGL和其他OpenGL*标准的音频等价物。事实上,OpenAL是iPhone的原生音频API。谢谢你的想法。有没有办法静态链接到可再发行版本的jack?如果不是的话,我想这对我不起作用。我们非常关注部署的简单性。我将继续阅读它们。为了最终用户的方便,portaudio可能是您最好的选择,我编辑了我的答案以反映这一点。我重新阅读,发现您已经在使用portaudio-如果您在显示波形时遇到性能问题,我建议从回调中删除非rt安全函数,并将它们移动到主线程中。非rt函数主要是:printf或任何其他文件或套接字的io,任何等待信号量的函数,或者malloc.than。我目前没有使用PortAudio,现在这个应用程序使用Java声音,在Mac上很好,在Windows上几乎不可接受,在Linux上基本上是坏的。所以我希望用JNI重新实现我的音频接口。我和RTAudio玩了一会儿。我无法在Linux上编译它,但在Mac上它工作得很好。我看到的唯一缺点是它的级别非常高,因此获取进度通知的唯一方法是在休眠循环中查询该行。并且它不支持增益控制。增益控制在客户端中很容易实现,因为i=0;i.尺寸;i++{buffer[i]*=ga
在}-除非您混合了大量通道,否则这不会对效率造成太大的影响。另外-如果进度通知指的是播放进度,则可以在回调中增加进度计数器。谢谢您的想法。有没有办法静态链接到可再发行版本的jack?如果不是的话,我想这对我不起作用。我们非常关注部署的简单性。我将继续阅读它们。为了最终用户的方便,portaudio可能是您最好的选择,我编辑了我的答案以反映这一点。我重新阅读,发现您已经在使用portaudio-如果您在显示波形时遇到性能问题,我建议从回调中删除非rt安全函数,并将它们移动到主线程中。非rt函数主要是:printf或任何其他文件或套接字的io,任何等待信号量的函数,或者malloc.than。我目前没有使用PortAudio,现在这个应用程序使用Java声音,在Mac上很好,在Windows上几乎不可接受,在Linux上基本上是坏的。所以我希望用JNI重新实现我的音频接口。我和RTAudio玩了一会儿。我无法在Linux上编译它,但在Mac上它工作得很好。我看到的唯一缺点是它的级别非常高,因此获取进度通知的唯一方法是在休眠循环中查询该行。并且它不支持增益控制。增益控制在客户端中很容易实现,因为i=0;i.尺寸;i++{buffer[i]*=gain}-除非您混合了大量通道,否则这不会对效率造成太大影响。另外-如果进度通知是指播放进度,则可以在回调中增加进度计数器。