Add some formats-related functions
This commit is contained in:
parent
0bdafdab9b
commit
99c23327d8
|
@ -3,6 +3,8 @@ extern crate cpal;
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut channel = cpal::Channel::new();
|
let mut channel = cpal::Channel::new();
|
||||||
|
|
||||||
|
assert!(channel.get_samples_format() == cpal::SampleFormat::U16);
|
||||||
|
|
||||||
// producing a sinusoid
|
// producing a sinusoid
|
||||||
let mut data_source =
|
let mut data_source =
|
||||||
std::iter::iterate(0.0f32, |f| f + 0.03)
|
std::iter::iterate(0.0f32, |f| f + 0.03)
|
||||||
|
|
23
src/lib.rs
23
src/lib.rs
|
@ -21,6 +21,15 @@ pub type ChannelsCount = u16;
|
||||||
/// A `Buffer` object borrows the channel.
|
/// A `Buffer` object borrows the channel.
|
||||||
pub struct Buffer<'a>(cpal_impl::Buffer<'a>);
|
pub struct Buffer<'a>(cpal_impl::Buffer<'a>);
|
||||||
|
|
||||||
|
/// Format that each sample has.
|
||||||
|
#[deriving(Clone, Show, PartialEq, Eq)]
|
||||||
|
pub enum SampleFormat {
|
||||||
|
/// The value 0 corresponds to 0.
|
||||||
|
I16,
|
||||||
|
/// The value 0 corresponds to 32768.
|
||||||
|
U16,
|
||||||
|
}
|
||||||
|
|
||||||
impl Channel {
|
impl Channel {
|
||||||
pub fn new() -> Channel {
|
pub fn new() -> Channel {
|
||||||
let channel = cpal_impl::Channel::new();
|
let channel = cpal_impl::Channel::new();
|
||||||
|
@ -34,6 +43,20 @@ impl Channel {
|
||||||
self.0.get_channels()
|
self.0.get_channels()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the number of samples that are played per second.
|
||||||
|
///
|
||||||
|
/// Common values are 22050 Hz or 44100 Hz.
|
||||||
|
pub fn get_samples_per_second(&self) -> u32 {
|
||||||
|
self.0.get_samples_per_second()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the number of samples that are played per second.
|
||||||
|
///
|
||||||
|
/// Common values are 22050 Hz or 44100 Hz.
|
||||||
|
pub fn get_samples_format(&self) -> SampleFormat {
|
||||||
|
self.0.get_samples_format()
|
||||||
|
}
|
||||||
|
|
||||||
/// Adds some PCM data to the channel's buffer.
|
/// Adds some PCM data to the channel's buffer.
|
||||||
///
|
///
|
||||||
/// This function returns a `Buffer` object that must be filled with the audio data.
|
/// This function returns a `Buffer` object that must be filled with the audio data.
|
||||||
|
|
|
@ -10,6 +10,8 @@ pub struct Channel {
|
||||||
max_frames_in_buffer: winapi::UINT32,
|
max_frames_in_buffer: winapi::UINT32,
|
||||||
num_channels: winapi::WORD,
|
num_channels: winapi::WORD,
|
||||||
bytes_per_frame: winapi::WORD,
|
bytes_per_frame: winapi::WORD,
|
||||||
|
samples_per_second: winapi::DWORD,
|
||||||
|
bits_per_sample: winapi::WORD,
|
||||||
started: bool,
|
started: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +32,17 @@ impl Channel {
|
||||||
self.num_channels as ::ChannelsCount
|
self.num_channels as ::ChannelsCount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_samples_per_second(&self) -> u32 {
|
||||||
|
self.samples_per_second as u32
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_samples_format(&self) -> ::SampleFormat {
|
||||||
|
match self.bits_per_sample {
|
||||||
|
16 => ::SampleFormat::U16,
|
||||||
|
_ => unimplemented!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn append_data<'a>(&'a mut self) -> Buffer<'a> {
|
pub fn append_data<'a>(&'a mut self) -> Buffer<'a> {
|
||||||
unsafe {
|
unsafe {
|
||||||
loop {
|
loop {
|
||||||
|
@ -202,6 +215,8 @@ fn init() -> Result<Channel, String> {
|
||||||
max_frames_in_buffer: max_frames_in_buffer,
|
max_frames_in_buffer: max_frames_in_buffer,
|
||||||
num_channels: format.nChannels,
|
num_channels: format.nChannels,
|
||||||
bytes_per_frame: format.nBlockAlign,
|
bytes_per_frame: format.nBlockAlign,
|
||||||
|
samples_per_second: format.nSamplesPerSec,
|
||||||
|
bits_per_sample: format.wBitsPerSample,
|
||||||
started: false,
|
started: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue