从 shell 同时播放多个音频文件的可靠方法?

Robust way to play multiple audio files concurrently from the shell?

我正在尝试通过几个并发的 shell 脚本在 Mac (OS X 10.10.5) 上播放音频文件。每个脚本在单独的终端会话中运行,并定期调用 sox (v. 14.4.2) 的实例来播放音频文件。例如,一个脚本可能会这样做:

sox foo.aif -t coreaudio

而另一个脚本执行此操作:

sox bar.aif -t coreaudio

第二个文件播放正常,但仅在回显错误消息后才播放

sox[8139:17123955] *** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x46407, name = 'sox' See /usr/include/servers/bootstrap_defs.h for the error codes.

(/usr/include/servers/bootstrap_defs.h 不是很有帮助:它说错误代码 1100 被定义为 BOOTSTRAP_NOT_PRIVILEGED。)

只要另一个实例仍在播放,sox 的每个后续调用都会抛出相同的错误。我已尝试 运行 最多 4 个并发实例并获得相同的结果。

尽管 sox 似乎可以正常播放文件,但此错误消息让我感到紧张,因为我的应用程序需要坚如磐石的稳定性(它将同时播放多达 4 个文件 24/7/365 ).此外,我不喜欢在我的终端会话(或者在重定向 stderr 之后,我的日志文件)中加入无用的错误消息。

问题:

  1. 我可以安全地忽略这个错误吗,因为声音文件似乎可以正常播放?

  2. 此错误是否与我在其他 "downstream" 音频应用程序中遇到的问题有关? (例如,当我将音频从这些 sox 实例发送到 BUTT (Broadcast Using this Tool) 实例时,BUTT 停止流式传输并且表现得好像它已失去与其音频源的连接)。

  3. 是否有 sox 的替代方案可以在并发会话中从命令行播放音频文件而不会引发此错误?

试试 afplay,它随 macOS 一起提供。刚刚对 5 个实例进行了快速测试,它似乎有效。

afplay path/to/file

只是为了关闭此线程...当我在较新的 Mac 运行ning OS X 10.12.4 上重复测试时,不会出现错误消息。我可以 运行 5 个 soxafplay 的并发实例而不会出错。

关于我原来问题的第 (3) 部分... afplay 确实是 sox 的一个方便快捷的替代方法,用于从命令行预览音频文件(谢谢, @戴夫!)。然而,我的情况是多通道(>8 个通道)——afplay 做不到但 sox 可以轻松做到。但是由于我没有在我的问题中提到多渠道方面,我认为这个问题已经回答了。谢谢!