J'intègre le kit de connexion audio JACK dans mon application et j'ai un problème basique mais ennuyeux.

J'ai essentiellement copié et collé l'exemple simple_client (code github) à partir de leur propre API, mais la méthode jack_shutdown() utilise simplement exit(1) plutôt qu'un mécanisme de pause. J'ai plutôt essayé d'utiliser ces deux méthodes :

void jack_shutdown(void *arg){
    jack_deactivate(client);
    jack_client_close(client);
}

Bien que l'audio s'arrête, lorsque vous exécutez le même code qu'auparavant, le client JACK démarre pour la première fois, à partir de simple_client - int main (), il plante l'application. Ceci, je suppose, est dû à jack_client_close(client) qui renvoie en fait les messages suivants :

Released audio card Audio0
Released audio card Audio1
audio_reservation_finish

Quelqu'un peut-il me dire quelle fonction "pause" serait la plus appropriée? Une fonction d'arrêt serait également utile si l'on devait éteindre le système audio - mais avec la possibilité de le redémarrer.

0
Maxime Franchot 30 janv. 2020 à 12:18

2 réponses

Meilleure réponse

Je ne l'ai pas encore fait dans mon application, mais en jetant un coup d'œil au code d'Ardour, je suppose qu'un

jack_client_close(client);

Devrait être ce que JACK attend. https://github.com/Ardour/ ardour/blob/365f6d633731229e7bc5d37a5fe2c9107b527e28/libs/backends/jack/jack_connection.cc#L144

J'ai regardé Ardour car je sais qu'il permet de se déconnecter et de se reconnecter à JACK pendant une session.

0
Jonas Eberle 2 févr. 2020 à 12:45

Eh bien, je ne suis pas un expert, mais au cas où, ce que vous voulez réellement faire est de mettre en pause le signal de sortie, vous devriez utiliser jack_port_disconnect() à la place pour déconnecter votre source_port depuis le destination_port, puis jack_connect() à nouveau en utilisant le source_port.

0
alconegro 2 févr. 2021 à 18:08