1use std::ffi::{CString };
3use std :: os :: raw;
4use super::*;
5use super::{libaudioverse_sys, server};
6use check;
7
8pub struct Buffer {
11 pub(crate) handle: libaudioverse_sys::LavHandle,
13}
14
15impl Buffer {
16 pub fn new(server : &server::Server) -> Result<Buffer> {
18 let mut buf_handle : libaudioverse_sys::LavHandle = 0;
19 check(unsafe { libaudioverse_sys::Lav_createBuffer(server.handle, &mut buf_handle) })?;
20 Ok(Buffer { handle : buf_handle })
21 }
22
23 pub fn get_duration(&self) -> Result<f32> {
25 let mut duration : f32 = 0.0;
26 check(unsafe { libaudioverse_sys::Lav_bufferGetDuration(self.handle, &mut duration) })?;
27 Ok(duration)
28 }
29
30 pub fn get_length_in_samples(&self) -> Result<i32> {
33 let mut samples : i32 = 0;
34 check(unsafe { libaudioverse_sys::Lav_bufferGetLengthInSamples(self.handle, &mut samples) })?;
35 Ok(samples)
36 }
37
38 pub fn decode_from_array(&self, data : &mut [raw::c_char]) -> Result<()> {
40 check(unsafe { libaudioverse_sys::Lav_bufferDecodeFromArray(self.handle, data.as_mut_ptr(), data.len() as i32) })?;
41 Ok(())
42 }
43
44 pub fn load_from_array(&self, sampling_rate : i32, channels : i32, frames : i32, data : &mut [f32]) -> Result<()> {
46 check(unsafe { libaudioverse_sys::Lav_bufferLoadFromArray(self.handle, sampling_rate, channels, frames, data.as_mut_ptr()) })?;
47 Ok(())
48 }
49
50 pub fn load_from_file(&self, path : &CString) -> Result<()> {
52 check(unsafe { libaudioverse_sys::Lav_bufferLoadFromFile(self.handle, path.as_ptr()) })?;
53 Ok(())
54 }
55
56 pub fn normalize(&self) -> Result<()> {
58 check(unsafe { libaudioverse_sys::Lav_bufferNormalize(self.handle) })
59 }
60
61}