fmod/
channel_control.rs

1use crate::{ll, Delay, Dsp, DspRef, Error, Mode};
2
3pub enum Type {
4  Channel      = ll::FMOD_CHANNELCONTROL_TYPE_FMOD_CHANNELCONTROL_CHANNEL
5    as isize,
6  Channelgroup = ll::FMOD_CHANNELCONTROL_TYPE_FMOD_CHANNELCONTROL_CHANNELGROUP
7    as isize
8}
9
10pub enum CallbackType {
11  End = ll::FMOD_CHANNELCONTROL_CALLBACK_TYPE_FMOD_CHANNELCONTROL_CALLBACK_END as isize,
12  Virtualvoice =
13    ll::FMOD_CHANNELCONTROL_CALLBACK_TYPE_FMOD_CHANNELCONTROL_CALLBACK_VIRTUALVOICE
14      as isize,
15  Syncpoint =
16    ll::FMOD_CHANNELCONTROL_CALLBACK_TYPE_FMOD_CHANNELCONTROL_CALLBACK_SYNCPOINT
17      as isize,
18  Occlusion =
19    ll::FMOD_CHANNELCONTROL_CALLBACK_TYPE_FMOD_CHANNELCONTROL_CALLBACK_OCCLUSION
20      as isize,
21  MAX = ll::FMOD_CHANNELCONTROL_CALLBACK_TYPE_FMOD_CHANNELCONTROL_CALLBACK_MAX as isize
22}
23
24/// Special types of nodes within a DSP chain.
25///
26/// By default there is one fader for a `ChannelGroup` or `Channel` and it is the head.
27pub enum DspIndex {
28  /// -1: Head of the DSP chain (always index 0)
29  Head  = ll::FMOD_CHANNELCONTROL_DSP_INDEX_FMOD_CHANNELCONTROL_DSP_HEAD as isize,
30  /// -2: Index of the built-in fader DSP; initially 0
31  Fader = ll::FMOD_CHANNELCONTROL_DSP_INDEX_FMOD_CHANNELCONTROL_DSP_FADER as isize,
32  /// -3: Tail of the DSP chain (number of DSPs -1)
33  Tail  = ll::FMOD_CHANNELCONTROL_DSP_INDEX_FMOD_CHANNELCONTROL_DSP_TAIL as isize
34}
35
36pub trait ChannelControl {
37  fn add_dsp (&mut self, index : i32, dsp : &mut Dsp) -> Result <(), Error>;
38  fn add_fade_point (&mut self, dspclock : u64, volume : f32)
39    -> Result <(), Error>;
40  fn get_3d_attributes (&self) -> Result <([f32; 3], [f32; 3]), Error>;
41  fn get_3d_cone_orientation (&self) -> Result <[f32; 3], Error>;
42  fn get_3d_cone_settings (&self) -> Result <(f32, f32, f32), Error>;
43  fn get_3d_custom_rolloff (&self) -> Result <Vec <[f32; 3]>, Error>;
44  fn get_3d_distance_filter (&self) -> Result <(bool, f32, f32), Error>;
45  fn get_3d_doppler_level (&self) -> Result <f32, Error>;
46  // TODO: fn get_3d_level
47  fn get_3d_min_max_distance (&self) -> Result <(f32, f32), Error>;
48  fn get_3d_occlusion (&self) -> Result <(f32, f32), Error>;
49  fn get_3d_spread (&self) -> Result <f32, Error>;
50  fn get_audibility (&self) -> Result <f32, Error>;
51  fn get_delay (&self) -> Result <Delay, Error>;
52  fn get_dsp (&self, index : i32) -> Result <DspRef, Error>;
53  fn get_dsp_clock (&self) -> Result <u64, Error>;
54  fn get_dsp_clock_parent (&self) -> Result <u64, Error>;
55  fn get_dsp_index (&self, dsp : &Dsp) -> Result <i32, Error>;
56  fn get_low_pass_gain (&self) -> Result <f32, Error>;
57  //TODO: fn get_mix_matrix
58  fn get_mode (&self) -> Result <Mode, Error>;
59  fn get_mute (&self) -> Result <bool, Error>;
60  fn get_num_dsps (&self) -> Result <u32, Error>;
61  fn get_paused (&self) -> Result <bool, Error>;
62  //TODO: fn get_pitch
63  fn get_reverb_properties (&self, instance : i32) -> Result <f32, Error>;
64  fn get_volume (&self) -> Result <f32, Error>;
65  //TODO: fn get_volume_ramp
66  fn is_playing (&self) -> Result <bool, Error>;
67  fn remove_dsp (&mut self, dsp : &mut Dsp) -> Result <(), Error>;
68  //TODO: fn remove_fade_points
69  fn set_3d_attributes (&mut self, pos : [f32; 3], vel : [f32; 3])
70    -> Result <(), Error>;
71  //TODO: fn set_3d_cone_orientation
72  //TODO: fn set_3d_cone_settings
73  //TODO: fn set_3d_custom_rolloff
74  //TODO: fn set_3d_distance_filter
75  //TODO: fn set_3d_doppler_level
76  //TODO: fn set_3d_level
77  //TODO: fn set_3d_min_max_distance
78  //TODO: fn set_3d_occlusion
79  //TODO: fn set_3d_spread
80  //TODO: fn set_callback
81  fn set_delay (&mut self,
82    dspclock_start : u64, dspclock_end : u64, stopchannels : bool
83  ) -> Result <(), Error>;
84  //TODO: fn set_dsp_index
85  fn set_fade_point_ramp (&mut self, dspclock : u64, volume : f32)
86    -> Result <(), Error>;
87  //TODO: fn set_low_pass_gain
88  //TODO: fn set_mix_levels_input
89  //TODO: fn set_mix_levels_output
90  //TODO: fn set_mix_matrix
91  //TODO: fn set_mode
92  fn set_mute (&mut self, mute : bool) -> Result <(), Error>;
93  //TODO: fn set_pan
94  fn set_paused (&mut self, paused : bool) -> Result <(), Error>;
95  //TODO: fn set_pitch
96
97  /// Set the wet level of a reverb instance.
98  ///
99  /// `instance` -- Index of the particular reverb instance to target, from 0 to
100  /// `fmod::dsp::REVERB_MAXINSTANCES`.
101  ///
102  /// `wet` -- Send level for the signal to the reverb, from 0 (none) to 1.0
103  /// (full), default = 1.0 for `Channel`s, 0.0 for `ChannelGroups`.
104  ///
105  /// A `Channel` is automatically connected to all existing reverb instances due
106  /// to the default wet level of 1.0. A `ChannelGroup` however will not send to
107  /// any reverb by default requiring an explicit call to this function.
108  ///
109  /// A `ChannelGroup` reverb is optimal for the case where you want to send 1
110  /// mixed signal to the reverb, rather than a lot of individual channel reverb
111  /// sends. It is advisable to do this to reduce CPU if you have many `Channel`s
112  /// inside a `ChannelGroup`.
113  ///
114  /// Keep in mind when setting a wet level for a `ChannelGroup`, any `Channel`s
115  /// under that `ChannelGroup` will still have their existing sends to the
116  /// reverb. To avoid this doubling up you should explicitly set the `Channel`
117  /// wet levels to 0.0.
118  fn set_reverb_properties (&mut self, instance : i32, wet : f32)
119    -> Result <(), Error>;
120
121  //TODO: fn set_user_data
122  fn set_volume (&mut self, volume : f32) -> Result <(), Error>;
123  //TODO: fn set_volume_ramp
124  fn stop (&mut self) -> Result <(), Error>;
125
126  // TODO: more methods
127}