6#include "zrythm-config.h"
8#include "engine/device_io/engine.h"
14# define JACK_PORT_T(exp) (static_cast<jack_port_t *> (exp))
16namespace zrythm::engine::device_io
21 enum class TransportType : basic_enum_base_type_t
28 JackDriver (AudioEngine &engine) : engine_ (engine) { }
30 utils::Utf8String get_driver_name ()
const override {
return u8
"JACK"; }
33 void set_buffer_size (uint32_t buf_size)
override
35 jack_set_buffer_size (client_, buf_size);
36 z_debug (
"called jack_set_buffer_size");
38 bool buffer_size_change_handled ()
const override
40 return handled_jack_buffer_size_change_;
42 void handle_buf_size_change (uint32_t frames)
override;
43 void handle_sample_rate_change (uint32_t samplerate)
override;
44 bool setup_audio ()
override;
45 bool activate_audio (
bool activate)
override;
46 void tear_down_audio ()
override;
47 void handle_start ()
override;
48 void handle_stop ()
override;
49 void prepare_process_audio ()
override;
51 sanity_check_should_return_early (
nframes_t total_frames_to_process)
override;
52 void handle_position_change ()
override;
53 std::unique_ptr<PortBackend> create_audio_port_backend ()
const override
55 return std::make_unique<JackPortBackend> (*client_);
58 get_ext_audio_ports (dsp::PortFlow flow,
bool hw)
const override;
61 bool setup_midi ()
override;
62 bool activate_midi (
bool activate)
override {
return true; }
63 void tear_down_midi ()
override { }
64 std::unique_ptr<PortBackend> create_midi_port_backend ()
const override
66 return std::make_unique<JackPortBackend> (*client_);
69 get_ext_midi_ports (dsp::PortFlow flow,
bool hw)
const override;
71 jack_client_t * get_client ()
const {
return client_; }
85 void reconnect_monitor (
bool left);
90 void set_transport_type (TransportType type);
95 void fill_out_bufs (
const nframes_t nframes);
97 void process_change_request ();
106 static int sample_rate_cb (uint32_t nframes,
void * data);
109 static int buffer_size_cb (uint32_t nframes,
void * data);
114 static int process_cb (uint32_t nframes,
void * data);
122 static int xrun_cb (
void * data);
124 static void timebase_cb (
125 jack_transport_state_t state,
126 jack_nframes_t nframes,
127 jack_position_t * pos,
134 static void shutdown_cb (
void * arg);
135 static void freewheel_cb (
int starting,
void * arg);
137 port_registration_cb (jack_port_id_t port_id,
int registered,
void * arg);
139 port_connect_cb (jack_port_id_t a, jack_port_id_t b,
int connect,
void * arg);
144 bool is_pipewire ()
const;
150 std::vector<ExtPort> &ports)
const;
153 AudioEngine &engine_;
158 TransportType transport_type_{};
166 std::atomic_bool handled_jack_buffer_size_change_ =
false;
169 jack_client_t * client_ =
nullptr;
Implementation that drives the audio callbacks.
Implementation that handles MIDI from/to devices.
uint32_t nframes_t
Frame count.