Exemple #1
0
        IEnumerator Start()
        {
            this.gameObjectName = this.gameObject.name;

            // setup the AudioSource
            var audiosrc = this.GetComponent <AudioSource>();

            audiosrc.playOnAwake = false;
            audiosrc.Stop();
            audiosrc.clip = null;

            /*
             * Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(out system);
            ERRCHECK(result, "Factory.System_Create");

            result = system.getVersion(out version);
            ERRCHECK(result, "system.getVersion");

            if (version < FMOD.VERSION.number)
            {
                var msg = string.Format("FMOD lib version {0} doesn't match header version {1}", version, FMOD.VERSION.number);

                if (this.OnError != null)
                {
                    this.OnError.Invoke(this.gameObjectName, msg);
                }

                throw new System.Exception(msg);
            }

            /*
             * System initialization
             */
            result = system.init(100, FMOD.INITFLAGS.NORMAL, System.IntPtr.Zero);
            ERRCHECK(result, "system.init");

            // wait for FMDO to catch up and pause - recordDrivers are not populated if called immediately [e.g. from Start]
            yield return(new WaitForSeconds(1f));

            if (this.recordOnStart)
            {
                StartCoroutine(this.Record());
            }

            this.ready = true;
        }
        private void Form1_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;
            int         length;

            FMOD.CREATESOUNDEXINFO exinfo = new FMOD.CREATESOUNDEXINFO();

            /*
             *  Global Settings
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = system.init(1, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            length = LoadFileIntoMemory("../../../../../examples/media/wave.mp3");

            exinfo.cbsize = Marshal.SizeOf(exinfo);
            exinfo.length = (uint)length;

            result = system.createSound(audiodata, (FMOD.MODE.HARDWARE | FMOD.MODE.OPENMEMORY), ref exinfo, ref sound);
            ERRCHECK(result);
        }
        private void RipNetStream_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }
            result = system.init(100, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            /*
             *  Bump up the file buffer size a little bit for netstreams (to account for lag).  Decode buffer is left at default.
             */
            result = system.setStreamBufferSize(128 * 1024, FMOD.TIMEUNIT.RAWBYTES);
            ERRCHECK(result);

            result = system.attachFileSystem(opencallback, closecallback, readcallback, null);
            ERRCHECK(result);
        }
Exemple #4
0
        private void PlaySound_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/drumloop.wav", FMOD.MODE.HARDWARE, ref sound1);
            ERRCHECK(result);

            result = sound1.setMode(FMOD.MODE.LOOP_OFF);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/jaguar.wav", FMOD.MODE.SOFTWARE, ref sound2);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/swish.wav", FMOD.MODE.HARDWARE, ref sound3);
            ERRCHECK(result);
        }
Exemple #5
0
            public SoundLib()
            {
                if (system != null)
                {
                    return;
                }

                FMOD.RESULT result = FMOD.Factory.System_Create(out system);
                if (ERRCHECK(result, "System_Create"))
                {
                    return;
                }

                uint version;

                result = system.getVersion(out version);
                ERRCHECK(result, "system.getVersion");
                if (version < FMOD.VERSION.number)
                {
                    Report.ReportLog("Error! Old version of FMOD " + version.ToString("X") + " detected.  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                    system.close();
                    system.release();
                    system = null;
                    return;
                }

                result = system.init(1, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
                if (ERRCHECK(result, "system.init"))
                {
                    system.close();
                    system.release();
                    system = null;
                    return;
                }
            }
        private void PlayStream_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            /*
             *  Global Settings
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = system.init(1, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/wave.mp3", (FMOD.MODE._2D | FMOD.MODE.HARDWARE | FMOD.MODE.CREATESTREAM), ref sound);
            ERRCHECK(result);
        }
Exemple #7
0
        public Media()
        {
            uint version = 0;

            FMOD.RESULT result;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref soundsystem);
            ERRCHECK(result);

            result = soundsystem.getVersion(ref version);
            ERRCHECK(result);


            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = soundsystem.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            LoadFromResource();
        }
Exemple #8
0
        private void recordtodisk_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            comboBoxOutput.Enabled = true;
            comboBoxRecord.Enabled = false;
            start.Enabled          = false;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            /*
             *  Get output modes
             */
            comboBoxOutput.Items.Add("DirectSound");
            comboBoxOutput.Items.Add("Windows Multimedia WaveOut");
            comboBoxOutput.Items.Add("ASIO");
        }
Exemple #9
0
        /// <summary>
        /// Initialize The Audio Engine
        /// </summary>
        /// <param name="NbChannel">Set Number Of Maximum Channels To Use</param>
        public void Initialize()
        {
            RESULT result;

            result = Factory.System_Create(ref system);
            if (EngineError != null)
            {
                EngineError(result);
            }

            uint version = 0;

            result = system.getVersion(ref version);
            if (EngineError != null)
            {
                EngineError(result);
            }

            if (version < VERSION.number)
            {
                throw new ApplicationException("Error! You are using an old version of FMOD " + version.ToString("X") + ". This program requires " + VERSION.number.ToString("X") + ".");
            }

            result = system.init(1, INITFLAG.NORMAL, (IntPtr)null);
            if (EngineError != null)
            {
                EngineError(result);
            }
            channelCallback = new CHANNEL_CALLBACK(OnEndMusic);
        }
Exemple #10
0
        private void Form1_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            mBrushBlack = new SolidBrush(Color.Black);
            mBrushGreen = new SolidBrush(Color.Green);
            mBrushWhite = new SolidBrush(Color.White);

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);
        }
