use libc::c_uint;
use traits::Wrappable;
use audio::sound_buffer::SoundBuffer;
use csfml_audio_sys as ffi;
pub struct SoundBufferRecorder {
sound_buffer_recorder: *mut ffi::sfSoundBufferRecorder
}
impl SoundBufferRecorder {
pub fn new() -> Option<SoundBufferRecorder> {
let buffer = unsafe { ffi::sfSoundBufferRecorder_create() };
if buffer.is_null() {
None
} else {
Some(SoundBufferRecorder{
sound_buffer_recorder: buffer
})
}
}
pub fn start(&mut self, sample_rate: u32) {
unsafe {
ffi::sfSoundBufferRecorder_start(self.sound_buffer_recorder, sample_rate as c_uint)
}
}
pub fn stop(&mut self) {
unsafe {
ffi::sfSoundBufferRecorder_stop(self.sound_buffer_recorder)
}
}
pub fn get_sample_rate(&self) -> u32 {
unsafe {
ffi::sfSoundBufferRecorder_getSampleRate(self.sound_buffer_recorder) as u32
}
}
pub fn get_buffer(&self) -> Option<SoundBuffer> {
let buff = unsafe { ffi::sfSoundBufferRecorder_getBuffer(self.sound_buffer_recorder) };
if buff.is_null() {
None
} else {
Some(Wrappable::wrap(buff))
}
}
pub fn is_available() -> bool {
unsafe { ffi::sfSoundRecorder_isAvailable() }.to_bool()
}
}
impl Drop for SoundBufferRecorder {
fn drop(&mut self) {
unsafe {
ffi::sfSoundBufferRecorder_destroy(self.sound_buffer_recorder);
}
}
}