private static FMOD.RESULT FMOD_EVENT_CALLBACK(IntPtr eventraw, FMOD.EVENT_CALLBACKTYPE type, IntPtr param1, IntPtr param2, IntPtr userdata) { unsafe { switch (type) { case FMOD.EVENT_CALLBACKTYPE.SOUNDDEF_CREATE: { int entryindex = *(int *)param2.ToPointer(); // [in] (int) index of sound definition entry uint *realpointer = (uint *)param2.ToPointer(); // [out] (FMOD::Sound *) a valid lower level API FMOD Sound handle FMOD.Sound s = null; fsb.getSubSound(entryindex, ref s); *realpointer = (uint)s.getRaw().ToPointer(); break; } case FMOD.EVENT_CALLBACKTYPE.SOUNDDEF_RELEASE: { break; } } } return(FMOD.RESULT.OK); }
public void LoadAnySound(SoundResource soundResource, string fullPath) { //FMOD.MODE flags = FMOD.MODE.HARDWARE; FMOD.MODE flags = FMOD.MODE.SOFTWARE | FMOD.MODE._3D_LINEARROLLOFF; if (soundResource.Is3DSound) { flags |= FMOD.MODE._3D | FMOD.MODE._3D_IGNOREGEOMETRY; } else { flags |= FMOD.MODE._2D; } FMOD.Sound sound = new FMOD.Sound(); soundResource.SoundGlue = new FMODSound(sound); if (soundResource.IsStream) { flags = FMOD.MODE.SOFTWARE; flags |= FMOD.MODE.CREATESTREAM | FMOD.MODE.NONBLOCKING; FMOD.CREATESOUNDEXINFO createSoundExInfo = new FMOD.CREATESOUNDEXINFO(); createSoundExInfo.cbsize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(FMOD.CREATESOUNDEXINFO)); createSoundExInfo.nonblockcallback = NonBlockCallback; ERRCHECK(FMODSystem.createSound(fullPath, flags, ref createSoundExInfo, ref sound)); int index = sound.getRaw().ToInt32(); try { loadingSoundResources[index] = soundResource; } catch (IndexOutOfRangeException) { System.Diagnostics.Debugger.Break(); // please report the value of the index-variable defined above } } else { ERRCHECK(FMODSystem.createSound(fullPath, flags, ref sound)); InitiateLoadedSound(soundResource); } }