Struct Buffer

Source
pub struct Buffer { /* private fields */ }
Expand description

An audio buffer of any format.

Implementations§

Source§

impl Buffer

Source

pub fn context(&self) -> &Context

Context from which this buffer was created.

Source

pub fn as_raw(&self) -> ALuint

Raw handle as provided by OpenAL.

Source

pub fn set_data<F: SampleFrame, B: AsBufferData<F>>( &mut self, data: B, freq: ALint, ) -> AltoResult<()>

alBufferData()

Examples found in repository?
examples/sine.rs (line 76)
7fn main() {
8	let alto = if let Ok(alto) = Alto::load_default() {
9		alto
10	} else {
11		println!("No OpenAL implementation present!");
12		return;
13	};
14
15	println!("Using output: {:?}", alto.default_output().unwrap());
16	let dev = alto.open(None).unwrap();
17	let ctx = dev.new_context(None).unwrap();
18
19	let mut slot = if dev.is_extension_present(alto::ext::Alc::Efx) {
20		println!("Using EFX reverb");
21		if let Ok(slot) = (|| -> AltoResult<_> {
22			let mut slot = ctx.new_aux_effect_slot()?;
23			let mut reverb: efx::EaxReverbEffect = ctx.new_effect()?;
24			reverb.set_preset(&efx::REVERB_PRESET_GENERIC)?;
25			slot.set_effect(&reverb)?;
26			Ok(slot)
27		})() {
28			Some(slot)
29		} else {
30			println!("Broken router detected; disabling EFX");
31			None
32		}
33	} else {
34		println!("EFX not present");
35		None
36	};
37
38	{
39		let buf = ctx.new_buffer(SinWave::new(44_000 / 440, 0.25).render().take(44_000 / 440).collect::<Vec<_>>(), 44_000).unwrap();
40		let buf = Arc::new(buf);
41
42		let mut src = ctx.new_static_source().unwrap();
43		src.set_buffer(buf).unwrap();
44		src.set_looping(true);
45		if let Some(ref mut slot) = slot {
46			src.set_aux_send(0, slot).unwrap();
47		}
48
49		println!("Playing static 440hz sine wave...");
50		src.play();
51
52		std::thread::sleep(std::time::Duration::new(2, 0));
53	}
54
55	std::thread::sleep(std::time::Duration::new(1, 0));
56
57	{
58		let mut wave = SinWave::new(44_000 / 220, 0.25);
59
60		let mut src = ctx.new_streaming_source().unwrap();
61		if let Some(ref mut slot) = slot {
62			src.set_aux_send(0, slot).unwrap();
63		}
64		for _ in 0 .. 5 {
65			let buf = ctx.new_buffer(wave.render().take(44_000 / 10).collect::<Vec<_>>(), 44_000).unwrap();
66			src.queue_buffer(buf).unwrap();
67		}
68
69		println!("Playing streaming 220hz sine wave...");
70		src.play();
71
72		for _ in 0 .. 15 {
73			while src.buffers_processed() == 0 { }
74
75			let mut buf = src.unqueue_buffer().unwrap();
76			buf.set_data(wave.render().take(44_000 / 10).collect::<Vec<_>>(), 44_000).unwrap();
77			src.queue_buffer(buf).unwrap();
78		}
79
80		while src.buffers_processed() < 5 { }
81	}
82
83	std::thread::sleep(std::time::Duration::new(1, 0));
84}
Source

pub fn frequency(&self) -> ALint

alGetBufferi(AL_FREQUENCY)

Source

pub fn bits(&self) -> ALint

alGetBufferi(AL_BITS)

Source

pub fn channels(&self) -> ALint

alGetBufferi(AL_CHANNELS)

Source

pub fn size(&self) -> ALint

alGetBufferi(AL_SIZE)

Source

pub fn soft_loop_points(&self) -> (ALint, ALint)

alGetBufferiv(AL_LOOP_POINTS_SOFT) Requires AL_SOFT_loop_points

Source

pub fn set_soft_loop_points(&self, value: (ALint, ALint)) -> AltoResult<()>

alBufferiv(AL_LOOP_POINTS_SOFT) Requires AL_SOFT_loop_points

Trait Implementations§

Source§

impl Drop for Buffer

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl Freeze for Buffer

§

impl RefUnwindSafe for Buffer

§

impl Send for Buffer

§

impl Sync for Buffer

§

impl Unpin for Buffer

§

impl UnwindSafe for Buffer

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Erased for T