如何暂停 JACK 音频客户端

How to pause JACK audio client

我正在将 JACK 音频连接套件集成到我的应用程序中,但遇到了一个基本但烦人的问题。

我基本上是从他们自己的 API 复制并粘贴 simple_client example (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) 实际上 returns 以下消息:

Released audio card Audio0
Released audio card Audio1
audio_reservation_finish

谁能告诉我 "pause" 函数更合适?如果要关闭音频系统,停止功能也很有用 - 但可以选择重新启动它。

我还没有在我的应用程序中这样做,但是通过查看 Ardour 的代码,我猜

jack_client_close(client);

应该是JACK所期待的。 https://github.com/Ardour/ardour/blob/365f6d633731229e7bc5d37a5fe2c9107b527e28/libs/backends/jack/jack_connection.cc#L144

我查看了 Ardor,因为我知道它允许在会话期间断开连接并重新连接到 JACK。

好吧,我不是专家,但如果你真正想做的是暂停输出信号,你应该使用 jack_port_disconnect() 而不是断开 source_portdestination_port 的连接,然后 jack_connect () 再次使用 source_port.