use codec2::{Codec2, Codec2Mode};
-
+use cpal::traits::DeviceTrait;
+use cpal::traits::HostTrait;
+use cpal::traits::StreamTrait;
+use cpal::{Sample, SampleFormat, SampleRate};
+use log::debug;
use m17app::adapter::StreamAdapter;
use m17app::app::TxHandle;
use m17core::protocol::LsfFrame;
-
use std::collections::VecDeque;
use std::fs::File;
use std::io::Write;
Arc, Mutex,
};
-use cpal::traits::DeviceTrait;
-use cpal::traits::HostTrait;
-use cpal::traits::StreamTrait;
-use cpal::{Sample, SampleFormat, SampleRate};
-
-use log::debug;
-
pub fn decode_codec2<P: AsRef<Path>>(data: &[u8], out_path: P) -> Vec<i16> {
let codec2 = Codec2::new(Codec2Mode::MODE_3200);
let var_name = codec2;
codec2: Codec2::new(Codec2Mode::MODE_3200),
end_tx: None,
})),
+ // TODO: this doesn't work on rpi. Use default_output_device() by default
output_card: "default".to_owned(),
}
}
.find(|d| d.name().unwrap() == output_card)
.unwrap();
let mut configs = device.supported_output_configs().unwrap();
+ // TODO: channels == 1 doesn't work on a Raspberry Pi
+ // make this configurable and support interleaving LRLR stereo samples if using 2 channels
let config = configs
.find(|c| c.channels() == 1 && c.sample_format() == SampleFormat::I16)
.unwrap()
let stream = device
.build_output_stream(
&config.into(),
- move |data: &mut [i16], _: &cpal::OutputCallbackInfo| {
+ move |data: &mut [i16], info: &cpal::OutputCallbackInfo| {
+ debug!(
+ "callback {:?} playback {:?}",
+ info.timestamp().callback,
+ info.timestamp().playback
+ );
output_cb(data, &state);
},
|e| {