Exemple #11
0
        private void UserCreatedSound_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;
            uint        channels = 2, frequency = 44100;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);
            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }
            result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            createsoundexinfo.cbsize            = Marshal.SizeOf(createsoundexinfo);
            createsoundexinfo.fileoffset        = 0;
            createsoundexinfo.length            = frequency * channels * 2 * 2;
            createsoundexinfo.numchannels       = (int)channels;
            createsoundexinfo.defaultfrequency  = (int)frequency;
            createsoundexinfo.format            = FMOD.SOUND_FORMAT.PCM16;
            createsoundexinfo.pcmreadcallback   = pcmreadcallback;
            createsoundexinfo.pcmsetposcallback = pcmsetposcallback;
            createsoundexinfo.dlsname           = null;
        }
Exemple #12
0
        // ========================================================================================================================================
        #region Unity lifecycle
        void Start()
        {
            this.gameObjectName = this.gameObject.name;


            result = FMOD.Factory.System_Create(out system);
            AudioStreamSupport.ERRCHECK(result, this.logLevel, this.gameObjectName, null, "FMOD.Factory.System_Create");

            result = system.getVersion(out version);
            AudioStreamSupport.ERRCHECK(result, this.logLevel, this.gameObjectName, null, "system.getVersion");

            if (version < FMOD.VERSION.number)
            {
                var msg = string.Format("FMOD lib version {0} doesn't match header version {1}", version, FMOD.VERSION.number);
                throw new System.Exception(msg);
            }

            int rate;

            FMOD.SPEAKERMODE sm;
            int sc;

            result = system.getSoftwareFormat(out rate, out sm, out sc);
            AudioStreamSupport.ERRCHECK(result, this.logLevel, this.gameObjectName, null, "system.getSoftwareFormat");

            AudioStreamSupport.LOG(LogLevel.INFO, this.logLevel, this.gameObjectName, null, "FMOD samplerate: {0}, speaker mode: {1}, num. of raw speakers {2}", rate, sm, sc);

            // TODO: evaluate maxchannels
            result = system.init(32, FMOD.INITFLAGS.NORMAL, extradriverdata);
            AudioStreamSupport.ERRCHECK(result, this.logLevel, this.gameObjectName, null, "system.init");


            this.SetOutput(this.outputDriverID);

            /* tags ERR_FILE_COULDNOTSEEK:
             *      http://stackoverflow.com/questions/7154223/streaming-mp3-from-internet-with-fmod
             *      http://www.fmod.org/docs/content/generated/FMOD_System_SetFileSystem.html
             */
            // result = system.setFileSystem(null, null, null, null, null, null, -1);
            // ERRCHECK(result, "system.setFileSystem");

            // Explicitly create the delegate object and assign it to a member so it doesn't get freed
            // by the garbage collected while it's being used
            this.pcmreadcallback   = new FMOD.SOUND_PCMREADCALLBACK(PCMReadCallback);
            this.pcmsetposcallback = new FMOD.SOUND_PCMSETPOSCALLBACK(PCMSetPosCallback);


            this.elementSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.Int16));


            // decodebuffersize samples worth of bytes will be called in read callback
            // createSound calls back, too
            this.pcmReadCallbackBuffer = new List <List <byte> >();
            this.pcmReadCallbackBuffer.Add(new List <byte>());
            this.pcmReadCallbackBuffer.Add(new List <byte>());
        }
Exemple #13
0
        private void InitSoundEngine()
        {
            uint version = 0;

            FMOD.RESULT result;

            // Create a System object and initialize.
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                throw new Exception("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
            }

            if (isPreListenSoundEngine)
            {
                system.setDriver(Big3.Hitbase.Configuration.Settings.Current.OutputDevicePreListen);
            }
            else
            {
                system.setDriver(Big3.Hitbase.Configuration.Settings.Current.OutputDevice);
            }

            switch (Big3.Hitbase.Configuration.Settings.Current.VirtualCDBufferSize)
            {
            case 0:
                system.setDSPBufferSize(100, 8);
                break;

            case 1:
                system.setDSPBufferSize(150, 8);
                break;

            case 2:
                system.setDSPBufferSize(200, 8);
                break;

            case 3:
            default:
                system.setDSPBufferSize(500, 8);
                break;
            }

            result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            /*
             *  Bump up the file buffer size a bit from the 16k default for CDDA, because it is a slower medium.
             */
            result = system.setStreamBufferSize(64 * 1024, FMOD.TIMEUNIT.RAWBYTES);
            ERRCHECK(result);
        }
        private void Form1_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/drumloop.wav", FMOD.MODE.SOFTWARE | FMOD.MODE.LOOP_NORMAL, ref sound);
            ERRCHECK(result);

            result = system.playSound(FMOD.CHANNELINDEX.FREE, sound, false, ref channel);
            ERRCHECK(result);

            /*
             *  Create DSP unit
             */

            cohar[] nameArray = new char[32];
            dspname.ToCharArray().CopyTo(nameArray, 0);

            dspdesc.name     = nameArray;
            dspdesc.channels = 0;
            dspdesc.read     = dspreadcallback;

            result = system.createDSP(ref dspdesc, ref mydsp);
            ERRCHECK(result);

            result = system.addDSP(mydsp, ref dspconnectiontemp);
            ERRCHECK(result);

            result = mydsp.setActive(true);
            ERRCHECK(result);

            result = mydsp.setBypass(true);
            ERRCHECK(result);
        }
