1use num_derive::FromPrimitive;
2use crate::ll;
3
4#[derive(Debug, Default, PartialEq)]
5pub struct CpuUsage {
6 pub dsp : f32,
7 pub stream : f32,
8 pub geometry : f32,
9 pub update : f32,
10 pub total : f32
11}
12
13#[derive(Clone, Debug, Default, Eq, PartialEq)]
14pub struct Delay {
15 pub dspclock_start : u64,
16 pub dspclock_end : u64,
17 pub stopchannels : bool
18}
19
20#[repr(C)]
21#[derive(Debug, Eq, PartialEq)]
22pub struct Guid {
23 pub data1 : u32,
24 pub data2 : u16,
25 pub data3 : u16,
26 pub data4 : [u8; 8]
27}
28
29#[derive(Debug, PartialEq)]
30pub struct ListenerAttributes {
31 pub pos : [f32; 3],
32 pub vel : [f32; 3],
33 pub forward : [f32; 3],
34 pub up : [f32; 3]
35}
36
37#[derive(Clone, Debug, Eq, PartialEq)]
38pub struct PluginHandle (pub u32);
39
40#[derive(Debug, Default, Eq, PartialEq)]
41pub struct SoundRam {
42 pub currentalloced : i32,
43 pub maxalloced : i32,
44 pub total : i32
45}
46
47bitflags!{
48 #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)]
49 pub struct Channelmask : u32 {
50 const FRONT_LEFT = ll::FMOD_CHANNELMASK_FRONT_LEFT;
51 const FRONT_RIGHT = ll::FMOD_CHANNELMASK_FRONT_RIGHT;
52 const FRONT_CENTER = ll::FMOD_CHANNELMASK_FRONT_CENTER;
53 const LOW_FREQUENCY = ll::FMOD_CHANNELMASK_LOW_FREQUENCY;
54 const SURROUND_LEFT = ll::FMOD_CHANNELMASK_SURROUND_LEFT;
55 const SURROUND_RIGHT = ll::FMOD_CHANNELMASK_SURROUND_RIGHT;
56 const BACK_LEFT = ll::FMOD_CHANNELMASK_BACK_LEFT;
57 const BACK_RIGHT = ll::FMOD_CHANNELMASK_BACK_RIGHT;
58 const BACK_CENTER = ll::FMOD_CHANNELMASK_BACK_CENTER;
59 const MONO = ll::FMOD_CHANNELMASK_MONO;
60 const STEREO = ll::FMOD_CHANNELMASK_STEREO;
61 const LRC = ll::FMOD_CHANNELMASK_LRC;
62 const QUAD = ll::FMOD_CHANNELMASK_QUAD;
63 const SURROUND = ll::FMOD_CHANNELMASK_SURROUND;
64 const _5POINT1 = ll::FMOD_CHANNELMASK_5POINT1;
65 const _5POINT1_REARS = ll::FMOD_CHANNELMASK_5POINT1_REARS;
66 const _7POINT0 = ll::FMOD_CHANNELMASK_7POINT0;
67 const _7POINT1 = ll::FMOD_CHANNELMASK_7POINT1;
68 }
69}
70
71bitflags!{
72 #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)]
73 pub struct DebugFlags : u32 {
74 const LEVEL_NONE = ll::FMOD_DEBUG_LEVEL_NONE;
75 const LEVEL_ERROR = ll::FMOD_DEBUG_LEVEL_ERROR;
76 const LEVEL_WARNING = ll::FMOD_DEBUG_LEVEL_WARNING;
77 const LEVEL_LOG = ll::FMOD_DEBUG_LEVEL_LOG;
78 const TYPE_MEMORY = ll::FMOD_DEBUG_TYPE_MEMORY;
79 const TYPE_FILE = ll::FMOD_DEBUG_TYPE_FILE;
80 const TYPE_CODEC = ll::FMOD_DEBUG_TYPE_CODEC;
81 const TYPE_TRACE = ll::FMOD_DEBUG_TYPE_TRACE;
82 const DISPLAY_TIMESTAMPS = ll::FMOD_DEBUG_DISPLAY_TIMESTAMPS;
83 const DISPLAY_LINENUMBERS = ll::FMOD_DEBUG_DISPLAY_LINENUMBERS;
84 const DISPLAY_THREAD = ll::FMOD_DEBUG_DISPLAY_THREAD;
85 }
86}
87
88bitflags!{
89 #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)]
90 pub struct DriverState : u32 {
91 const DRIVER_STATE_CONNECTED = ll::FMOD_DRIVER_STATE_CONNECTED;
92 const DRIVER_STATE_DEFAULT = ll::FMOD_DRIVER_STATE_DEFAULT;
93 }
94}
95
96bitflags!{
97 #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)]
98 pub struct MemoryType : u32 {
99 const NORMAL = ll::FMOD_MEMORY_NORMAL;
100 const STREAM_FILE = ll::FMOD_MEMORY_STREAM_FILE;
101 const STREAM_DECODE = ll::FMOD_MEMORY_STREAM_DECODE;
102 const SAMPLEDATA = ll::FMOD_MEMORY_SAMPLEDATA;
103 const DSP_BUFFER = ll::FMOD_MEMORY_DSP_BUFFER;
104 const PLUGIN = ll::FMOD_MEMORY_PLUGIN;
105 const XBOX360_PHYSICAL = ll::FMOD_MEMORY_XBOX360_PHYSICAL;
106 const PERSISTENT = ll::FMOD_MEMORY_PERSISTENT;
107 const SECONDARY = ll::FMOD_MEMORY_SECONDARY;
108 const ALL = ll::FMOD_MEMORY_ALL;
109 }
110}
111
112bitflags!{
113 #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)]
114 pub struct Mode : u32 {
115 const DEFAULT = ll::FMOD_DEFAULT;
116 const LOOP_OFF = ll::FMOD_LOOP_OFF;
117 const LOOP_NORMAL = ll::FMOD_LOOP_NORMAL;
118 const LOOP_BIDI = ll::FMOD_LOOP_BIDI;
119 const _2D = ll::FMOD_2D;
120 const _3D = ll::FMOD_3D;
121 const CREATESTREAM = ll::FMOD_CREATESTREAM;
122 const CREATESAMPLE = ll::FMOD_CREATESAMPLE;
123 const CREATECOMPRESSEDSAMPLE = ll::FMOD_CREATECOMPRESSEDSAMPLE;
124 const OPENUSER = ll::FMOD_OPENUSER;
125 const OPENMEMORY = ll::FMOD_OPENMEMORY;
126 const OPENMEMORY_POINT = ll::FMOD_OPENMEMORY_POINT;
127 const OPENRAW = ll::FMOD_OPENRAW;
128 const OPENONLY = ll::FMOD_OPENONLY;
129 const ACCURATETIME = ll::FMOD_ACCURATETIME;
130 const MPEGSEARCH = ll::FMOD_MPEGSEARCH;
131 const NONBLOCKING = ll::FMOD_NONBLOCKING;
132 const UNIQUE = ll::FMOD_UNIQUE;
133 const _3D_HEADRELATIVE = ll::FMOD_3D_HEADRELATIVE;
134 const _3D_WORLDRELATIVE = ll::FMOD_3D_WORLDRELATIVE;
135 const _3D_INVERSEROLLOFF = ll::FMOD_3D_INVERSEROLLOFF;
136 const _3D_LINEARROLLOFF = ll::FMOD_3D_LINEARROLLOFF;
137 const _3D_LINEARSQUAREROLLOFF = ll::FMOD_3D_LINEARSQUAREROLLOFF;
138 const _3D_INVERSETAPEREDROLLOFF = ll::FMOD_3D_INVERSETAPEREDROLLOFF;
139 const _3D_CUSTOMROLLOFF = ll::FMOD_3D_CUSTOMROLLOFF;
140 const _3D_IGNOREGEOMETRY = ll::FMOD_3D_IGNOREGEOMETRY;
141 const IGNORETAGS = ll::FMOD_IGNORETAGS;
142 const LOWMEM = ll::FMOD_LOWMEM;
143 const LOADSECONDARYRAM = ll::FMOD_LOADSECONDARYRAM;
144 const VIRTUAL_PLAYFROMSTART = ll::FMOD_VIRTUAL_PLAYFROMSTART;
145 }
146}
147
148bitflags!{
149 #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)]
150 pub struct PortIndex : u64 {
151 const NONE = u64::MAX;
152 }
153}
154
155bitflags!{
156 #[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
157 pub struct Timeunit : u32 {
158 const MS = ll::FMOD_TIMEUNIT_MS;
159 const PCM = ll::FMOD_TIMEUNIT_PCM;
160 const PCMBYTES = ll::FMOD_TIMEUNIT_PCMBYTES;
161 const RAWBYTES = ll::FMOD_TIMEUNIT_RAWBYTES;
162 const PCMFRACTION = ll::FMOD_TIMEUNIT_PCMFRACTION;
163 const MODORDER = ll::FMOD_TIMEUNIT_MODORDER;
164 const MODROW = ll::FMOD_TIMEUNIT_MODROW;
165 const MODPATTERN = ll::FMOD_TIMEUNIT_MODPATTERN;
166 }
167}
168
169#[derive(Copy, Clone, Debug, Eq, PartialEq, FromPrimitive)]
170pub enum Error {
171 Badcommand = ll::FMOD_RESULT_FMOD_ERR_BADCOMMAND as isize,
172 ChannelAlloc = ll::FMOD_RESULT_FMOD_ERR_CHANNEL_ALLOC as isize,
173 ChannelStolen = ll::FMOD_RESULT_FMOD_ERR_CHANNEL_STOLEN as isize,
174 Dma = ll::FMOD_RESULT_FMOD_ERR_DMA as isize,
175 DspConnection = ll::FMOD_RESULT_FMOD_ERR_DSP_CONNECTION as isize,
176 DspDontprocess = ll::FMOD_RESULT_FMOD_ERR_DSP_DONTPROCESS as isize,
177 DspFormat = ll::FMOD_RESULT_FMOD_ERR_DSP_FORMAT as isize,
178 DspInuse = ll::FMOD_RESULT_FMOD_ERR_DSP_INUSE as isize,
179 DspNotfound = ll::FMOD_RESULT_FMOD_ERR_DSP_NOTFOUND as isize,
180 DspReserved = ll::FMOD_RESULT_FMOD_ERR_DSP_RESERVED as isize,
181 DspSilence = ll::FMOD_RESULT_FMOD_ERR_DSP_SILENCE as isize,
182 DspType = ll::FMOD_RESULT_FMOD_ERR_DSP_TYPE as isize,
183 FileBad = ll::FMOD_RESULT_FMOD_ERR_FILE_BAD as isize,
184 FileCouldnotseek = ll::FMOD_RESULT_FMOD_ERR_FILE_COULDNOTSEEK as isize,
185 FileDiskejected = ll::FMOD_RESULT_FMOD_ERR_FILE_DISKEJECTED as isize,
186 FileEof = ll::FMOD_RESULT_FMOD_ERR_FILE_EOF as isize,
187 FileEndofdata = ll::FMOD_RESULT_FMOD_ERR_FILE_ENDOFDATA as isize,
188 FileNotfound = ll::FMOD_RESULT_FMOD_ERR_FILE_NOTFOUND as isize,
189 Format = ll::FMOD_RESULT_FMOD_ERR_FORMAT as isize,
190 HeaderMismatch = ll::FMOD_RESULT_FMOD_ERR_HEADER_MISMATCH as isize,
191 Http = ll::FMOD_RESULT_FMOD_ERR_HTTP as isize,
192 HttpAccess = ll::FMOD_RESULT_FMOD_ERR_HTTP_ACCESS as isize,
193 HttpProxyAuth = ll::FMOD_RESULT_FMOD_ERR_HTTP_PROXY_AUTH as isize,
194 HttpServerError = ll::FMOD_RESULT_FMOD_ERR_HTTP_SERVER_ERROR as isize,
195 HttpTimeout = ll::FMOD_RESULT_FMOD_ERR_HTTP_TIMEOUT as isize,
196 Initialization = ll::FMOD_RESULT_FMOD_ERR_INITIALIZATION as isize,
197 Initialized = ll::FMOD_RESULT_FMOD_ERR_INITIALIZED as isize,
198 Internal = ll::FMOD_RESULT_FMOD_ERR_INTERNAL as isize,
199 InvalidFloat = ll::FMOD_RESULT_FMOD_ERR_INVALID_FLOAT as isize,
200 InvalidHandle = ll::FMOD_RESULT_FMOD_ERR_INVALID_HANDLE as isize,
201 InvalidParam = ll::FMOD_RESULT_FMOD_ERR_INVALID_PARAM as isize,
202 InvalidPosition = ll::FMOD_RESULT_FMOD_ERR_INVALID_POSITION as isize,
203 InvalidSpeaker = ll::FMOD_RESULT_FMOD_ERR_INVALID_SPEAKER as isize,
204 InvalidSyncpoint = ll::FMOD_RESULT_FMOD_ERR_INVALID_SYNCPOINT as isize,
205 InvalidThread = ll::FMOD_RESULT_FMOD_ERR_INVALID_THREAD as isize,
206 InvalidVector = ll::FMOD_RESULT_FMOD_ERR_INVALID_VECTOR as isize,
207 Maxaudible = ll::FMOD_RESULT_FMOD_ERR_MAXAUDIBLE as isize,
208 Memory = ll::FMOD_RESULT_FMOD_ERR_MEMORY as isize,
209 MemoryCantpoint = ll::FMOD_RESULT_FMOD_ERR_MEMORY_CANTPOINT as isize,
210 Needs3d = ll::FMOD_RESULT_FMOD_ERR_NEEDS3D as isize,
211 Needshardware = ll::FMOD_RESULT_FMOD_ERR_NEEDSHARDWARE as isize,
212 NetConnect = ll::FMOD_RESULT_FMOD_ERR_NET_CONNECT as isize,
213 NetSocketError = ll::FMOD_RESULT_FMOD_ERR_NET_SOCKET_ERROR as isize,
214 NetUrl = ll::FMOD_RESULT_FMOD_ERR_NET_URL as isize,
215 NetWouldBlock = ll::FMOD_RESULT_FMOD_ERR_NET_WOULD_BLOCK as isize,
216 Notready = ll::FMOD_RESULT_FMOD_ERR_NOTREADY as isize,
217 OutputAllocated = ll::FMOD_RESULT_FMOD_ERR_OUTPUT_ALLOCATED as isize,
218 OutputCreatebuffer = ll::FMOD_RESULT_FMOD_ERR_OUTPUT_CREATEBUFFER as isize,
219 OutputDrivercall = ll::FMOD_RESULT_FMOD_ERR_OUTPUT_DRIVERCALL as isize,
220 OutputFormat = ll::FMOD_RESULT_FMOD_ERR_OUTPUT_FORMAT as isize,
221 OutputInit = ll::FMOD_RESULT_FMOD_ERR_OUTPUT_INIT as isize,
222 OutputNodrivers = ll::FMOD_RESULT_FMOD_ERR_OUTPUT_NODRIVERS as isize,
223 Plugin = ll::FMOD_RESULT_FMOD_ERR_PLUGIN as isize,
224 PluginMissing = ll::FMOD_RESULT_FMOD_ERR_PLUGIN_MISSING as isize,
225 PluginResource = ll::FMOD_RESULT_FMOD_ERR_PLUGIN_RESOURCE as isize,
226 PluginVersion = ll::FMOD_RESULT_FMOD_ERR_PLUGIN_VERSION as isize,
227 Record = ll::FMOD_RESULT_FMOD_ERR_RECORD as isize,
228 ReverbChannelgroup = ll::FMOD_RESULT_FMOD_ERR_REVERB_CHANNELGROUP as isize,
229 ReverbInstance = ll::FMOD_RESULT_FMOD_ERR_REVERB_INSTANCE as isize,
230 Subsounds = ll::FMOD_RESULT_FMOD_ERR_SUBSOUNDS as isize,
231 SubsoundAllocated = ll::FMOD_RESULT_FMOD_ERR_SUBSOUND_ALLOCATED as isize,
232 SubsoundCantmove = ll::FMOD_RESULT_FMOD_ERR_SUBSOUND_CANTMOVE as isize,
233 Tagnotfound = ll::FMOD_RESULT_FMOD_ERR_TAGNOTFOUND as isize,
234 Toomanychannels = ll::FMOD_RESULT_FMOD_ERR_TOOMANYCHANNELS as isize,
235 Truncated = ll::FMOD_RESULT_FMOD_ERR_TRUNCATED as isize,
236 Unimplemented = ll::FMOD_RESULT_FMOD_ERR_UNIMPLEMENTED as isize,
237 Uninitialized = ll::FMOD_RESULT_FMOD_ERR_UNINITIALIZED as isize,
238 Unsupported = ll::FMOD_RESULT_FMOD_ERR_UNSUPPORTED as isize,
239 Version = ll::FMOD_RESULT_FMOD_ERR_VERSION as isize,
240 EventAlreadyLoaded = ll::FMOD_RESULT_FMOD_ERR_EVENT_ALREADY_LOADED as isize,
241 EventLiveupdateBusy = ll::FMOD_RESULT_FMOD_ERR_EVENT_LIVEUPDATE_BUSY as isize,
242 EventLiveupdateMismatch = ll::FMOD_RESULT_FMOD_ERR_EVENT_LIVEUPDATE_MISMATCH as isize,
243 EventLiveupdateTimeout = ll::FMOD_RESULT_FMOD_ERR_EVENT_LIVEUPDATE_TIMEOUT as isize,
244 EventNotfound = ll::FMOD_RESULT_FMOD_ERR_EVENT_NOTFOUND as isize,
245 StudioUninitialized = ll::FMOD_RESULT_FMOD_ERR_STUDIO_UNINITIALIZED as isize,
246 StudioNotLoaded = ll::FMOD_RESULT_FMOD_ERR_STUDIO_NOT_LOADED as isize,
247 InvalidString = ll::FMOD_RESULT_FMOD_ERR_INVALID_STRING as isize,
248 AlreadyLocked = ll::FMOD_RESULT_FMOD_ERR_ALREADY_LOCKED as isize,
249 NotLocked = ll::FMOD_RESULT_FMOD_ERR_NOT_LOCKED as isize,
250 RecordDisconnected = ll::FMOD_RESULT_FMOD_ERR_RECORD_DISCONNECTED as isize,
251 Toomanysamples = ll::FMOD_RESULT_FMOD_ERR_TOOMANYSAMPLES as isize
252}
253
254#[derive(Copy, Clone, Debug, Eq, PartialEq, FromPrimitive)]
255pub enum Plugintype {
256 Output = ll::FMOD_PLUGINTYPE_FMOD_PLUGINTYPE_OUTPUT as isize,
257 Codec = ll::FMOD_PLUGINTYPE_FMOD_PLUGINTYPE_CODEC as isize,
258 Dsp = ll::FMOD_PLUGINTYPE_FMOD_PLUGINTYPE_DSP as isize,
259 MAX = ll::FMOD_PLUGINTYPE_FMOD_PLUGINTYPE_MAX as isize
260}
261
262#[derive(Copy, Clone, Debug, Eq, PartialEq, FromPrimitive)]
263pub enum Speaker {
264 FrontLeft = ll::FMOD_SPEAKER_FMOD_SPEAKER_FRONT_LEFT as isize,
265 FrontRight = ll::FMOD_SPEAKER_FMOD_SPEAKER_FRONT_RIGHT as isize,
266 FrontCenter = ll::FMOD_SPEAKER_FMOD_SPEAKER_FRONT_CENTER as isize,
267 LowFrequency = ll::FMOD_SPEAKER_FMOD_SPEAKER_LOW_FREQUENCY as isize,
268 SurroundLeft = ll::FMOD_SPEAKER_FMOD_SPEAKER_SURROUND_LEFT as isize,
269 SurroundRight = ll::FMOD_SPEAKER_FMOD_SPEAKER_SURROUND_RIGHT as isize,
270 BackLeft = ll::FMOD_SPEAKER_FMOD_SPEAKER_BACK_LEFT as isize,
271 BackRight = ll::FMOD_SPEAKER_FMOD_SPEAKER_BACK_RIGHT as isize,
272 TopFrontLeft = ll::FMOD_SPEAKER_FMOD_SPEAKER_TOP_FRONT_LEFT as isize,
273 TopFrontRight = ll::FMOD_SPEAKER_FMOD_SPEAKER_TOP_FRONT_RIGHT as isize,
274 TopBackLeft = ll::FMOD_SPEAKER_FMOD_SPEAKER_TOP_BACK_LEFT as isize,
275 TopBackRight = ll::FMOD_SPEAKER_FMOD_SPEAKER_TOP_BACK_RIGHT as isize,
276 MAX = ll::FMOD_SPEAKER_FMOD_SPEAKER_MAX as isize
277}
278
279#[derive(Copy, Clone, Debug, Eq, PartialEq, FromPrimitive)]
280pub enum Speakermode {
281 Default = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_DEFAULT as isize,
282 Raw = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_RAW as isize,
283 Mono = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_MONO as isize,
284 Stereo = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_STEREO as isize,
285 Quad = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_QUAD as isize,
286 Surround = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_SURROUND as isize,
287 _5Point1 = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_5POINT1 as isize,
288 _7Point1 = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_7POINT1 as isize,
289 _7Point1Point4 = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_7POINT1POINT4 as isize,
290 MAX = ll::FMOD_SPEAKERMODE_FMOD_SPEAKERMODE_MAX as isize
291}
292
293impl Error {
294 #[allow(clippy::allow_attributes, clippy::unnecessary_cast)]
299 pub fn from_ll (ll : ll::FMOD_RESULT) -> Self {
300 use num_traits::FromPrimitive;
301 Self::from_u32 (ll as u32).unwrap()
302 }
303}
304
305impl Guid {
306 #[inline]
307 pub fn as_mut_ll (&mut self) -> &mut ll::FMOD_GUID {
308 debug_assert_eq!(
309 std::mem::size_of::<Self>(),
310 std::mem::size_of::<ll::FMOD_GUID>());
311 unsafe { &mut *(std::ptr::from_mut::<Guid> (self) as *mut fmod_sys::FMOD_GUID) }
312 }
313}
314
315impl ListenerAttributes {
316 #[inline]
317 pub fn from_ll (
318 pos : ll::FMOD_VECTOR,
319 vel : ll::FMOD_VECTOR,
320 forward : ll::FMOD_VECTOR,
321 up : ll::FMOD_VECTOR
322 ) -> Self {
323 let convert = |vec : ll::FMOD_VECTOR| [vec.x, vec.y, vec.z];
324 let pos = convert (pos);
325 let vel = convert (vel);
326 let forward = convert (forward);
327 let up = convert (up);
328 ListenerAttributes { pos, vel, forward, up }
329 }
330}
331
332impl Speakermode {
333 #[allow(clippy::allow_attributes, clippy::unnecessary_cast)]
338 pub fn from_ll (ll : ll::FMOD_SPEAKERMODE) -> Self {
339 use num_traits::FromPrimitive;
340 Self::from_u32 (ll as u32).unwrap()
341 }
342}
343
344impl Default for Timeunit {
345 fn default() -> Self {
346 Timeunit::empty()
347 }
348}