如何暂停 JACK 音频客户端
Posted
技术标签:
【中文标题】如何暂停 JACK 音频客户端【英文标题】:How to pause JACK audio client 【发布时间】:2020-05-15 20:44:54 【问题描述】:我正在将 JACK 音频连接套件集成到我的应用中,但遇到了一个基本但烦人的问题。
我基本上从他们自己的 API 复制并粘贴了 simple_client 示例 (github code),但 jack_shutdown()
方法只使用 exit(1)
而不是任何暂停机制。我已经尝试使用这两种方法:
void jack_shutdown(void *arg)
jack_deactivate(client);
jack_client_close(client);
虽然音频停止,但在运行与之前相同的代码时,首先启动 JACK 客户端,从simple_client
- int main ()
,它使应用程序崩溃。我猜这是因为jack_client_close(client)
实际上返回了以下消息:
Released audio card Audio0
Released audio card Audio1
audio_reservation_finish
谁能告诉我哪个“暂停”功能更合适?如果要关闭音频系统,停止功能也很有用 - 但可以选择重新启动。
【问题讨论】:
我的回答对你有帮助吗? 使用它并没有解决我的问题,正如您可以通过我问题的代码中的答案来判断。但我猜我错过了激活和停用 JACK 系统所需的所有额外内容。我现在搬到了 JUCE,它可以解决我遇到的所有问题。 【参考方案1】:好吧,我不是专家,但如果你真正想做的是暂停输出信号,你应该使用 jack_port_disconnect() 来断开你的 source_port 从 destination_port,然后再次使用 source_port jack_connect()。
【讨论】:
【参考方案2】:我还没有在我的应用程序中这样做,但是通过查看 Ardour 的代码,我猜是一个
jack_client_close(client);
应该是 JACK 所期望的。 https://github.com/Ardour/ardour/blob/365f6d633731229e7bc5d37a5fe2c9107b527e28/libs/backends/jack/jack_connection.cc#L144
我查看了 Ardor,因为我知道它允许在会话期间断开和重新连接到 JACK。
【讨论】:
以上是关于如何暂停 JACK 音频客户端的主要内容,如果未能解决你的问题,请参考以下文章