Exemple #15
0
        private void effects_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/drumloop.wav", FMOD.MODE.SOFTWARE, ref sound);
            ERRCHECK(result);

            result = system.playSound(FMOD.CHANNELINDEX.FREE, sound, false, ref channel);
            ERRCHECK(result);

            /*
             *  Create some effects to play with.
             */
            result = system.createDSPByType(FMOD.DSP_TYPE.LOWPASS, ref dsplowpass);
            ERRCHECK(result);
            result = system.createDSPByType(FMOD.DSP_TYPE.HIGHPASS, ref dsphighpass);
            ERRCHECK(result);
            result = system.createDSPByType(FMOD.DSP_TYPE.ECHO, ref dspecho);
            ERRCHECK(result);
            result = system.createDSPByType(FMOD.DSP_TYPE.FLANGE, ref dspflange);
            ERRCHECK(result);
            result = system.createDSPByType(FMOD.DSP_TYPE.DISTORTION, ref dspdistortion);
            ERRCHECK(result);
            result = system.createDSPByType(FMOD.DSP_TYPE.CHORUS, ref dspchorus);
            ERRCHECK(result);
            result = system.createDSPByType(FMOD.DSP_TYPE.PARAMEQ, ref dspparameq);
            ERRCHECK(result);
        }
Exemple #16
0
        public void Init(ISynchronizeInvoke newInvoker)
        {
            if (!Settings.Default.AudioEngineAvail)
            {
                InitErrorCheck(FMOD.RESULT.ERR_OFF_MANUALLY);
                return;
            }

            uint version = 0;

            /* Create a System object and initialize */
            if (!InitErrorCheck(FMOD.Factory.System_Create(ref system)))
            {
                return;
            }

            if (!InitErrorCheck(system.getVersion(ref version)))
            {
                return;
            }

            if (version < FMOD.VERSION.number)
            {
                InitErrorCheck(FMOD.RESULT.ERR_VERSION);
                return;
            }

            if (!InitErrorCheck(system.init(32, FMOD.INITFLAG.NORMAL, (IntPtr)null)))
            {
                return;
            }

            isInitialized = true;
            invoker       = newInvoker;
            music         = new Music(system, invoker);
            sound         = new Sound(system, invoker);

            timer.Start();

            music.MusicEnd += new MusicEndEventHandler(music_MusicEnd);

            InfoLog.WriteInfo("Audio initialized successfully", EPrefix.AudioEngine);
        }
Exemple #17
0
        private void cdda_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            play.Enabled      = false;
            pause.Enabled     = false;
            nextTrack.Enabled = false;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = system.init(1, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            /*
             *  Bump up the file buffer size a bit from the 16k default for CDDA, because it is a slower medium.
             */
            result = system.setStreamBufferSize(64 * 1024, FMOD.TIMEUNIT.RAWBYTES);
            ERRCHECK(result);

            /*
             *  Get all drive letter and put in combo box
             */
            drives = Environment.GetLogicalDrives();

            for (int count = 0; count < drives.Length; count++)
            {
                comboBox.Items.Add(drives[count].Remove(2, 1));
            }
        }
Exemple #18
0
        public FModSounds()
        {
            Instance = this;
            FMOD.RESULT result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            uint version = 0;

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                System.Diagnostics.Trace.TraceError("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
            }

            result = system.init(32, FMOD.INITFLAGS.NORMAL, (System.IntPtr)null);
            ERRCHECK(result);

            system.createChannelGroup("channelGroup", ref channelGroup);
        }
Exemple #19
0
        private bool InitAudioEngine()
        {
            uint version = 0;

            FMOD.RESULT result;

            try
            {
                result = FMOD.Factory.System_Create(ref _fmodEngine);
                if (ERRCHECK(result))
                {
                    return(false);
                }
            }
            catch (DllNotFoundException)
            {
                errResult = FMOD.RESULT.ERR_PLUGIN_MISSING;
                errMsg    = "fmodex.dll not found";
                return(false);
            }

            result = _fmodEngine.getVersion(ref version);
            if (ERRCHECK(result))
            {
                return(false);
            }
            if (version < FMOD.VERSION.number)
            {
                errMsg += "You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".";
                return(false);
            }

            // init the FMOD engine
            result = _fmodEngine.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            if (ERRCHECK(result))
            {
                return(false);
            }

            return(true);
        }
