Exemplo n.º 1
0
 public static void SetVolume(int vol)
 {
     if (!inited)
     {
         return;
     }
     volume = (float)vol / 100;
     if (channel != null)
     {
         channel.setVolume(volume);
     }
 }
Exemplo n.º 2
0
        private MusicPlayer()
        {
            result = FMOD.Factory.System_Create(out FMODSystem);

            if (result != FMOD.RESULT.OK)
            {
                throw new Exception("This crap didn't work!!");
            }

            result = FMODSystem.setDSPBufferSize(1024, 10);
            result = FMODSystem.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)0);

            var info = new FMOD.CREATESOUNDEXINFO();
            var song = new FMOD.Sound();

            ChannelGroup = new FMOD.ChannelGroup();
            ChannelGroup.clearHandle();

            result = FMODSystem.createStream("rain.ogg", FMOD.MODE.DEFAULT, out song);

            result = FMODSystem.playSound(song, ChannelGroup, false, out Channel);



            bool isPlaying = false;

            Channel.isPlaying(out isPlaying);

            Channel.setVolume(1);
            Channel.setMode(FMOD.MODE.LOOP_NORMAL);
            Channel.setLoopCount(-1);

            int t = 1;
        }
Exemplo n.º 3
0
 public void UpdateVolume(float volume)
 {
     if (MusicChannel != null)
     {
         MusicChannel.setVolume(volume);
     }
 }
Exemplo n.º 4
0
 /// <summary>
 /// volume은 0 ~ 1
 /// </summary>
 public static void Play(int index, float volume)
 {
     FMOD.Channel channel = null;
     sys.playSound(FMOD.CHANNELINDEX.FREE, sounds[index], true, ref channel);
     channel.setVolume(volume);
     channel.setPaused(false);
 }
Exemplo n.º 5
0
        /**
         * adapt a running sample according to renderparams and canvas result
         */
        internal void AdaptChannelSettings(FMOD.Channel channel, RenderParams rp, RenderCanvas canvas)
        {
            double a = rp.Ampl * canvas.AmplMultiply + canvas.AmplAdd;
            double p = rp.Pan + canvas.Pan;

            channel.setVolume((float)a);
            channel.setPan((float)p);
        }
Exemplo n.º 6
0
        public void PlayInnerSound(SoundType type)
        {
            FMOD.RESULT result;
            FMOD.Sound  sound = GetSound(type);
            if (sound != null)
            {
                result = soundsystem.playSound(FMOD.CHANNELINDEX.FREE, sound, false, ref channel);
                ERRCHECK(result);

                if (type == SoundType.ST_level1 || type == SoundType.ST_level2)
                {
                    channel.setVolume(1f);
                }
                else
                {
                    channel.setVolume(0.15f);
                }
            }
        }
Exemplo n.º 7
0
        public About()
        {
            img = Properties.Resources.nfo;
            img.MakeTransparent(Color.Black);

            InitializeComponent();

            exInfo.cbsize = Marshal.SizeOf(exInfo);
            exInfo.length = (uint)Properties.Resources.teh.Length;

            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            SetStyle(ControlStyles.Opaque, true);
            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

            int step = 5;

            Color color = Color.FromArgb(255, 0, 0);

            customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Green, ChangeEnum.Higher, color, step));

            color = Color.FromArgb(255, 255, 0);
            customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Red, ChangeEnum.Lower, color, step));

            color = Color.FromArgb(0, 255, 0);
            customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Blue, ChangeEnum.Higher, color, step));

            color = Color.FromArgb(0, 255, 255);
            customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Green, ChangeEnum.Lower, color, step));

            color = Color.FromArgb(0, 0, 255);
            customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Red, ChangeEnum.Higher, color, step));

            color = Color.FromArgb(255, 0, 255);
            customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Blue, ChangeEnum.Lower, color, step));

            DoubleBuffered = true;

            this.Width = img.Width;
            y          = -this.Height;

            FMOD.Factory.System_Create(ref soundSystem);

            soundSystem.init(32, FMOD.INITFLAG.NORMAL | FMOD.INITFLAG.WASAPI_EXCLUSIVE, IntPtr.Zero);
            soundSystem.createSound(Properties.Resources.teh, FMOD.MODE.SOFTWARE | FMOD.MODE._2D | FMOD.MODE.OPENMEMORY | FMOD.MODE.ACCURATETIME | FMOD.MODE.LOOP_NORMAL, ref exInfo, ref sound);
            soundSystem.playSound(FMOD.CHANNELINDEX.REUSE, sound, false, ref soundChannel);

            soundChannel.setVolume(.75f);

            tmr.Interval = 25;
            tmr.Tick    += new EventHandler(tmr_Tick);

            tmr.Start();
        }
 public void setVolume(float vol)
 {
     if (_channel != null)
     {
         FMOD.RESULT result;
         result = _channel.setVolume(vol / 100.0f);
         if (result != FMOD.RESULT.OK)
         {
             Console.WriteLine("[SpeakerComponent setVolume] FMOD setVolume failed : " + result);
         }
     }
 }
