fmod/core/
enums.rs

1// Copyright (c) 2024 Lily Lyons
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
7use fmod_sys::*;
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10#[derive(
11    num_enum::TryFromPrimitive,
12    num_enum::IntoPrimitive,
13    num_enum::UnsafeFromPrimitive
14)]
15// stupid enum repr hack
16#[cfg_attr(target_env = "msvc", repr(i32))]
17#[cfg_attr(not(target_env = "msvc"), repr(u32))]
18pub enum SpeakerMode {
19    Default = FMOD_SPEAKERMODE_DEFAULT,
20    Raw = FMOD_SPEAKERMODE_RAW,
21    Mono = FMOD_SPEAKERMODE_MONO,
22    Stereo = FMOD_SPEAKERMODE_STEREO,
23    Quad = FMOD_SPEAKERMODE_QUAD,
24    Surround = FMOD_SPEAKERMODE_SURROUND,
25    FivePointOne = FMOD_SPEAKERMODE_5POINT1,
26    SevenPointOne = FMOD_SPEAKERMODE_7POINT1,
27    SevenPointOneFour = FMOD_SPEAKERMODE_7POINT1POINT4,
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq)]
31#[derive(
32    num_enum::TryFromPrimitive,
33    num_enum::IntoPrimitive,
34    num_enum::UnsafeFromPrimitive
35)]
36// stupid enum repr hack
37#[cfg_attr(target_env = "msvc", repr(i32))]
38#[cfg_attr(not(target_env = "msvc"), repr(u32))]
39pub enum OutputType {
40    AutoDetect = FMOD_OUTPUTTYPE_AUTODETECT,
41    Unknown = FMOD_OUTPUTTYPE_UNKNOWN,
42    NoSound = FMOD_OUTPUTTYPE_NOSOUND,
43    WavWriter = FMOD_OUTPUTTYPE_WAVWRITER,
44    NoSoundNRT = FMOD_OUTPUTTYPE_NOSOUND_NRT,
45    WavWriterNRT = FMOD_OUTPUTTYPE_WAVWRITER_NRT,
46    WASAPI = FMOD_OUTPUTTYPE_WASAPI,
47    ASIO = FMOD_OUTPUTTYPE_ASIO,
48    PulseAudio = FMOD_OUTPUTTYPE_PULSEAUDIO,
49    Alsa = FMOD_OUTPUTTYPE_ALSA,
50    CoreAudio = FMOD_OUTPUTTYPE_COREAUDIO,
51    AudioTrack = FMOD_OUTPUTTYPE_AUDIOTRACK,
52    OpenSL = FMOD_OUTPUTTYPE_OPENSL,
53    AudioOut = FMOD_OUTPUTTYPE_AUDIOOUT,
54    WebAudio = FMOD_OUTPUTTYPE_WEBAUDIO,
55    NNAudio = FMOD_OUTPUTTYPE_NNAUDIO,
56    WinSonic = FMOD_OUTPUTTYPE_WINSONIC,
57    AAudio = FMOD_OUTPUTTYPE_AAUDIO,
58    AudioWorklet = FMOD_OUTPUTTYPE_AUDIOWORKLET,
59    Phase = FMOD_OUTPUTTYPE_PHASE,
60    OHAudio = FMOD_OUTPUTTYPE_OHAUDIO,
61}
62
63#[derive(Debug, Clone, Copy, PartialEq, Eq)]
64#[derive(
65    num_enum::TryFromPrimitive,
66    num_enum::IntoPrimitive,
67    num_enum::UnsafeFromPrimitive
68)]
69// stupid enum repr hack
70#[cfg_attr(target_env = "msvc", repr(i32))]
71#[cfg_attr(not(target_env = "msvc"), repr(u32))]
72pub enum ThreadType {
73    Mixer = FMOD_THREAD_TYPE_MIXER,
74    Feeder = FMOD_THREAD_TYPE_FEEDER,
75    Stream = FMOD_THREAD_TYPE_STREAM,
76    File = FMOD_THREAD_TYPE_FILE,
77    NonBlocking = FMOD_THREAD_TYPE_NONBLOCKING,
78    Record = FMOD_THREAD_TYPE_RECORD,
79    Geometry = FMOD_THREAD_TYPE_GEOMETRY,
80    Profiler = FMOD_THREAD_TYPE_PROFILER,
81    StudioUpdate = FMOD_THREAD_TYPE_STUDIO_UPDATE,
82    StudioLoadBank = FMOD_THREAD_TYPE_STUDIO_LOAD_BANK,
83    StudioLoadSample = FMOD_THREAD_TYPE_STUDIO_LOAD_SAMPLE,
84    Convolution1 = FMOD_THREAD_TYPE_CONVOLUTION1,
85    Convolution2 = FMOD_THREAD_TYPE_CONVOLUTION2,
86}
87
88#[derive(Debug, Clone, Copy, PartialEq, Eq)]
89#[derive(
90    num_enum::TryFromPrimitive,
91    num_enum::IntoPrimitive,
92    num_enum::UnsafeFromPrimitive
93)]
94#[repr(u32)]
95pub enum TimeUnit {
96    MS = FMOD_TIMEUNIT_MS,
97    PCM = FMOD_TIMEUNIT_PCM,
98    PCMBytes = FMOD_TIMEUNIT_PCMBYTES,
99    RawBytes = FMOD_TIMEUNIT_RAWBYTES,
100    PCMFraction = FMOD_TIMEUNIT_PCMFRACTION,
101    ModOrder = FMOD_TIMEUNIT_MODORDER,
102    ModRow = FMOD_TIMEUNIT_MODROW,
103    ModPattern = FMOD_TIMEUNIT_MODPATTERN,
104}
105
106#[derive(Debug, Clone, Copy, PartialEq, Eq)]
107#[derive(
108    num_enum::TryFromPrimitive,
109    num_enum::IntoPrimitive,
110    num_enum::UnsafeFromPrimitive
111)]
112#[repr(i32)]
113pub enum Speaker {
114    None = FMOD_SPEAKER_NONE,
115    FrontLeft = FMOD_SPEAKER_FRONT_LEFT,
116    FrontRight = FMOD_SPEAKER_FRONT_RIGHT,
117    FrontCenter = FMOD_SPEAKER_FRONT_CENTER,
118    LowFrequency = FMOD_SPEAKER_LOW_FREQUENCY,
119    SurroundLeft = FMOD_SPEAKER_SURROUND_LEFT,
120    SurroundRight = FMOD_SPEAKER_SURROUND_RIGHT,
121    BackLeft = FMOD_SPEAKER_BACK_LEFT,
122    BackRight = FMOD_SPEAKER_BACK_RIGHT,
123    TopFrontLeft = FMOD_SPEAKER_TOP_FRONT_LEFT,
124    TopFrontRight = FMOD_SPEAKER_TOP_FRONT_RIGHT,
125    TopBackLeft = FMOD_SPEAKER_TOP_BACK_LEFT,
126    TopBackRight = FMOD_SPEAKER_TOP_BACK_RIGHT,
127}
128
129#[derive(Debug, Clone, Copy, PartialEq, Eq)]
130#[derive(
131    num_enum::TryFromPrimitive,
132    num_enum::IntoPrimitive,
133    num_enum::UnsafeFromPrimitive
134)]
135// stupid enum repr hack
136#[cfg_attr(target_env = "msvc", repr(i32))]
137#[cfg_attr(not(target_env = "msvc"), repr(u32))]
138pub enum PluginType {
139    Output = FMOD_PLUGINTYPE_OUTPUT,
140    Codec = FMOD_PLUGINTYPE_CODEC,
141    DSP = FMOD_PLUGINTYPE_DSP,
142}
143
144#[derive(Debug, Clone, Copy, PartialEq, Eq)]
145#[derive(
146    num_enum::TryFromPrimitive,
147    num_enum::IntoPrimitive,
148    num_enum::UnsafeFromPrimitive
149)]
150// stupid enum repr hack
151#[cfg_attr(target_env = "msvc", repr(i32))]
152#[cfg_attr(not(target_env = "msvc"), repr(u32))]
153pub enum DspType {
154    Unknown = FMOD_DSP_TYPE_UNKNOWN,
155    Mixer = FMOD_DSP_TYPE_MIXER,
156    Oscillator = FMOD_DSP_TYPE_OSCILLATOR,
157    Lowpass = FMOD_DSP_TYPE_LOWPASS,
158    ItLowpass = FMOD_DSP_TYPE_ITLOWPASS,
159    Highpass = FMOD_DSP_TYPE_HIGHPASS,
160    Echo = FMOD_DSP_TYPE_ECHO,
161    Fader = FMOD_DSP_TYPE_FADER,
162    Flange = FMOD_DSP_TYPE_FLANGE,
163    Distortion = FMOD_DSP_TYPE_DISTORTION,
164    Normalize = FMOD_DSP_TYPE_NORMALIZE,
165    Limiter = FMOD_DSP_TYPE_LIMITER,
166    ParamEq = FMOD_DSP_TYPE_PARAMEQ,
167    PitchShift = FMOD_DSP_TYPE_PITCHSHIFT,
168    Chorus = FMOD_DSP_TYPE_CHORUS,
169    VstPlugin = FMOD_DSP_TYPE_VSTPLUGIN,
170    WinampPlugin = FMOD_DSP_TYPE_WINAMPPLUGIN,
171    ItEcho = FMOD_DSP_TYPE_ITECHO,
172    Compressor = FMOD_DSP_TYPE_COMPRESSOR,
173    SfxReverb = FMOD_DSP_TYPE_SFXREVERB,
174    LowpassSimple = FMOD_DSP_TYPE_LOWPASS_SIMPLE,
175    Delay = FMOD_DSP_TYPE_DELAY,
176    Tremolo = FMOD_DSP_TYPE_TREMOLO,
177    LadspaPlugin = FMOD_DSP_TYPE_LADSPAPLUGIN,
178    Send = FMOD_DSP_TYPE_SEND,
179    Return = FMOD_DSP_TYPE_RETURN,
180    HighpassSimple = FMOD_DSP_TYPE_HIGHPASS_SIMPLE,
181    Pan = FMOD_DSP_TYPE_PAN,
182    ThreeEq = FMOD_DSP_TYPE_THREE_EQ,
183    Fft = FMOD_DSP_TYPE_FFT,
184    LoudnessMeter = FMOD_DSP_TYPE_LOUDNESS_METER,
185    EnvelopeFollower = FMOD_DSP_TYPE_ENVELOPEFOLLOWER,
186    ConvolutionReverb = FMOD_DSP_TYPE_CONVOLUTIONREVERB,
187    ChannelMix = FMOD_DSP_TYPE_CHANNELMIX,
188    Transceiver = FMOD_DSP_TYPE_TRANSCEIVER,
189    ObjectPan = FMOD_DSP_TYPE_OBJECTPAN,
190    MultibandEq = FMOD_DSP_TYPE_MULTIBAND_EQ,
191}
192
193#[derive(Debug, Clone, Copy, PartialEq, Eq)]
194#[derive(
195    num_enum::TryFromPrimitive,
196    num_enum::IntoPrimitive,
197    num_enum::UnsafeFromPrimitive
198)]
199// stupid enum repr hack
200#[cfg_attr(target_env = "msvc", repr(i32))]
201#[cfg_attr(not(target_env = "msvc"), repr(u32))]
202pub enum PortType {
203    Music = FMOD_PORT_TYPE_MUSIC,
204    CopyrightMusic = FMOD_PORT_TYPE_COPYRIGHT_MUSIC,
205    Voice = FMOD_PORT_TYPE_VOICE,
206    Controller = FMOD_PORT_TYPE_CONTROLLER,
207    Personal = FMOD_PORT_TYPE_PERSONAL,
208    Vibration = FMOD_PORT_TYPE_VIBRATION,
209    AUX = FMOD_PORT_TYPE_AUX,
210}
211
212#[derive(Debug, Clone, Copy, PartialEq, Eq)]
213#[derive(
214    num_enum::TryFromPrimitive,
215    num_enum::IntoPrimitive,
216    num_enum::UnsafeFromPrimitive
217)]
218// stupid enum repr hack
219#[cfg_attr(target_env = "msvc", repr(i32))]
220#[cfg_attr(not(target_env = "msvc"), repr(u32))]
221pub enum SoundGroupBehavior {
222    Fail = FMOD_SOUNDGROUP_BEHAVIOR_FAIL,
223    Mute = FMOD_SOUNDGROUP_BEHAVIOR_MUTE,
224    StealLowest = FMOD_SOUNDGROUP_BEHAVIOR_STEALLOWEST,
225}
226
227#[derive(Debug, Clone, Copy, PartialEq, Eq)]
228#[derive(
229    num_enum::TryFromPrimitive,
230    num_enum::IntoPrimitive,
231    num_enum::UnsafeFromPrimitive
232)]
233// stupid enum repr hack
234#[cfg_attr(target_env = "msvc", repr(i32))]
235#[cfg_attr(not(target_env = "msvc"), repr(u32))]
236pub enum DspConnectionType {
237    Standard = FMOD_DSPCONNECTION_TYPE_STANDARD,
238    Sidechain = FMOD_DSPCONNECTION_TYPE_SIDECHAIN,
239    Send = FMOD_DSPCONNECTION_TYPE_SEND,
240    SendSidechain = FMOD_DSPCONNECTION_TYPE_SEND_SIDECHAIN,
241}
242
243#[derive(Debug, Clone, Copy, PartialEq, Eq)]
244#[derive(num_enum::TryFromPrimitive, num_enum::IntoPrimitive)]
245#[repr(i32)]
246pub enum DspParameterDataType {
247    User = FMOD_DSP_PARAMETER_DATA_TYPE_USER,
248    OverAlign = FMOD_DSP_PARAMETER_DATA_TYPE_OVERALLGAIN,
249    Attributes3D = FMOD_DSP_PARAMETER_DATA_TYPE_3DATTRIBUTES,
250    Sidechain = FMOD_DSP_PARAMETER_DATA_TYPE_SIDECHAIN,
251    FFT = FMOD_DSP_PARAMETER_DATA_TYPE_FFT,
252    Attributes3DMulti = FMOD_DSP_PARAMETER_DATA_TYPE_3DATTRIBUTES_MULTI,
253    AttenuationRange = FMOD_DSP_PARAMETER_DATA_TYPE_ATTENUATION_RANGE,
254}
255
256#[derive(Debug, Clone, Copy, PartialEq, Eq)]
257#[derive(
258    num_enum::TryFromPrimitive,
259    num_enum::IntoPrimitive,
260    num_enum::UnsafeFromPrimitive
261)]
262// stupid enum repr hack
263#[cfg_attr(target_env = "msvc", repr(i32))]
264#[cfg_attr(not(target_env = "msvc"), repr(u32))]
265pub enum SoundType {
266    Unknown = FMOD_SOUND_TYPE_UNKNOWN,
267    AIFF = FMOD_SOUND_TYPE_AIFF,
268    ASF = FMOD_SOUND_TYPE_ASF,
269    DLS = FMOD_SOUND_TYPE_DLS,
270    FLAC = FMOD_SOUND_TYPE_FLAC,
271    FSB = FMOD_SOUND_TYPE_FSB,
272    IT = FMOD_SOUND_TYPE_IT,
273    MIDI = FMOD_SOUND_TYPE_MIDI,
274    MOD = FMOD_SOUND_TYPE_MOD,
275    MPEG = FMOD_SOUND_TYPE_MPEG,
276    OGGVORBIS = FMOD_SOUND_TYPE_OGGVORBIS,
277    Playlist = FMOD_SOUND_TYPE_PLAYLIST,
278    RAW = FMOD_SOUND_TYPE_RAW,
279    S3M = FMOD_SOUND_TYPE_S3M,
280    User = FMOD_SOUND_TYPE_USER,
281    WAV = FMOD_SOUND_TYPE_WAV,
282    XM = FMOD_SOUND_TYPE_XM,
283    XMA = FMOD_SOUND_TYPE_XMA,
284    AudioQueue = FMOD_SOUND_TYPE_AUDIOQUEUE,
285    AT9 = FMOD_SOUND_TYPE_AT9,
286    Vorbis = FMOD_SOUND_TYPE_VORBIS,
287    MediaFoundation = FMOD_SOUND_TYPE_MEDIA_FOUNDATION,
288    MediaCodec = FMOD_SOUND_TYPE_MEDIACODEC,
289    FADPCM = FMOD_SOUND_TYPE_FADPCM,
290    OPUS = FMOD_SOUND_TYPE_OPUS,
291}
292
293#[derive(Debug, Clone, Copy, PartialEq, Eq)]
294#[derive(
295    num_enum::TryFromPrimitive,
296    num_enum::IntoPrimitive,
297    num_enum::UnsafeFromPrimitive
298)]
299// stupid enum repr hack
300#[cfg_attr(target_env = "msvc", repr(i32))]
301#[cfg_attr(not(target_env = "msvc"), repr(u32))]
302pub enum SoundFormat {
303    None = FMOD_SOUND_FORMAT_NONE,
304    PCM8 = FMOD_SOUND_FORMAT_PCM8,
305    PCM16 = FMOD_SOUND_FORMAT_PCM16,
306    PCM24 = FMOD_SOUND_FORMAT_PCM24,
307    PCM32 = FMOD_SOUND_FORMAT_PCM32,
308    PCMFloat = FMOD_SOUND_FORMAT_PCMFLOAT,
309    BitStream = FMOD_SOUND_FORMAT_BITSTREAM,
310}
311
312#[derive(Debug, Clone, Copy, PartialEq, Eq)]
313#[derive(
314    num_enum::TryFromPrimitive,
315    num_enum::IntoPrimitive,
316    num_enum::UnsafeFromPrimitive
317)]
318// stupid enum repr hack
319#[cfg_attr(target_env = "msvc", repr(i32))]
320#[cfg_attr(not(target_env = "msvc"), repr(u32))]
321pub enum TagType {
322    Unknown = FMOD_TAGTYPE_UNKNOWN,
323    ID3V1 = FMOD_TAGTYPE_ID3V1,
324    ID3V2 = FMOD_TAGTYPE_ID3V2,
325    VorbisComment = FMOD_TAGTYPE_VORBISCOMMENT,
326    ShoutCast = FMOD_TAGTYPE_SHOUTCAST,
327    IceCast = FMOD_TAGTYPE_ICECAST,
328    ASF = FMOD_TAGTYPE_ASF,
329    MIDI = FMOD_TAGTYPE_MIDI,
330    Playlist = FMOD_TAGTYPE_PLAYLIST,
331    Fmod = FMOD_TAGTYPE_FMOD,
332    User = FMOD_TAGTYPE_USER,
333}
334
335#[derive(Debug, Clone, PartialEq, Eq)]
336// stupid enum repr hack
337#[cfg_attr(target_env = "msvc", repr(i32))]
338#[cfg_attr(not(target_env = "msvc"), repr(u32))]
339pub enum OpenState {
340    Ready = FMOD_OPENSTATE_READY,
341    Loading = FMOD_OPENSTATE_LOADING,
342    Error(Error) = FMOD_OPENSTATE_ERROR,
343    Connecting = FMOD_OPENSTATE_CONNECTING,
344    Buffering = FMOD_OPENSTATE_BUFFERING,
345    Seeking = FMOD_OPENSTATE_SEEKING,
346    Playing = FMOD_OPENSTATE_PLAYING,
347    SetPosition = FMOD_OPENSTATE_SETPOSITION,
348}
349
350impl OpenState {
351    pub fn try_from_ffi(value: FMOD_OPENSTATE, error: Option<Error>) -> Result<Self> {
352        match value {
353            FMOD_OPENSTATE_READY => Ok(OpenState::Ready),
354            FMOD_OPENSTATE_LOADING => Ok(OpenState::Loading),
355            FMOD_OPENSTATE_ERROR => error
356                .map(OpenState::Error)
357                .ok_or(Error::Fmod(FMOD_RESULT::FMOD_ERR_INVALID_PARAM)),
358            FMOD_OPENSTATE_CONNECTING => Ok(OpenState::Connecting),
359            FMOD_OPENSTATE_BUFFERING => Ok(OpenState::Buffering),
360            FMOD_OPENSTATE_SEEKING => Ok(OpenState::Seeking),
361            FMOD_OPENSTATE_PLAYING => Ok(OpenState::Playing),
362            FMOD_OPENSTATE_SETPOSITION => Ok(OpenState::SetPosition),
363            _ => Err(Error::EnumFromPrivitive {
364                name: "LoadingState",
365                primitive: i64::from(value),
366            }),
367        }
368    }
369}
370
371#[derive(Debug, Clone, Copy, PartialEq, Eq)]
372#[derive(
373    num_enum::TryFromPrimitive,
374    num_enum::IntoPrimitive,
375    num_enum::UnsafeFromPrimitive
376)]
377// stupid enum repr hack
378#[cfg_attr(target_env = "msvc", repr(i32))]
379#[cfg_attr(not(target_env = "msvc"), repr(u32))]
380pub enum ChannelOrder {
381    Default = FMOD_CHANNELORDER_DEFAULT,
382    WaveFormat = FMOD_CHANNELORDER_WAVEFORMAT,
383    ProTools = FMOD_CHANNELORDER_PROTOOLS,
384    AllMono = FMOD_CHANNELORDER_ALLMONO,
385    AllStereo = FMOD_CHANNELORDER_ALLSTEREO,
386    Alsa = FMOD_CHANNELORDER_ALSA,
387}