如何暂停 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 音频客户端的主要内容,如果未能解决你的问题,请参考以下文章

音频插孔服务器:无法获得缓冲区

在 Elementor 中加载 youtube 视频时暂停音频播放器

如何使用 JACK 将音频输出重定向到输入?

如何从 Docker 容器访问 JACK 音频

在网页上播放/暂停/倒带 mp3 音频

在 C/C++ 中使用 JACK 和 fftw 的音频频谱