pub struct AudioBuffer<const N_CHANNELS: usize>(pub [Vec<f32>; N_CHANNELS]);Expand description
Phonon processes audio in audio buffers, which contain uncompressed Pulse Code Modulated (PCM) data (just like a .wav file).
Audio buffers contain one or more channels; for example, a stereo audio buffer contains 2 channels. Each channel typically contains several samples, which are values of the audio signal’s level at discrete points of time. Each channel has the same number of samples.
A sample is a 32-bit floating-point. The time interval between two successive samples is specified using the sampling rate. Typical sampling rates are 44100 Hz (CD quality) or 48000 Hz.
§Interleaving
Phonon stores audio buffers in a deinterleaved layout. This means that all the samples for the first channel are store contiguously, followed by all the samples for the second channel, and so on.
Most audio formats instead use an interleaved layout, where data for each
frame is stored together in memory. Interleaved data can be read to and
written from using AudioBuffer::read_interleaved and AudioBuffer::write_interleaved.
Tuple Fields§
§0: [Vec<f32>; N_CHANNELS]Implementations§
Source§impl<const N_CHANNELS: usize> AudioBuffer<N_CHANNELS>
impl<const N_CHANNELS: usize> AudioBuffer<N_CHANNELS>
Sourcepub fn new(num_samples: usize) -> Self
pub fn new(num_samples: usize) -> Self
Creates a new AudioBuffer with a fixed number of channels and samples.
Initalized to all zeros, representing silence.
Sourcepub fn num_channels(&self) -> usize
pub fn num_channels(&self) -> usize
Returns the number of channels this AudioBuffer has.
Sourcepub fn num_samples(&self) -> usize
pub fn num_samples(&self) -> usize
Returns the number of samples each channel has.
Sourcepub fn make_silent(&mut self)
pub fn make_silent(&mut self)
Fills the AudioBuffer with all zero samples, representing silence.
Sourcepub fn mix(&mut self, other: &AudioBuffer<N_CHANNELS>)
pub fn mix(&mut self, other: &AudioBuffer<N_CHANNELS>)
Mixes the AudioBuffer into another by adding samples together.
Sourcepub fn downmix(&self, output: &mut AudioBuffer<1>)
pub fn downmix(&self, output: &mut AudioBuffer<1>)
Mixes all channels on an AudioBuffer into a single output channel.
Downmixing is performed by summing up the source channels and dividing
the result by the number of source channels.
Sourcepub fn read_interleaved(&mut self, source: &[f32])
pub fn read_interleaved(&mut self, source: &[f32])
Reads a slice of interleaved samples into this AudioBuffer.
Sourcepub fn write_interleaved(&self, target: &mut [f32])
pub fn write_interleaved(&self, target: &mut [f32])
Writes the AudioBuffer to an interleaved slice.
Trait Implementations§
Source§impl<const N_CHANNELS: usize> Deref for AudioBuffer<N_CHANNELS>
impl<const N_CHANNELS: usize> Deref for AudioBuffer<N_CHANNELS>
Auto Trait Implementations§
impl<const N_CHANNELS: usize> Freeze for AudioBuffer<N_CHANNELS>
impl<const N_CHANNELS: usize> RefUnwindSafe for AudioBuffer<N_CHANNELS>
impl<const N_CHANNELS: usize> Send for AudioBuffer<N_CHANNELS>
impl<const N_CHANNELS: usize> Sync for AudioBuffer<N_CHANNELS>
impl<const N_CHANNELS: usize> Unpin for AudioBuffer<N_CHANNELS>
impl<const N_CHANNELS: usize> UnsafeUnpin for AudioBuffer<N_CHANNELS>
impl<const N_CHANNELS: usize> UnwindSafe for AudioBuffer<N_CHANNELS>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreimpl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.