Exemplo n.º 9
0
        public static void StartMusic(int n)
        {
            if (SoundChannel != null)
            {
                SoundChannel.stop();
            }

            SoundSystem.playSound(FMOD.CHANNELINDEX.FREE, tunes[n], false, ref SoundChannel);
            SoundChannel.setVolume(0.5f);

            tuneIndex = n;
        }
Exemplo n.º 10
0
 public override void UpdateVolume()
 {
     //设置音量后,只有已载入文件的channel才去实际设置音量,否则仅设置音量数值
     if (this.文件已载入 && m_FMODChannel != null)
     {
         float fVolumeAll = m_fVolumeMult * m_HostPlayer.音量倍率;
         if (m_HostPlayer.静音)
         {
             fVolumeAll = 0;
         }
         m_FMODChannel.setVolume(fVolumeAll);
     }
 }
Exemplo n.º 11
0
        private void comboBoxRecord_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            FMOD.CREATESOUNDEXINFO exinfo = new FMOD.CREATESOUNDEXINFO();
            FMOD.RESULT            result;
            FMOD.DSP_RESAMPLER     resampler = FMOD.DSP_RESAMPLER.MAX;
            int selected = comboBoxRecord.SelectedIndex;
            int temp     = 0;

            FMOD.SOUND_FORMAT format = FMOD.SOUND_FORMAT.NONE;

            result = system.setSoftwareFormat(OUTPUTRATE, FMOD.SOUND_FORMAT.PCM16, 1, 0, 0);
            ERRCHECK(result);

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

            result = system.getSoftwareFormat(ref outputfreq, ref format, ref temp, ref temp, ref resampler, ref temp);
            ERRCHECK(result);

            /*
             *  Create a sound to record to.
             */
            exinfo.cbsize           = Marshal.SizeOf(exinfo);
            exinfo.numchannels      = 1;
            exinfo.format           = FMOD.SOUND_FORMAT.PCM16;
            exinfo.defaultfrequency = OUTPUTRATE;
            exinfo.length           = (uint)(exinfo.defaultfrequency * 2 * exinfo.numchannels * 5);

            result = system.createSound((string)null, (FMOD.MODE._2D | FMOD.MODE.SOFTWARE | FMOD.MODE.LOOP_NORMAL | FMOD.MODE.OPENUSER), ref exinfo, ref sound);
            ERRCHECK(result);

            comboBoxOutput.Enabled   = false;
            comboBoxPlayback.Enabled = false;
            comboBoxRecord.Enabled   = false;

            /*
             *  Start recording
             */
            result = system.recordStart(selected, sound, true);
            ERRCHECK(result);

            Thread.Sleep(200);      /* Give it some time to record something */

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

            /* Dont hear what is being recorded otherwise it will feedback.  Spectrum analysis is done before volume scaling in the DSP chain */
            result = channel.setVolume(0);
            ERRCHECK(result);
        }
Exemplo n.º 12
0
        private bool PlaySound(FMOD.Sound sound)
        {
            try
            {
                FMOD.Channel channel = null;
                FMOD.RESULT  result  = system.playSound(FMOD.CHANNELINDEX.FREE, sound, true, ref channel);
                if (result == FMOD.RESULT.OK && channel != null)
                {
                    channel.setVolume(volume);
                    channel.setPaused(false);
                }

                return(FMOD.ERROR.ERRCHECK(result));
            }
            catch
            { return(false); }
        }
Exemplo n.º 13
0
        private bool PlayMusicCallback(FMOD.Sound sound)
        {
            FMOD.RESULT result;

            lock (syncMusicCallback)
            {
                bool isPlaying = false;
                manualMusicEnd = false;

                if (channel != null)
                {
                    channel.isPlaying(ref isPlaying);
                }
                else
                {
                    isPlaying = false;
                }

                if (isPlaying && channel != null)
                {
                    manualMusicEnd = true;
                    InfoLog.WriteInfo(DateTime.Now.ToString() + "   | Music is playing, Manual music end: " + manualMusicEnd, EPrefix.AudioEngine);
                    channel.setMute(true);
                    channel.stop();
                    channel = null;
                }
                else
                {
                    InfoLog.WriteInfo(DateTime.Now.ToString() + "   | Music is not playing, Manual music end: " + manualMusicEnd, EPrefix.AudioEngine);
                }

                result = system.playSound(FMOD.CHANNELINDEX.REUSE, sound, true, ref channel);
                if (result == FMOD.RESULT.OK && channel != null)
                {
                    channel.setVolume(volume);
                    channel.setCallback(FMOD.CHANNEL_CALLBACKTYPE.END, endPlayCallback, 0);
                    InfoLog.WriteInfo(DateTime.Now.ToString() + "   | Before Play music begin", EPrefix.AudioEngine);
                    channel.setPaused(false);
                }
            }

            InfoLog.WriteInfo(DateTime.Now.ToString() + "   | After Play music begin, result: " + result, EPrefix.AudioEngine);

            return(FMOD.ERROR.ERRCHECK(result));
        }
Exemplo n.º 14
0
        public void PlaySound()
        {
            bool state = true;

            while (state)
            {
                FMOD.OPENSTATE openstate       = 0;
                uint           percentbuffered = 0;
                bool           starving        = false;
                bool           busy            = false;
                FMOD.RESULT    result          = sounds.getOpenState(ref openstate, ref percentbuffered, ref starving, ref busy);
                ErrorCheck(result);

                if (openstate == FMOD.OPENSTATE.READY && channels == null)
                {
                    result = system.playSound(FMOD.CHANNELINDEX.FREE, sounds, false, ref channels);
                    ErrorCheck(result);
                    channels.setVolume(0.0f);
                    state = false;
                }
            }
        }
Exemplo n.º 15
0
        private void sineWave_Click(object sender, System.EventArgs e)
        {
            FMOD.RESULT result;
            float       pan = 0, frequency = 0;

            if (channel != null)
            {
                channel.stop();
            }

            if (dsp != null)
            {
                dsp.release();
            }

            /*
             *  Create an oscillator DSP unit for the tone.
             */
            result = system.createDSPByType(FMOD.DSP_TYPE.OSCILLATOR, ref dsp);
            ERRCHECK(result);
            result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.RATE, 440.0f);       /* musical note 'A' */
            ERRCHECK(result);

            result = system.playDSP(FMOD.CHANNELINDEX.REUSE, dsp, true, ref channel);
            ERRCHECK(result);
            channel.setVolume(0.5f);
            result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.TYPE, 0);
            ERRCHECK(result);
            channel.setPaused(false);

            channel.getFrequency(ref frequency);
            channel.getPan(ref pan);

            trackBarVolume.Value    = 512;
            trackBarFrequency.Value = (int)frequency;
            trackBarPan.Value       = (int)(pan * 512);
        }
Exemplo n.º 16
0
        /// <summary>
        /// 播放
        /// </summary>
        public void play()
        {
            //mciSendString("close all", "", 0, 0);
            //mciSendString("open \"" + FilePath + "\" alias media", "", 0, 0);
            //mciSendString("play media", "", 0, 0);

            try {
                //if(fmodSystem != null) {
                //	stop();
                //}

                FMOD.RESULT fmodResult;
                if (fmodSystem == null)
                {
                    // 1.创建System实例
                    fmodResult = FMOD.Factory.System_Create(out fmodSystem);
                    if (fmodResult != FMOD.RESULT.OK)
                    {
                        Debug.WriteLine(FMOD.Error.String(fmodResult));
                        return;
                    }
                    // 2.初始化System
                    fmodResult = fmodSystem.init(32, FMOD.INITFLAGS.NORMAL, IntPtr.Zero);
                    if (fmodResult != FMOD.RESULT.OK)
                    {
                        Debug.WriteLine(FMOD.Error.String(fmodResult));
                        return;
                    }
                }

                //FMOD.Sound soundEffect; // 音效
                //FMOD.Sound backgroundMusic; // 背景音乐
                // 3.创建声音资源

                // 使用createSound创建音效 创建音效要用MODE.LOOP_OFF关闭循环播放(默认循环开启) out 一个Sound实例
                // createSound用来创建比较短不占用空间的音效,例如游戏中的攻击音效,可以在多个通道同时播放
                //fmodResult = fmodSystem.createSound("test.wav", FMOD.MODE.LOOP_OFF, out soundEffect);
                //if(fmodResult != FMOD.RESULT.OK) {
                //	Debug.WriteLine(FMOD.Error.String(fmodResult));
                //	return;
                //}

                // 使用createStream创建背景音乐 提供文件名 创建BGM可以默认开启循环 out 一个Sound实例
                // createStream用来创建比较长的声音,需要不停加载数据 例如游戏中的背景音乐,stream只能在一个通道播放
                fmodResult = fmodSystem.createStream(path, FMOD.MODE.LOOP_NORMAL, out backgroundMusic);
                if (fmodResult != FMOD.RESULT.OK)
                {
                    Debug.WriteLine(FMOD.Error.String(fmodResult));
                    return;
                }

                //FMOD.Channel channelEffect; // 音效的播放通道
                // 播放音乐 提供Sound 通道组我们没有 开始时是否暂停 是 out 当前声音的播放通道
                fmodSystem.playSound(backgroundMusic, null, false, out channelMusic);
                // 暂停来设置音量 0.0 - 1.0
                channelMusic.setVolume(volume);
                // 恢复播放
                //channelMusic.setPaused(false);
                // 按下ESC退出播放
                //while(Console.ReadKey().Key != ConsoleKey.Escape) {
                //	// 按下空格播放音效
                //	if(Console.ReadKey().Key == ConsoleKey.Spacebar)
                //		fmodSystem.playSound(soundEffect, null, false, out channelEffect);
                //}
                // 最后释放所有资源 可以代替.close();
                //fmodSystem.release();
            } catch (Exception ex) {
                Debug.WriteLine("aa:" + ex.ToString());
            }
        }
Exemplo n.º 17
0
        public static void Play(string key, int speaker, float volume = 1f, bool loop = false)
        {
            #if NO_AUDIO
            return;
            #endif


            // play audio
            FMOD.RESULT result = system.playSound(FMOD.CHANNELINDEX.FREE, sounds[key], true, ref channel);
            ERRCHECK(result);

            result = channel.setVolume(volume);
            ERRCHECK(result);

            int index = 0;
            channel.getIndex(ref index);
            channelIDs.Add(index);


            FMOD.MODE loopAudio = (loop) ? FMOD.MODE.LOOP_NORMAL : FMOD.MODE.LOOP_OFF;
            result = channel.setMode(loopAudio);

            //SPEAKER 1 (Satelite Audio, Side Specific)
            if (speaker == 0)
            {
                result = channel.setSpeakerMix(0, 0, 0, 0, 0, 0, 1.0f, 0);
                ERRCHECK(result);
            }

            //SPEAKER 2 (Satelite Audio, Side Specific)
            if (speaker == 1)
            {
                result = channel.setSpeakerMix(0, 0, 0, 0, 0, 0, 0, 1.0f);
                ERRCHECK(result);
            }

            //SPEAKER 3 (Satelite Audio, Side Specific)
            if (speaker == 2)
            {
                result = channel.setSpeakerMix(0, 0, 0, 0, 1.0f, 0, 0, 0);
                ERRCHECK(result);
            }

            //SPEAKER (Satelite Audio, Side Specific)
            if (speaker == 3)
            {
                result = channel.setSpeakerMix(0, 0, 0, 0, 0, 1.0f, 0, 0);
                ERRCHECK(result);
            }

            //SPEAKER 5 (Subwoofer)
            if (speaker == 4)
            {
                result = channel.setSpeakerMix(0, 0, 1.0f, 0, 0, 0, 0, 0);
                ERRCHECK(result);
            }

            if (isMuted)
            {
                channel.setMute(isMuted);
            }

            result = channel.setPaused(false);

            ERRCHECK(result);
        }
Exemplo n.º 18
0
        public static void Update(GameTime gameTime)
        {
            system.update();
            if (IsSongPlaying())
            {
                uint length   = 0;
                uint position = 0;
                CurrentSong.getLength(out length, FMOD.TIMEUNIT.MS);
                Channel.getPosition(out position, FMOD.TIMEUNIT.MS);
                if (position == length)
                {
                    NextSongEvent.Invoke();
                }



                // BPM Method 1 (More research)
                #region Update System & FFT Algorithm

                if (FFTEnabled)
                {
                    // Perform a Fast Fourier Transform

                    int    windowSize = spectrum.Length; //Samples.
                    IntPtr data;
                    uint   fft_length;
                    //hanning bpm
                    MyDSP.setParameterInt((int)FMOD.DSP_FFT.WINDOWTYPE, (int)FMOD.DSP_FFT_WINDOW.HAMMING);
                    MyDSP.setParameterInt((int)FMOD.DSP_FFT.WINDOWSIZE, windowSize);
                    MyDSP.getParameterData((int)FMOD.DSP_FFT.SPECTRUMDATA, out data, out fft_length);
                    MyDSP.getParameterFloat((int)FMOD.DSP_FFT.DOMINANT_FREQ, out higher_freq);
                    fftParameter = (FMOD.DSP_PARAMETER_FFT)Marshal.PtrToStructure(data, typeof(FMOD.DSP_PARAMETER_FFT));

                    #region BPMDetection

                    if (fftParameter.spectrum.Length != 0)
                    {
                        for (int i = 0; i < windowSize; i++)
                        {
                            if (fftParameter.spectrum.Length == 2)
                            {
                                spectrum[i] = (fftParameter.spectrum[0][i] + fftParameter.spectrum[1][i]) / 2f;
                            }
                        }
                    }
                    previousSpectrum = spectrum;
                    #endregion
                }
                #endregion

                // BPM Method 2 (Working! but with small sync bugs)

                float bps = (60f / BPM);
                bpm_elapsed += (float)gameTime.ElapsedGameTime.TotalSeconds;

                if (bpm_elapsed > bps)
                {
                    gotBeat       = true;
                    offBeatDelay += (float)gameTime.ElapsedGameTime.TotalSeconds;
                    if (offBeatDelay > bps)
                    {
                        gotBeat      = false;
                        bpm_elapsed  = 0f;
                        offBeatDelay = 0f;
                    }
                }
            }
            Channel.setVolume(masterVolume * musicVolume);
        }
Exemplo n.º 19
0
        public static bool Play(string strRootPath, SoundItemProperty prop)
        {
            FMOD.RESULT result;

            if (channel != null)
            {
                channel.stop();
            }

            string name = strRootPath + prop.FileName;

            FMOD.MODE mode = FMOD.MODE.DEFAULT;
            if (prop.Type == SoundItemProperty.typeSound[0])
            {
                mode |= FMOD.MODE._2D | FMOD.MODE.CREATESAMPLE | FMOD.MODE.SOFTWARE;
            }
            else if (prop.Type == SoundItemProperty.typeSound[1])
            {
                mode |= FMOD.MODE._3D | FMOD.MODE.CREATESAMPLE | FMOD.MODE.SOFTWARE | FMOD.MODE._3D_LINEARROLLOFF | FMOD.MODE._3D_WORLDRELATIVE | FMOD.MODE._3D_IGNOREGEOMETRY;
            }
            else if (prop.Type == SoundItemProperty.typeSound[2])
            {
                mode |= FMOD.MODE._2D | FMOD.MODE.CREATESTREAM | FMOD.MODE.SOFTWARE;
            }

            if (prop.Loop == true)
            {
                mode |= FMOD.MODE.LOOP_NORMAL;
            }

            result = system.createSound(name, mode, ref sound);
            ERRCHECK(result);

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

            if (prop.Type == SoundItemProperty.typeSound[1])
            {
                channel.set3DMinMaxDistance(100.0f, prop.MaxDistance);

                FMOD.VECTOR pos = new FMOD.VECTOR();
                pos.x = 0.0f; pos.y = 0.0f; pos.z = 0.0f;
                FMOD.VECTOR vel = new FMOD.VECTOR();
                vel.x = 0.0f; vel.y = 0.0f; vel.z = 0.0f;
                channel.set3DAttributes(ref pos, ref vel);

                FMOD.DSP dsp = null;
                result = system.createDSPByType(FMOD.DSP_TYPE.LOWPASS_SIMPLE, ref dsp);
                ERRCHECK(result);

                dsp.setParameter((int)FMOD.DSP_LOWPASS_SIMPLE.CUTOFF, 22000.0f);
                FMOD.DSPConnection dspcon = null;
                channel.addDSP(dsp, ref dspcon);
            }

            channel.setVolume((float)prop.Volume * 0.01f);
            channel.setCallback(CHANNELCALLBACK);
            channel.setPaused(false);

            return(true);
        }