Exemple #20
0
        // private List<Sound> m_SFXList;

        /// <summary>
        /// Class constructor.
        /// </summary>
        public SoundManager()
        {
            //Empties variable
            m_System     = null;
            m_BGM        = null;
            m_BGMChannel = null;

            //Create FMOD system
            CheckError(Factory.System_Create(ref m_System));

            //Check version
            uint Version = 0;

            CheckError(m_System.getVersion(ref Version));
            if (Version < VERSION.number)
            {
                throw new System.Exception(Global.FMODVERSION_ERROR);
            }

            //Check driver
            CheckDriver();
        }
        public FmodAudio()
        {
            uint version = 0;

            FMOD.RESULT result;

            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                throw new Exception("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
            }

            //result = system.init(40, FMOD.INITFLAG.NORMAL| FMOD.INITFLAG._3D_RIGHTHANDED, (IntPtr)null);
            result = system.init(40, FMOD.INITFLAG.NORMAL, (IntPtr)null);
            ERRCHECK(result);
            result = system.set3DSettings(1, 1, 10);
            ERRCHECK(result);
        }
Exemple #22
0
        private void MultiSpeakerOutput_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            /*
             * Choose the highest mode possible.
             * If the user doesn't have 7.1 speakers, then only the speakers they have will be audible.
             */
            system.setSpeakerMode(FMOD.SPEAKERMODE._7POINT1);
            ERRCHECK(result);

            result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/drumloop.wav", (FMOD.MODE.SOFTWARE | FMOD.MODE._2D), ref sound1);
            ERRCHECK(result);
            result = sound1.setMode(FMOD.MODE.LOOP_OFF);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/stereo.ogg", (FMOD.MODE.SOFTWARE | FMOD.MODE._2D), ref sound2);
            ERRCHECK(result);
        }
Exemple #23
0
        public static void MultiSpeakerOutput_Load()
        {
            uint version = 0;

            FMOD.RESULT result;

            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);

            if (version < FMOD.VERSION.number)
            {
                Console.WriteLine("You are using an old version of FMOD FIX DAT! - rusty");
            }

            system.setSpeakerMode(FMOD.SPEAKERMODE._7POINT1);
            ERRCHECK(result);

            result = system.init(512, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);
        }
        private void Form1_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            /*
             *   Set the source directory for all of the FMOD plugins.
             */
            result = system.setPluginPath("../../../../../api/plugins");
            ERRCHECK(result);

            /*
             *  Load up an extra plugin that is not normally used by FMOD.
             */
            uint handle = 0;

            result = system.loadPlugin("output_mp3.dll", ref handle, 0);
            if (result == FMOD.RESULT.ERR_FILE_NOTFOUND)
            {
                /*
                 *  If it isn't in the same directory, try for the plugin directory.
                 */
                result = system.loadPlugin("../../../../../examples/plugin_dev/output_mp3/output_mp3.dll", ref handle, 0);
                ERRCHECK(result);
            }

            /*
             *  Display plugins
             */
            {
                int           num  = 0;
                StringBuilder name = new StringBuilder(256);

                result = system.getNumPlugins(FMOD.PLUGINTYPE.CODEC, ref num);
                ERRCHECK(result);
                for (int count = 0; count < num; count++)
                {
                    FMOD.PLUGINTYPE plugin_type = FMOD.PLUGINTYPE.CODEC;

                    result = system.getPluginHandle(FMOD.PLUGINTYPE.CODEC, count, ref handle);
                    ERRCHECK(result);

                    result = system.getPluginInfo(handle, ref plugin_type, name, name.Capacity, ref version);
                    ERRCHECK(result);

                    codecList.Items.Add(name);
                }

                result = system.getNumPlugins(FMOD.PLUGINTYPE.DSP, ref num);
                ERRCHECK(result);
                for (int count = 0; count < num; count++)
                {
                    FMOD.PLUGINTYPE plugin_type = FMOD.PLUGINTYPE.DSP;

                    result = system.getPluginHandle(FMOD.PLUGINTYPE.DSP, count, ref handle);
                    ERRCHECK(result);

                    result = system.getPluginInfo(handle, ref plugin_type, name, name.Capacity, ref version);
                    ERRCHECK(result);

                    dspList.Items.Add(name);
                }

                result = system.getNumPlugins(FMOD.PLUGINTYPE.OUTPUT, ref num);
                ERRCHECK(result);
                for (int count = 0; count < num; count++)
                {
                    FMOD.PLUGINTYPE plugin_type = FMOD.PLUGINTYPE.OUTPUT;

                    result = system.getPluginHandle(FMOD.PLUGINTYPE.OUTPUT, count, ref handle);
                    ERRCHECK(result);

                    result = system.getPluginInfo(handle, ref plugin_type, name, name.Capacity, ref version);
                    ERRCHECK(result);

                    outputList.Items.Add(name);
                }
            }
        }
Exemple #25
0
        public bool Create(SoundSystemConfig config)
        {
            uint version    = 0;
            int  samplerate = 44100;

            FMOD.SOUND_FORMAT format = FMOD.SOUND_FORMAT.PCM16;

            FMOD.RESULT result = FMOD.Factory.System_Create(ref m_system);
            if (ERRCHECK(result, "Create") == false)
            {
                return(false);
            }

            result = m_system.getVersion(ref version);
            if (!ERRCHECK(result))
            {
                return(false);
            }

            if (version < FMOD.VERSION.number)
            {
                Console.WriteLine("INCORRECT DLL VERSION!!", "FMOD ERROR");
                return(false);
            }

            result = m_system.setDriver(config.SoundCard);
            ERRCHECK(result);

            switch (config.Output)
            {
            case RASOUNDAUSGABE.WINMM:
                m_system.setOutput(FMOD.OUTPUTTYPE.WINMM);
                break;

            case RASOUNDAUSGABE.WASAPI:
                m_system.setOutput(FMOD.OUTPUTTYPE.WASAPI);
                break;

            case RASOUNDAUSGABE.DSOUND:
                m_system.setOutput(FMOD.OUTPUTTYPE.DSOUND);
                break;

            case RASOUNDAUSGABE.ASIO:
                m_system.setOutput(FMOD.OUTPUTTYPE.ASIO);
                break;
            }
            ;
            switch (config.Format)
            {
            case RASOUNDFORMAT.PCM16_44100:
                samplerate = 44100;
                format     = FMOD.SOUND_FORMAT.PCM16;
                break;

            case RASOUNDFORMAT.PCM16_48000:
                samplerate = 48000;
                format     = FMOD.SOUND_FORMAT.PCM16;
                break;

            case RASOUNDFORMAT.PCM16_96000:
                samplerate = 96000;
                format     = FMOD.SOUND_FORMAT.PCM16;
                break;

            case RASOUNDFORMAT.PCM24_44100:
                samplerate = 44100;
                format     = FMOD.SOUND_FORMAT.PCM24;
                break;

            case RASOUNDFORMAT.PCM24_48000:
                samplerate = 48000;
                format     = FMOD.SOUND_FORMAT.PCM24;
                break;

            case RASOUNDFORMAT.PCM24_96000:
                samplerate = 96000;
                format     = FMOD.SOUND_FORMAT.PCM24;
                break;

            case RASOUNDFORMAT.PCM24_192000:
                samplerate = 192000;
                format     = FMOD.SOUND_FORMAT.PCM24;
                break;

            case RASOUNDFORMAT.PCMFLOAT_44100:
                samplerate = 44100;
                format     = FMOD.SOUND_FORMAT.PCMFLOAT;
                break;

            case RASOUNDFORMAT.PCMFLOAT_48000:
                samplerate = 48000;
                format     = FMOD.SOUND_FORMAT.PCMFLOAT;
                break;

            case RASOUNDFORMAT.PCMFLOAT_96000:
                samplerate = 96000;
                format     = FMOD.SOUND_FORMAT.PCMFLOAT;
                break;

            case RASOUNDFORMAT.PCMFLOAT_192000:
                samplerate = 192000;
                format     = FMOD.SOUND_FORMAT.PCMFLOAT;
                break;

            case RASOUNDFORMAT.PCM32_44100:
                samplerate = 44100;
                format     = FMOD.SOUND_FORMAT.PCM32;
                break;

            case RASOUNDFORMAT.PCM32_48000:
                samplerate = 48000;
                format     = FMOD.SOUND_FORMAT.PCM32;
                break;

            case RASOUNDFORMAT.PCM32_96000:
                samplerate = 96000;
                format     = FMOD.SOUND_FORMAT.PCM32;
                break;

            case RASOUNDFORMAT.PCM32_192000:
                samplerate = 192000;
                format     = FMOD.SOUND_FORMAT.PCM32;
                break;
            }
            m_system.setSoftwareFormat(samplerate, format, 0, 0, FMOD.DSP_RESAMPLER.LINEAR);

            switch (config.Channel)
            {
            case RACHANNELMODE.Mono:
                result = m_system.setSpeakerMode(FMOD.SPEAKERMODE.MONO);
                break;

            case RACHANNELMODE.Stereo:
                result = m_system.setSpeakerMode(FMOD.SPEAKERMODE.STEREO);
                break;

            case RACHANNELMODE.Quad:
                result = m_system.setSpeakerMode(FMOD.SPEAKERMODE.QUAD);
                break;

            case RACHANNELMODE.FiveDotOne:
                result = m_system.setSpeakerMode(FMOD.SPEAKERMODE._5POINT1);
                break;

            case RACHANNELMODE.SevenDotOne:
                result = m_system.setSpeakerMode(FMOD.SPEAKERMODE._7POINT1);
                break;

            case RACHANNELMODE.Surround:
                result = m_system.setSpeakerMode(FMOD.SPEAKERMODE.SURROUND);
                break;
            }
            ;
            result = m_system.init(32, FMOD.INITFLAGS._3D_RIGHTHANDED | FMOD.INITFLAGS.DTS_NEURALSURROUND, IntPtr.Zero);
            if (!ERRCHECK(result))
            {
                return(false);
            }

            m_system.set3DSettings(1.0f, 1.0f, 1.0f);

            Console.WriteLine("[FMOD] SoundSystem created");

            m_system.get3DListenerAttributes(0, ref pos, ref vel, ref forward, ref up);

            return(true);
        }
Exemple #26
0
        protected virtual IEnumerator Start()
        {
            this.gameObjectName = this.gameObject.name;

            /*
             *  Create a System object and initialize.
             */

            result = FMOD.Factory.System_Create(out system);
            ERRCHECK(result, "Factory.System_Create");

            result = system.getVersion(out version);
            ERRCHECK(result, "system.getVersion");

            if (version < FMOD.VERSION.number)
            {
                var msg = string.Format("FMOD lib version {0} doesn't match header version {1}", version, FMOD.VERSION.number);

                LOG(LogLevel.ERROR, msg);

                if (this.OnError != null)
                {
                    this.OnError.Invoke(this.gameObjectName, msg);
                }

                throw new System.Exception(msg);
            }

            /*
             * initial internal FMOD samplerate should be 48000 on desktop; we change it on the sound only when stream requests it.
             */
            result = system.setSoftwareFormat(48000, this.speakerMode, this.numOfRawSpeakers);
            ERRCHECK(result, "system.setSoftwareFormat");

            int rate;

            FMOD.SPEAKERMODE sm;
            int smch;

            result = system.getSoftwareFormat(out rate, out sm, out smch);
            ERRCHECK(result, "system.getSoftwareFormat");

            LOG(LogLevel.INFO, "FMOD samplerate: {0}, speaker mode: {1}, num. of raw speakers {2}", rate, sm, smch);

            // must be be4 init on iOS ...
            //result = system.setOutput(FMOD.OUTPUTTYPE.NOSOUND);
            //ERRCHECK(result, "system.setOutput");

            if (this is AudioStreamMinimal)
            {
                result = system.init(8, FMOD.INITFLAGS.NORMAL, extradriverdata);
            }
            else
            {
                result = system.init(8, FMOD.INITFLAGS.STREAM_FROM_UPDATE, extradriverdata);
            }
            ERRCHECK(result, "system.init");


            /* Increase the file buffer size a little bit to account for Internet lag. */
            result = system.setStreamBufferSize(streamBufferSize, FMOD.TIMEUNIT.RAWBYTES);
            ERRCHECK(result, "system.setStreamBufferSize");

            /* tags ERR_FILE_COULDNOTSEEK:
             *  http://stackoverflow.com/questions/7154223/streaming-mp3-from-internet-with-fmod
             *  http://www.fmod.org/docs/content/generated/FMOD_System_SetFileSystem.html
             */
            result = system.setFileSystem(null, null, null, null, null, null, -1);
            ERRCHECK(result, "system.setFileSystem");

            if (this.playOnStart)
            {
                this.Play();
            }

            yield return(null);

            this.ready = true;
        }
