Skip to content

Commit

Permalink
Bump Jack to v0.12 (#910)
Browse files Browse the repository at this point in the history
* Bump to version 0.12.

* Fix some cargo clippy lints.

* Partially revert temp_buffer_to_data to be closer to original.

* Suppress too many arguments lint.
  • Loading branch information
wmedrano authored Sep 10, 2024
1 parent cc8ba75 commit 6ecfec4
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 19 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ num-traits = { version = "0.2.6", optional = true }
[target.'cfg(any(target_os = "linux", target_os = "dragonfly", target_os = "freebsd", target_os = "netbsd"))'.dependencies]
alsa = "0.9"
libc = "0.2"
jack = { version = "0.11", optional = true }
jack = { version = "0.12", optional = true }

[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies]
core-foundation-sys = "0.8.2" # For linking to CoreFoundation.framework and handling device name `CFString`s.
Expand Down
7 changes: 2 additions & 5 deletions src/host/jack/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,11 +170,8 @@ fn get_client(name: &str, client_options: jack::ClientOptions) -> Result<jack::C
} else if status.intersects(jack::ClientStatus::INVALID_OPTION) {
return Err(String::from("Error connecting to JACK server: The operation contained an invalid or unsupported option!"));
}

return Ok(client);
}
Err(e) => {
return Err(format!("Failed to open client because of error: {:?}", e));
Ok(client)
}
Err(e) => Err(format!("Failed to open client because of error: {:?}", e)),
}
}
27 changes: 14 additions & 13 deletions src/host/jack/stream.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ impl Stream {
let mut port_names: Vec<String> = vec![];
// Create ports
for i in 0..channels {
let port_try = client.register_port(&format!("in_{}", i), jack::AudioIn::default());
let port_try = client.register_port(&format!("in_{}", i), jack::AudioIn);
match port_try {
Ok(port) => {
// Get the port name in order to later connect it automatically
Expand Down Expand Up @@ -102,7 +102,7 @@ impl Stream {
let mut port_names: Vec<String> = vec![];
// Create ports
for i in 0..channels {
let port_try = client.register_port(&format!("out_{}", i), jack::AudioOut::default());
let port_try = client.register_port(&format!("out_{}", i), jack::AudioOut);
match port_try {
Ok(port) => {
// Get the port name in order to later connect it automatically
Expand Down Expand Up @@ -218,15 +218,18 @@ impl StreamTrait for Stream {
}
}

type InputDataCallback = Box<dyn FnMut(&Data, &InputCallbackInfo) + Send + 'static>;
type OutputDataCallback = Box<dyn FnMut(&mut Data, &OutputCallbackInfo) + Send + 'static>;

struct LocalProcessHandler {
/// No new ports are allowed to be created after the creation of the LocalProcessHandler as that would invalidate the buffer sizes
out_ports: Vec<jack::Port<jack::AudioOut>>,
in_ports: Vec<jack::Port<jack::AudioIn>>,

sample_rate: SampleRate,
buffer_size: usize,
input_data_callback: Option<Box<dyn FnMut(&Data, &InputCallbackInfo) + Send + 'static>>,
output_data_callback: Option<Box<dyn FnMut(&mut Data, &OutputCallbackInfo) + Send + 'static>>,
input_data_callback: Option<InputDataCallback>,
output_data_callback: Option<OutputDataCallback>,

// JACK audio samples are 32-bit float (unless you do some custom dark magic)
temp_input_buffer: Vec<f32>,
Expand All @@ -238,15 +241,14 @@ struct LocalProcessHandler {
}

impl LocalProcessHandler {
#[allow(too_many_arguments)]
fn new(
out_ports: Vec<jack::Port<jack::AudioOut>>,
in_ports: Vec<jack::Port<jack::AudioIn>>,
sample_rate: SampleRate,
buffer_size: usize,
input_data_callback: Option<Box<dyn FnMut(&Data, &InputCallbackInfo) + Send + 'static>>,
output_data_callback: Option<
Box<dyn FnMut(&mut Data, &OutputCallbackInfo) + Send + 'static>,
>,
input_data_callback: Option<InputDataCallback>,
output_data_callback: Option<OutputDataCallback>,
playing: Arc<AtomicBool>,
error_callback_ptr: ErrorCallbackPtr,
) -> Self {
Expand All @@ -270,12 +272,11 @@ impl LocalProcessHandler {
}
}

fn temp_buffer_to_data(temp_input_buffer: &mut Vec<f32>, total_buffer_size: usize) -> Data {
let slice = &temp_input_buffer[0..total_buffer_size];
let data = slice.as_ptr() as *mut ();
fn temp_buffer_to_data(temp_input_buffer: &mut [f32], total_buffer_size: usize) -> Data {
let slice = &mut temp_input_buffer[0..total_buffer_size];
let data: *mut () = slice.as_mut_ptr().cast();
let len = total_buffer_size;
let data = unsafe { Data::from_parts(data, len, JACK_SAMPLE_FORMAT) };
data
unsafe { Data::from_parts(data, len, JACK_SAMPLE_FORMAT) }
}

impl jack::ProcessHandler for LocalProcessHandler {
Expand Down

0 comments on commit 6ecfec4

Please sign in to comment.