Module alsa::pcm
[−]
[src]
Audio playback and capture
Example
Playback a sine wave through the "default" device.
use std::ffi::CString; use alsa::{Direction, ValueOr}; use alsa::pcm::{PCM, HwParams, Format, Access, State}; // Open default playback device let pcm = PCM::open(&*CString::new("default").unwrap(), Direction::Playback, false).unwrap(); // Set hardware parameters: 44100 Hz / Mono / 16 bit let hwp = HwParams::any(&pcm).unwrap(); hwp.set_channels(1).unwrap(); hwp.set_rate(44100, ValueOr::Nearest).unwrap(); hwp.set_format(Format::s16()).unwrap(); hwp.set_access(Access::RWInterleaved).unwrap(); pcm.hw_params(&hwp).unwrap(); let io = pcm.io_i16().unwrap(); // Make a sine wave let mut buf = [0i16; 1024]; for (i, a) in buf.iter_mut().enumerate() { *a = ((i as f32 * 2.0 * ::std::f32::consts::PI / 128.0).sin() * 8192.0) as i16 } // Play it back for 2 seconds. for _ in 0..2*44100/1024 { assert_eq!(io.writei(&buf[..]).unwrap(), 1024); } // In case the buffer was larger than 2 seconds, start the stream manually. if pcm.state() != State::Running { pcm.start().unwrap() }; // Wait for the stream to finish playback. pcm.drain().unwrap();
Structs
| Chmap |
snd_pcm_chmap_t wrapper |
| ChmapsQuery |
Iterator over available channel maps - see snd_pcm_chmap_query_t |
| HwParams |
snd_pcm_hw_params_t wrapper |
| IO |
Sample format dependent struct for reading from and writing data to a |
| Info | |
| PCM |
snd_pcm_t wrapper - start here for audio playback and recording |
| Status |
snd_pcm_status_t wrapper |
| SwParams |
snd_pcm_sw_params_t wrapper |
Enums
| Access |
SND_PCM_ACCESS_xxx constants |
| ChmapPosition |
SND_CHMAP_xxx constants |
| ChmapType |
SND_CHMAP_TYPE_xxx constants |
| Format |
SND_PCM_FORMAT_xxx constants |
| State |
SND_PCM_STATE_xxx constants |
Type Definitions
| Frames |