support for most sample formats

This commit is contained in:
2026-09-15 16:54:01 +02:00
parent df3822a096
commit 6b04c54cfd
2 changed files with 50 additions and 2 deletions
+48
View File
@@ -62,6 +62,21 @@ pub async fn audio_stream_receiver(
udp_socket: Arc<UdpSocket>,
) {
let output_stream = match output_device_config.sample_format() {
SampleFormat::F64 => cpal_build_output_stream::<f64>(
&output_device,
output_device_config.into(),
active_input_audio_streams_consumers,
),
SampleFormat::I64 => cpal_build_output_stream::<i64>(
&output_device,
output_device_config.into(),
active_input_audio_streams_consumers,
),
SampleFormat::U64 => cpal_build_output_stream::<u64>(
&output_device,
output_device_config.into(),
active_input_audio_streams_consumers,
),
SampleFormat::F32 => cpal_build_output_stream::<f32>(
&output_device,
output_device_config.into(),
@@ -72,6 +87,11 @@ pub async fn audio_stream_receiver(
output_device_config.into(),
active_input_audio_streams_consumers,
),
SampleFormat::U32 => cpal_build_output_stream::<u32>(
&output_device,
output_device_config.into(),
active_input_audio_streams_consumers,
),
SampleFormat::I16 => cpal_build_output_stream::<i16>(
&output_device,
output_device_config.into(),
@@ -82,6 +102,16 @@ pub async fn audio_stream_receiver(
output_device_config.into(),
active_input_audio_streams_consumers,
),
SampleFormat::I8 => cpal_build_output_stream::<i8>(
&output_device,
output_device_config.into(),
active_input_audio_streams_consumers,
),
SampleFormat::U8 => cpal_build_output_stream::<u8>(
&output_device,
output_device_config.into(),
active_input_audio_streams_consumers,
),
_ => {
eprintln!("unsupported output stream format :(");
return;
@@ -250,18 +280,36 @@ pub async fn audio_stream_spawner(
let (producer, mut consumer) = ring_buffer.split();
let input_stream = match input_device_config.sample_format() {
SampleFormat::F64 => {
cpal_build_input_stream::<f64>(&input_device, input_device_config.into(), producer)
}
SampleFormat::I64 => {
cpal_build_input_stream::<i64>(&input_device, input_device_config.into(), producer)
}
SampleFormat::U64 => {
cpal_build_input_stream::<u64>(&input_device, input_device_config.into(), producer)
}
SampleFormat::F32 => {
cpal_build_input_stream::<f32>(&input_device, input_device_config.into(), producer)
}
SampleFormat::I32 => {
cpal_build_input_stream::<i32>(&input_device, input_device_config.into(), producer)
}
SampleFormat::U32 => {
cpal_build_input_stream::<u32>(&input_device, input_device_config.into(), producer)
}
SampleFormat::I16 => {
cpal_build_input_stream::<i16>(&input_device, input_device_config.into(), producer)
}
SampleFormat::U16 => {
cpal_build_input_stream::<u16>(&input_device, input_device_config.into(), producer)
}
SampleFormat::I8 => {
cpal_build_input_stream::<i8>(&input_device, input_device_config.into(), producer)
}
SampleFormat::U8 => {
cpal_build_input_stream::<u8>(&input_device, input_device_config.into(), producer)
}
_ => {
eprintln!("unsupported input stream format :(");
return;
+2 -2
View File
@@ -264,7 +264,7 @@ impl DeviceSelectScreen {
for (device, config) in self.input_devices.iter() {
input_device_rows.push(Row::new(vec![
device.description().unwrap().name().to_string(),
config.channels().to_string(),
config.sample_format().to_string(),
]));
}
let input_device_table = Table::new(input_device_rows, widths)
@@ -299,7 +299,7 @@ impl DeviceSelectScreen {
for (device, config) in self.output_devices.iter() {
output_device_rows.push(Row::new(vec![
device.description().unwrap().name().to_string(),
config.channels().to_string(),
config.sample_format().to_string(),
]));
}
let output_device_table = Table::new(output_device_rows, widths)