Exemple #1
0
        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);
            }
        }