Exemple #27
0
        private void Form1_Load(object sender, System.EventArgs e)
        {
            int  count   = 0;
            uint version = 0;

            FMOD.RESULT result;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/drumloop.wav", FMOD.MODE.SOFTWARE | FMOD.MODE.LOOP_NORMAL, ref sound[0]);
            ERRCHECK(result);
            result = system.createSound("../../../../../examples/media/jaguar.wav", FMOD.MODE.SOFTWARE | FMOD.MODE.LOOP_NORMAL, ref sound[1]);
            ERRCHECK(result);
            result = system.createSound("../../../../../examples/media/c.ogg", FMOD.MODE.SOFTWARE | FMOD.MODE.LOOP_NORMAL, ref sound[2]);
            ERRCHECK(result);
            result = system.createSound("../../../../../examples/media/d.ogg", FMOD.MODE.SOFTWARE | FMOD.MODE.LOOP_NORMAL, ref sound[3]);
            ERRCHECK(result);
            result = system.createSound("../../../../../examples/media/e.ogg", FMOD.MODE.SOFTWARE | FMOD.MODE.LOOP_NORMAL, ref sound[4]);
            ERRCHECK(result);

            result = system.createChannelGroup("Group A", ref groupA);
            ERRCHECK(result);

            result = system.createChannelGroup("Group B", ref groupB);
            ERRCHECK(result);

            result = system.getMasterChannelGroup(ref masterGroup);
            ERRCHECK(result);

            result = masterGroup.addGroup(groupA);
            ERRCHECK(result);

            result = masterGroup.addGroup(groupB);
            ERRCHECK(result);

            /*
             *  Start all the sounds!
             */
            for (count = 0; count < 5; count++)
            {
                result = system.playSound(FMOD.CHANNELINDEX.FREE, sound[count], true, ref channel[count]);
                ERRCHECK(result);
                if (count < 2)
                {
                    result = channel[count].setChannelGroup(groupA);
                }
                else
                {
                    result = channel[count].setChannelGroup(groupB);
                }
                ERRCHECK(result);
                result = channel[count].setPaused(false);
                ERRCHECK(result);
            }

            /*
             *  Create the DSP effects we want to apply to our submixes.
             */
            result = system.createDSPByType(FMOD.DSP_TYPE.ECHO, ref dspecho);
            ERRCHECK(result);

            result = system.createDSPByType(FMOD.DSP_TYPE.FLANGE, ref dspflange);
            ERRCHECK(result);
            result = dspflange.setParameter((int)FMOD.DSP_FLANGE.RATE, 1.0f);
            ERRCHECK(result);

            result = system.createDSPByType(FMOD.DSP_TYPE.LOWPASS, ref dsplowpass);
            ERRCHECK(result);
            result = dsplowpass.setParameter((int)FMOD.DSP_LOWPASS.CUTOFF, 500.0f);
            ERRCHECK(result);
        }
        private void threeD_Load(object sender, System.EventArgs e)
        {
            uint version = 0;

            FMOD.RESULT result;

            trackBarPosition.Enabled = false;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);
            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            FMOD.CAPS        caps        = FMOD.CAPS.NONE;
            FMOD.SPEAKERMODE speakermode = FMOD.SPEAKERMODE.STEREO;

            int           outputrate = 0;
            StringBuilder name       = new StringBuilder(128);

            result = system.getDriverCaps(0, ref caps, ref outputrate, ref speakermode);
            ERRCHECK(result);

            result = system.setSpeakerMode(speakermode);                                         /* Set the user selected speaker mode. */
            ERRCHECK(result);

            if ((caps & FMOD.CAPS.HARDWARE_EMULATED) == FMOD.CAPS.HARDWARE_EMULATED)             /* The user has the 'Acceleration' slider set to off!  This is really bad for latency!. */
            {                                                                                    /* You might want to warn the user about this. */
                result = system.setDSPBufferSize(1024, 10);                                      /* At 48khz, the latency between issuing an fmod command and hearing it will now be about 213ms. */
                ERRCHECK(result);
            }

            FMOD.GUID guid = new FMOD.GUID();

            result = system.getDriverInfo(0, name, 256, ref guid);
            ERRCHECK(result);

            if (name.ToString().IndexOf("SigmaTel") != -1)               /* Sigmatel sound devices crackle for some reason if the format is pcm 16bit.  pcm floating point output seems to solve it. */
            {
                result = system.setSoftwareFormat(48000, FMOD.SOUND_FORMAT.PCMFLOAT, 0, 0, FMOD.DSP_RESAMPLER.LINEAR);
                ERRCHECK(result);
            }

            result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            if (result == FMOD.RESULT.ERR_OUTPUT_CREATEBUFFER)
            {
                result = system.setSpeakerMode(FMOD.SPEAKERMODE.STEREO);                             /* Ok, the speaker mode selected isn't supported by this soundcard.  Switch it back to stereo... */
                ERRCHECK(result);

                result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);                        /* Replace with whatever channel count and flags you use! */
                ERRCHECK(result);
            }

            /*
             *  Set the distance units. (meters/feet etc).
             */
            result = system.set3DSettings(1.0f, DISTANCEFACTOR, 1.0f);
            ERRCHECK(result);

            /*
             *  Load some sounds
             */
            result = system.createSound("../../../../../examples/media/drumloop.wav", (FMOD.MODE.HARDWARE | FMOD.MODE._3D), ref sound1);
            ERRCHECK(result);
            result = sound1.set3DMinMaxDistance(2.0f * DISTANCEFACTOR, 10000.0f * DISTANCEFACTOR);
            ERRCHECK(result);
            result = sound1.setMode(FMOD.MODE.LOOP_NORMAL);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/jaguar.wav", (FMOD.MODE.HARDWARE | FMOD.MODE._3D), ref sound2);
            ERRCHECK(result);
            result = sound2.set3DMinMaxDistance(2.0f * DISTANCEFACTOR, 10000.0f * DISTANCEFACTOR);
            ERRCHECK(result);
            result = sound2.setMode(FMOD.MODE.LOOP_NORMAL);
            ERRCHECK(result);

            result = system.createSound("../../../../../examples/media/swish.wav", (FMOD.MODE.HARDWARE | FMOD.MODE._2D), ref sound3);
            ERRCHECK(result);

            /*
             *  Play sounds at certain positions
             */
            {
                FMOD.VECTOR pos1 = new FMOD.VECTOR();
                pos1.x = -10.0f * DISTANCEFACTOR; pos1.y = -0.0f; pos1.z = 0.0f;

                FMOD.VECTOR vel1 = new FMOD.VECTOR();
                vel1.x = 0.0f; vel1.y = 0.0f; vel1.z = 0.0f;

                result = system.playSound(FMOD.CHANNELINDEX.FREE, sound1, true, ref channel1);
                ERRCHECK(result);
                result = channel1.set3DAttributes(ref pos1, ref vel1);
                ERRCHECK(result);
                result = channel1.setPaused(false);
                ERRCHECK(result);
            }

            {
                FMOD.VECTOR pos2 = new FMOD.VECTOR();
                pos2.x = 15.0f * DISTANCEFACTOR; pos2.y = -0.0f; pos2.z = -0.0f;

                FMOD.VECTOR vel2 = new FMOD.VECTOR();
                vel2.x = 0.0f; vel2.y = 0.0f; vel2.z = 0.0f;

                result = system.playSound(FMOD.CHANNELINDEX.FREE, sound2, true, ref channel2);
                ERRCHECK(result);
                result = channel2.set3DAttributes(ref pos2, ref vel2);
                ERRCHECK(result);
                result = channel2.setPaused(false);
                ERRCHECK(result);
            }

            lastpos.x = 0.0f;
            lastpos.y = 0.0f;
            lastpos.z = 0.0f;

            listenerpos.x = 0.0f;
            listenerpos.y = 0.0f;
            listenerpos.z = -1.0f * DISTANCEFACTOR;
        }
