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
impl BaseEffect
Sourcepub fn set_gain(&mut self, gain: f32)
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.
Sourcepub fn add_filter(&mut self, filter: InputFilter) -> Handle<InputFilter>
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).
Sourcepub fn add_input(&mut self, input: EffectInput)
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}Sourcepub fn filter(&self, handle: Handle<InputFilter>) -> &InputFilter
pub fn filter(&self, handle: Handle<InputFilter>) -> &InputFilter
Returns shared reference to filter.
Sourcepub fn filter_mut(&mut self, handle: Handle<InputFilter>) -> &mut InputFilter
pub fn filter_mut(&mut self, handle: Handle<InputFilter>) -> &mut InputFilter
Returns mutable reference to filter.
Trait Implementations§
Source§impl Clone for BaseEffect
impl Clone for BaseEffect
Source§fn clone(&self) -> BaseEffect
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)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for BaseEffect
impl Debug for BaseEffect
Source§impl Default for BaseEffect
impl Default for BaseEffect
Source§impl Visit for BaseEffect
impl Visit for BaseEffect
Auto Trait Implementations§
impl Freeze for BaseEffect
impl !RefUnwindSafe for BaseEffect
impl Send for BaseEffect
impl Sync for BaseEffect
impl Unpin for BaseEffect
impl UnsafeUnpin for BaseEffect
impl !UnwindSafe for BaseEffect
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> PropertyValue for Twhere
T: Debug + 'static,
impl<T> PropertyValue for Twhere
T: Debug + 'static,
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>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
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
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
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.