Skip to main content

BaseEffect

Struct BaseEffect 

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

Base effect for all other kinds of effects. It contains set of inputs (direct or filtered), provides some basic methods to control them.

Implementations§

Source§

impl BaseEffect

Source

pub fn gain(&self) -> f32

Returns current gain of effect.

Source

pub fn set_gain(&mut self, gain: f32)

Sets effect gain. It should be in (0;1) range, but larger values still fine - they can be used to achieve “overdrive” effect if needed. Basically this value defines how “loud” effect will be.

Source

pub fn add_filter(&mut self, filter: InputFilter) -> Handle<InputFilter>

Adds new filter to effect and returns its handle. Filter handle then can be used to add input to effect (if it is filtered input).

Source

pub fn add_input(&mut self, input: EffectInput)

Adds new input to effect.

Examples found in repository?
examples/reverb.rs (line 61)
17fn main() {
18    let hrir_sphere =
19        HrirSphere::from_file("examples/data/IRC_1002_C.bin", context::SAMPLE_RATE).unwrap();
20
21    // Initialize sound engine with default output device.
22    let engine = SoundEngine::new();
23
24    // Initialize new sound context.
25    let context = SoundContext::new();
26
27    engine.lock().unwrap().add_context(context.clone());
28
29    // Set HRTF renderer instead of default for binaural sound.
30    context
31        .state()
32        .set_renderer(Renderer::HrtfRenderer(HrtfRenderer::new(hrir_sphere)));
33
34    let base_effect = BaseEffect::default();
35
36    // Create reverb effect and set its decay time.
37    let mut reverb = Reverb::new(base_effect);
38    reverb.set_decay_time(Duration::from_secs_f32(10.0));
39    let reverb_handle = context.state().add_effect(Effect::Reverb(reverb));
40
41    // Create some sounds.
42    let sound_buffer = SoundBufferResource::new_generic(
43        block_on(DataSource::from_file("examples/data/door_open.wav")).unwrap(),
44    )
45    .unwrap();
46    let source = SpatialSourceBuilder::new(
47        GenericSourceBuilder::new()
48            .with_buffer(sound_buffer)
49            .with_status(Status::Playing)
50            .build()
51            .unwrap(),
52    )
53    .build_source();
54    let door_sound = context.state().add_source(source);
55
56    // Each sound source must be attached to effect, otherwise sound won't be passed to effect
57    // and you'll hear sound without any difference.
58    context
59        .state()
60        .effect_mut(reverb_handle)
61        .add_input(EffectInput::direct(door_sound));
62
63    let sound_buffer = SoundBufferResource::new_generic(
64        block_on(DataSource::from_file("examples/data/drop.wav")).unwrap(),
65    )
66    .unwrap();
67    let source = SpatialSourceBuilder::new(
68        GenericSourceBuilder::new()
69            .with_buffer(sound_buffer)
70            .with_status(Status::Playing)
71            .with_looping(true)
72            .build()
73            .unwrap(),
74    )
75    .build_source();
76    let drop_sound_handle = context.state().add_source(source);
77
78    context
79        .state()
80        .effect_mut(reverb_handle)
81        .add_input(EffectInput::direct(drop_sound_handle));
82
83    // Move sound around listener for some time.
84    let start_time = time::Instant::now();
85    let mut angle = 0.0f32;
86    while (time::Instant::now() - start_time).as_secs() < 360 {
87        if let SoundSource::Spatial(sound) = context.state().source_mut(drop_sound_handle) {
88            let axis = Vector3::y_axis();
89            let rotation_matrix =
90                UnitQuaternion::from_axis_angle(&axis, angle.to_radians()).to_homogeneous();
91            sound.set_position(
92                rotation_matrix
93                    .transform_point(&Point3::new(0.0, 0.0, 1.0))
94                    .coords,
95            );
96        }
97
98        angle += 1.6;
99
100        println!(
101            "Sound render time {:?}",
102            context.state().full_render_duration()
103        );
104
105        // Limit rate of context updates.
106        thread::sleep(Duration::from_millis(100));
107    }
108}
Source

pub fn filter(&self, handle: Handle<InputFilter>) -> &InputFilter

Returns shared reference to filter.

Source

pub fn filter_mut(&mut self, handle: Handle<InputFilter>) -> &mut InputFilter

Returns mutable reference to filter.

Trait Implementations§

Source§

impl Clone for BaseEffect

Source§

fn clone(&self) -> BaseEffect

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BaseEffect

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for BaseEffect

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Visit for BaseEffect

Source§

fn visit(&mut self, name: &str, visitor: &mut Visitor) -> VisitResult

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> PropertyValue for T
where T: Debug + 'static,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Casts self to a &dyn Any
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> ResourceLoadError for T
where T: 'static + Debug + Send + Sync,