Exemple #29
0
        public static void PlaySound(string id)
        {
            if (!inited)
            {
                return;
            }
            if (!Properties.Settings.Default.use_sound)
            {
                return;
            }
            //if (player != null) player.StopAllSounds();
            //if (player == null) player = new ISoundEngine();
            if (sound != null)
            {
                StopSound();
            }
            if (volume == -1)
            {
                volume = Properties.Settings.Default.sound_volume;
            }
            switch (id)
            {
            case "TaxiFromGate":
                file = Application.StartupPath + "/sfx/crew2_safetyaboard.mp3";
                break;

            case "BeforeTakeoff":
                file = Application.StartupPath + "/sfx/crew_preparetakeoff.mp3";
                break;

            case "Descent":
                file = Application.StartupPath + "/sfx/crew6_descent.mp3";
                break;

            case "Landing":
                file = Application.StartupPath + "/sfx/crew7_beforelandnight.mp3";
                break;

            case "TaxiToGate":
                file = Application.StartupPath + "/sfx/crew8_aftland.mp3";
                break;
            }

            try
            {
                FMOD.RESULT result;
                uint        version = 0;

                result = FMOD.Factory.System_Create(ref system);
                ERRCHECK(result);

                result = system.getVersion(ref version);
                ERRCHECK(result);
                if (version < FMOD.VERSION.number)
                {
                    MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                }

                result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
                ERRCHECK(result);

                result = system.createSound(file, FMOD.MODE.HARDWARE, ref sound);
                ERRCHECK(result);

                result = system.playSound(FMOD.CHANNELINDEX.FREE, sound, false, ref channel);
                ERRCHECK(result);
                channel.setVolume(volume);
            }
            catch (Exception e) {
                Logger.Log("SoundFactory Error: " + e.ToString());
            }

            //player.SoundVolume = volume;
            // player.Play2D(file);
        }
Exemple #30
0
        private void Form1_Load(object sender, System.EventArgs e)
        {
            FMOD.CREATESOUNDEXINFO exinfo = new FMOD.CREATESOUNDEXINFO();
            FMOD.RESULT            result;
            uint version = 0;

            /*
             *  Create a System object and initialize.
             */
            result = FMOD.Factory.System_Create(ref system);
            ERRCHECK(result);

            result = system.getVersion(ref version);
            ERRCHECK(result);

            if (version < FMOD.VERSION.number)
            {
                MessageBox.Show("Error!  You are using an old version of FMOD " + version.ToString("X") + ".  This program requires " + FMOD.VERSION.number.ToString("X") + ".");
                Application.Exit();
            }

            result = system.init(1, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
            ERRCHECK(result);

            /*
             *  Set up the FMOD_CREATESOUNDEXINFO structure for the user stream with room for 2 subsounds. (our subsound double buffer)
             */

            exinfo.cbsize           = Marshal.SizeOf(exinfo);
            exinfo.defaultfrequency = 44100;
            exinfo.numsubsounds     = 2;
            exinfo.numchannels      = 1;
            exinfo.format           = FMOD.SOUND_FORMAT.PCM16;

            /*
             *  Create the 'parent' stream that contains the substreams.  Set it to loop so that it loops between subsound 0 and 1.
             */
            result = system.createStream("", FMOD.MODE.LOOP_NORMAL | FMOD.MODE.OPENUSER, ref exinfo, ref sound);
            ERRCHECK(result);

            /*
             *  Add 2 of our streams as children of the parent.  They should be the same format (ie mono/stereo and bitdepth) as the parent sound.
             *  When subsound 0 has finished and it is playing subsound 1, we will swap subsound 0 with a new sound, and the same for when subsound 1 has finished,
             *  causing a continual double buffered flip, which means continuous sound.
             */
            result = system.createStream(soundname[0], FMOD.MODE.DEFAULT, ref subsound[0]);
            ERRCHECK(result);

            result = system.createStream(soundname[1], FMOD.MODE.DEFAULT, ref subsound[1]);
            ERRCHECK(result);

            result = sound.setSubSound(0, subsound[0]);
            ERRCHECK(result);

            result = sound.setSubSound(1, subsound[1]);
            ERRCHECK(result);

            /*
             *  Set up the gapless sentence to contain these first 2 streams.
             */
            {
                int[] soundlist = { 0, 1 };

                result = sound.setSubSoundSentence(soundlist, 2);
                ERRCHECK(result);
            }

            subsoundid = 0;
            sentenceid = 2;     /* The next sound to be appeneded to the stream. */

            /*
             *  Play the sound.
             */

            result = system.playSound(FMOD.CHANNELINDEX.FREE, sound, false, ref channel);
            ERRCHECK(result);
        }