Skip to content
Snippets Groups Projects
Commit 1e4c3a09 authored by David Huss's avatar David Huss :speech_balloon:
Browse files

Some minor refactoring

parent e7c4658f
No related branches found
No related tags found
No related merge requests found
...@@ -63,6 +63,37 @@ static VOLS16: [AtomicUsize; N_INPUTS] = arr![AtomicUsize::new(0); 16]; ...@@ -63,6 +63,37 @@ static VOLS16: [AtomicUsize; N_INPUTS] = arr![AtomicUsize::new(0); 16];
fn get_volume_for_input_output_pair(input_index: usize, output_index: usize) -> f32 {
// For each input get the corrsponding atomic value for the volume control
match input_index {
0 => VOLS1[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
1 => VOLS2[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
2 => VOLS3[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
3 => VOLS4[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
4 => VOLS5[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
5 => VOLS6[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
6 => VOLS7[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
7 => VOLS8[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
8 => VOLS9[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
9 => VOLS10[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
10 => VOLS11[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
11 => VOLS12[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
12 => VOLS13[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
13 => VOLS14[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
14 => VOLS15[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
15 => VOLS16[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
_ => 0.0
}
}
fn port_has_connections<T>(port: &Port<T>) -> bool {
match port.connected_count() {
Ok(count) => count > 0,
_ => true
}
}
fn main() { fn main() {
let matches = App::new(option_env!("CARGO_PKG_NAME").unwrap()) let matches = App::new(option_env!("CARGO_PKG_NAME").unwrap())
...@@ -138,51 +169,21 @@ fn main() { ...@@ -138,51 +169,21 @@ fn main() {
// (in this case for testing purposes: all to all) // (in this case for testing purposes: all to all)
inputs.iter() inputs.iter()
.enumerate() .enumerate()
.filter(|(_input_index, inport)| { .filter(|(_input_index, inport)| port_has_connections(inport))
match inport.connected_count() {
Ok(count) => count > 0,
_ => true
}
})
.for_each(|(input_index, inport)| { .for_each(|(input_index, inport)| {
// Get a slice [f32; 1024] of samples for each port // Get a slice [f32; 1024] of samples for each port
let input_samples = inport.as_slice(ps); let input_samples = &inport.as_slice(ps)[..buffersize];
// Sum each input to output buffer // Sum each input to output buffer
output_buffers.par_iter_mut() output_buffers.par_iter_mut()
.enumerate() .enumerate()
.filter(|(output_index, _buffer)| { .filter(|(output_index, _buffer)| port_has_connections(&outputs[*output_index]))
match outputs[*output_index].connected_count() {
Ok(count) => count > 0,
_ => true
}
})
.for_each(|(output_index, b)| { .for_each(|(output_index, b)| {
b.par_iter_mut() b.par_iter_mut()
.take(buffersize) .take(buffersize)
.enumerate() .enumerate()
.for_each(|(sample_index, sample)| { .for_each(|(sample_index, sample)| {
// For each input get the corrsponding atomic value for the volume control let volume = get_volume_for_input_output_pair(input_index, output_index);
let volume = match input_index {
0 => VOLS1[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
1 => VOLS2[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
2 => VOLS3[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
3 => VOLS4[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
4 => VOLS5[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
5 => VOLS6[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
6 => VOLS7[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
7 => VOLS8[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
8 => VOLS9[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
9 => VOLS10[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
10 => VOLS11[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
11 => VOLS12[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
12 => VOLS13[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
13 => VOLS14[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
14 => VOLS15[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
15 => VOLS16[output_index].load(Ordering::Relaxed) as f32 / usize::MAX as f32,
_ => 0.0
};
if volume != 0.0 { if volume != 0.0 {
// Multiply each input sample at position `sample_index` with the // Multiply each input sample at position `sample_index` with the
...@@ -199,7 +200,7 @@ fn main() { ...@@ -199,7 +200,7 @@ fn main() {
outputs.iter_mut() outputs.iter_mut()
.enumerate() .enumerate()
.for_each(|(output_index, outport)| { .for_each(|(output_index, outport)| {
outport.as_mut_slice(ps).clone_from_slice(&output_buffers[output_index][..buffersize]); outport.as_mut_slice(ps)[..buffersize].clone_from_slice(&output_buffers[output_index][..buffersize]);
}); });
jack::Control::Continue jack::Control::Continue
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment