Use the correct format in ALSA
This commit is contained in:
parent
debb6c957c
commit
46151e09cc
|
@ -34,6 +34,7 @@ impl Endpoint {
|
||||||
let hw_params = HwParams::alloc();
|
let hw_params = HwParams::alloc();
|
||||||
check_errors(alsa::snd_pcm_hw_params_any(playback_handle, hw_params.0)).unwrap();
|
check_errors(alsa::snd_pcm_hw_params_any(playback_handle, hw_params.0)).unwrap();
|
||||||
|
|
||||||
|
// TODO: check endianess
|
||||||
const FORMATS: [(SampleFormat, alsa::snd_pcm_format_t); 3] = [
|
const FORMATS: [(SampleFormat, alsa::snd_pcm_format_t); 3] = [
|
||||||
//SND_PCM_FORMAT_S8,
|
//SND_PCM_FORMAT_S8,
|
||||||
//SND_PCM_FORMAT_U8,
|
//SND_PCM_FORMAT_U8,
|
||||||
|
@ -192,7 +193,7 @@ impl Drop for HwParams {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Voice {
|
impl Voice {
|
||||||
pub fn new(endpoint: &Endpoint, _format: &Format) -> Result<Voice, CreationError> {
|
pub fn new(endpoint: &Endpoint, format: &Format) -> Result<Voice, CreationError> {
|
||||||
unsafe {
|
unsafe {
|
||||||
let name = ffi::CString::new(endpoint.0.clone()).unwrap();
|
let name = ffi::CString::new(endpoint.0.clone()).unwrap();
|
||||||
|
|
||||||
|
@ -201,12 +202,19 @@ impl Voice {
|
||||||
alsa::SND_PCM_STREAM_PLAYBACK,
|
alsa::SND_PCM_STREAM_PLAYBACK,
|
||||||
alsa::SND_PCM_NONBLOCK)).unwrap();
|
alsa::SND_PCM_NONBLOCK)).unwrap();
|
||||||
|
|
||||||
|
// TODO: check endianess
|
||||||
|
let data_type = match format.data_type {
|
||||||
|
SampleFormat::I16 => alsa::SND_PCM_FORMAT_S16_LE,
|
||||||
|
SampleFormat::U16 => alsa::SND_PCM_FORMAT_U16_LE,
|
||||||
|
SampleFormat::F32 => alsa::SND_PCM_FORMAT_FLOAT_LE,
|
||||||
|
};
|
||||||
|
|
||||||
let hw_params = HwParams::alloc();
|
let hw_params = HwParams::alloc();
|
||||||
check_errors(alsa::snd_pcm_hw_params_any(playback_handle, hw_params.0)).unwrap();
|
check_errors(alsa::snd_pcm_hw_params_any(playback_handle, hw_params.0)).unwrap();
|
||||||
check_errors(alsa::snd_pcm_hw_params_set_access(playback_handle, hw_params.0, alsa::SND_PCM_ACCESS_RW_INTERLEAVED)).unwrap();
|
check_errors(alsa::snd_pcm_hw_params_set_access(playback_handle, hw_params.0, alsa::SND_PCM_ACCESS_RW_INTERLEAVED)).unwrap();
|
||||||
check_errors(alsa::snd_pcm_hw_params_set_format(playback_handle, hw_params.0, alsa::SND_PCM_FORMAT_S16_LE)).unwrap(); // TODO: check endianess
|
check_errors(alsa::snd_pcm_hw_params_set_format(playback_handle, hw_params.0, data_type)).unwrap();
|
||||||
check_errors(alsa::snd_pcm_hw_params_set_rate(playback_handle, hw_params.0, 44100, 0)).unwrap();
|
check_errors(alsa::snd_pcm_hw_params_set_rate(playback_handle, hw_params.0, format.samples_rate.0 as libc::c_uint, 0)).unwrap();
|
||||||
check_errors(alsa::snd_pcm_hw_params_set_channels(playback_handle, hw_params.0, 2)).unwrap();
|
check_errors(alsa::snd_pcm_hw_params_set_channels(playback_handle, hw_params.0, format.channels.len() as libc::c_uint)).unwrap();
|
||||||
check_errors(alsa::snd_pcm_hw_params(playback_handle, hw_params.0)).unwrap();
|
check_errors(alsa::snd_pcm_hw_params(playback_handle, hw_params.0)).unwrap();
|
||||||
|
|
||||||
|
|
||||||
|
@ -214,7 +222,7 @@ impl Voice {
|
||||||
|
|
||||||
Ok(Voice {
|
Ok(Voice {
|
||||||
channel: Mutex::new(playback_handle),
|
channel: Mutex::new(playback_handle),
|
||||||
num_channels: 2,
|
num_channels: format.channels.len() as u16,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue