Exemplo n.º 1
0
        private void CheckIfDeviceChanged()
        {
            // DeviceCount cannot be called on XAudio >= 2.8 (Windows 8)
            // Maybe call DeviceCount with XAudio 2.7 and use different API for windows 8
            // http://blogs.msdn.com/b/chuckw/archive/2012/04/02/xaudio2-and-windows-8-consumer-preview.aspx
            // DeviceCount is very slow even on Windows 7 sometimes, don't know why
            if (m_deviceLost)// || m_lastDeviceCount != m_audioEngine.DeviceCount)
            {
                m_deviceLost = false;

                try
                {
                    Init();
                }
                catch (Exception ex)
                {
                    MyLog.Default.WriteLine("Exception during loading audio engine. Game continues, but without sound. Details: " + ex.ToString(), LoggingOptions.AUDIO);
                    MyLog.Default.WriteLine("Device ID: " + m_deviceDetails.DeviceID, LoggingOptions.AUDIO);
                    MyLog.Default.WriteLine("Device name: " + m_deviceDetails.DisplayName, LoggingOptions.AUDIO);
                    MyLog.Default.WriteLine("Device role: " + m_deviceDetails.Role, LoggingOptions.AUDIO);
                    MyLog.Default.WriteLine("Output format: " + m_deviceDetails.OutputFormat, LoggingOptions.AUDIO);

                    //  This exception is the only way I can know if we can play sound (e.g. if computer doesn't have sound card).
                    //  I didn't find other ways of checking it.
                    m_canPlay = false;
                }

                if (m_initParams.SimulateNoSoundCard)
                {
                    m_canPlay = false;
                }

                if (m_canPlay)
                {
                    if (m_cueBank != null)
                    {
                        m_cueBank.SetAudioEngine(m_audioEngine);
                    }
                    m_gameAudioVoice.SetVolume(m_volumeDefault);
                    m_hudAudioVoice.SetVolume(m_volumeHud);
                    m_musicAudioVoice.SetVolume(m_volumeMusic);
                    //TODO: JN reinit sounds so they play
                    m_3Dsounds.Clear();

                    if ((m_musicCue != null) && m_musicCue.IsPlaying)
                    {
                        // restarts music cue
                        m_musicCue = PlaySound(m_musicCue.CueEnum);
                        if (m_musicCue != null)
                        {
                            m_musicCue.SetOutputVoices(m_musicAudioVoiceDesc);
                        }

                        UpdateMusic(0);
                    }
                }
            }
        }
Exemplo n.º 2
0
 private void PlayMusicByTransition(MyMusicTransition transition)
 {
     m_musicCue = PlaySound(m_cueBank.GetTransitionCue(transition.TransitionEnum, transition.Category));
     if (m_musicCue != null)
     {
         m_musicCue.SetOutputVoices(m_musicAudioVoiceDesc);
         m_musicAudioVoice.SetVolume(m_volumeMusic);
     }
 }
Exemplo n.º 3
0
        public IMySourceVoice PlayTestSound(MyStringId cue)
        {
            if (cue == MyStringId.NullOrEmpty)
            {
                return(null);
            }

            MySoundData cueDefinition = m_cueBank.GetCue(cue);

            //  If this computer can't play sound, we don't create cues
            if (!m_canPlay)
            {
                return(null);
            }

            if (m_cueBank == null)
            {
                return(null);
            }

            MySourceVoice sound = m_cueBank.GetVoice(cue);

            if (sound == null)
            {
                sound = m_cueBank.GetVoice(cue, MySoundDimensions.D3);
            }
            if (sound == null)
            {
                return(null);
            }

            if (cueDefinition.PitchVariation != 0f)
            {
                float semitones = PitchVariation(cueDefinition);
                sound.FrequencyRatio = SemitonesToFrequencyRatio(semitones);
            }
            else
            {
                sound.FrequencyRatio = 1f;
            }

            float volume = cueDefinition.Volume;

            if (cueDefinition.VolumeVariation != 0f)
            {
                float variation = VolumeVariation(cueDefinition);
                volume = MathHelper.Clamp(volume + variation, 0f, 1f);
            }

            sound.SetVolume(volume);
            sound.SetOutputVoices(m_gameAudioVoiceDesc);

            //  Play the cue
            sound.Start(false);

            return(sound);
        }
Exemplo n.º 4
0
 public IMySourceVoice PlayMusicCue(MyCueId musicCue, bool overrideMusicAllowed = false)
 {
     if (!m_canPlay || (!m_musicAllowed && !overrideMusicAllowed))
         return null;
     Mute = false;
     m_musicCue = PlaySound(musicCue);
     if (m_musicCue != null)
     {
         m_musicCue.SetOutputVoices(m_musicAudioVoiceDesc);
         m_musicAudioVoice.SetVolume(m_volumeMusic);
     }
     return m_musicCue;
 }
Exemplo n.º 5
0
        public void LoadData(MyAudioInitParams initParams, ListReader<MySoundData> sounds, ListReader<MyAudioEffect> effects)
        {
            MyLog.Default.WriteLine("MyAudio.LoadData - START");
            MyLog.Default.IncreaseIndent();
            m_initParams = initParams;
            m_sounds = sounds;
            m_effects = effects;
            m_canPlay = true;
            try
            {
                if (sounds.Count > 0)
                {
                    Init();
                }
                else
                {
                    MyLog.Default.WriteLine("Unable to load audio data. Game continues, but without sound", LoggingOptions.AUDIO);
                    m_canPlay = false;
                }
            }
            catch (Exception ex)
            {
                MyLog.Default.WriteLine("Exception during loading audio engine. Game continues, but without sound. Details: " + ex.ToString(), LoggingOptions.AUDIO);
                MyLog.Default.WriteLine("Device ID: " + m_deviceDetails.DeviceID, LoggingOptions.AUDIO);
                MyLog.Default.WriteLine("Device name: " + m_deviceDetails.DisplayName, LoggingOptions.AUDIO);
                MyLog.Default.WriteLine("Device role: " + m_deviceDetails.Role, LoggingOptions.AUDIO);
                MyLog.Default.WriteLine("Output format: " + m_deviceDetails.OutputFormat, LoggingOptions.AUDIO);

                //  This exception is the only way I can know if we can play sound (e.g. if computer doesn't have sound card).
                //  I didn't find other ways of checking it.
                m_canPlay = false;
            }

            if (m_initParams.SimulateNoSoundCard)
                m_canPlay = false;

            if (m_canPlay)
            {
                m_cueBank = new MyCueBank(m_audioEngine, sounds);
                m_cueBank.UseSameSoundLimiter = m_useSameSoundLimiter;
                m_cueBank.SetSameSoundLimiter();
                m_cueBank.DisablePooling = initParams.DisablePooling;
                m_effectBank = new MyEffectBank(effects, m_audioEngine);
                m_3Dsounds = new List<IMy3DSoundEmitter>();
                m_listener = new Listener();
                m_listener.SetDefaultValues();
                m_helperEmitter = new Emitter();
                m_helperEmitter.SetDefaultValues();

                m_musicOn = true;
                m_gameSoundsOn = true;
           
                m_musicAllowed = true;

                if ((m_musicCue != null) && m_musicCue.IsPlaying)
                {
                    // restarts music cue
                    m_musicCue = PlaySound(m_musicCue.CueEnum);
                    if (m_musicCue != null)
                    {
                        m_musicCue.SetOutputVoices(m_musicAudioVoiceDesc);
                        m_musicAudioVoice.SetVolume(m_volumeMusic);
                    }

                    UpdateMusic(0);
                }
                else
                {
                    m_musicState = MyMusicState.Stopped;
                }
                m_loopMusic = true;

                m_transitionForward = false;
                m_timeFromTransitionStart = 0;

                m_soundInstancesTotal2D = 0;
                m_soundInstancesTotal3D = 0;
            }

            MyLog.Default.DecreaseIndent();
            MyLog.Default.WriteLine("MyAudio.LoadData - END");
        }
Exemplo n.º 6
0
        private void CheckIfDeviceChanged()
        {
            // DeviceCount cannot be called on XAudio >= 2.8 (Windows 8)
            // Maybe call DeviceCount with XAudio 2.7 and use different API for windows 8
            // http://blogs.msdn.com/b/chuckw/archive/2012/04/02/xaudio2-and-windows-8-consumer-preview.aspx
            // DeviceCount is very slow even on Windows 7 sometimes, don't know why
            if (m_deviceLost)// || m_lastDeviceCount != m_audioEngine.DeviceCount)
            {
                m_deviceLost = false;

                try
                {
                    Init();
                }
                catch (Exception ex)
                {
                    MyLog.Default.WriteLine("Exception during loading audio engine. Game continues, but without sound. Details: " + ex.ToString(), LoggingOptions.AUDIO);
                    MyLog.Default.WriteLine("Device ID: " + m_deviceDetails.DeviceID, LoggingOptions.AUDIO);
                    MyLog.Default.WriteLine("Device name: " + m_deviceDetails.DisplayName, LoggingOptions.AUDIO);
                    MyLog.Default.WriteLine("Device role: " + m_deviceDetails.Role, LoggingOptions.AUDIO);
                    MyLog.Default.WriteLine("Output format: " + m_deviceDetails.OutputFormat, LoggingOptions.AUDIO);

                    //  This exception is the only way I can know if we can play sound (e.g. if computer doesn't have sound card).
                    //  I didn't find other ways of checking it.
                    m_canPlay = false;
                }

                if (m_initParams.SimulateNoSoundCard)
                    m_canPlay = false;

                if (m_canPlay)
                {
                    if (m_cueBank != null)
                        m_cueBank.SetAudioEngine(m_audioEngine);
                    m_gameAudioVoice.SetVolume(m_volumeDefault);
                    m_hudAudioVoice.SetVolume(m_volumeHud);
                    m_musicAudioVoice.SetVolume(m_volumeMusic);
                    //TODO: JN reinit sounds so they play
                    m_3Dsounds.Clear();

                    if ((m_musicCue != null) && m_musicCue.IsPlaying)
                    {
                        // restarts music cue
                        m_musicCue = PlaySound(m_musicCue.CueEnum);
                        if (m_musicCue != null)
                            m_musicCue.SetOutputVoices(m_musicAudioVoiceDesc);

                        UpdateMusic(0);
                    }
                }
            }
        }
Exemplo n.º 7
0
 private void PlayMusicByTransition(MyMusicTransition transition)
 {
     if (m_cueBank != null && m_musicAllowed)
     {
         m_musicCue = PlaySound(m_cueBank.GetTransitionCue(transition.TransitionEnum, transition.Category));
         if (m_musicCue != null)
         {
             m_musicCue.SetOutputVoices(m_musicAudioVoiceDesc);
             m_musicAudioVoice.SetVolume(m_volumeMusic);
         }
     }
 }
Exemplo n.º 8
0
        public void LoadData(MyAudioInitParams initParams, ListReader <MySoundData> sounds, ListReader <MyAudioEffect> effects)
        {
            MyLog.Default.WriteLine("MyAudio.LoadData - START");
            MyLog.Default.IncreaseIndent();
            m_initParams = initParams;
            m_sounds     = sounds;
            m_effects    = effects;
            m_canPlay    = true;
            try
            {
                if (sounds.Count > 0)
                {
                    Init();
                }
                else
                {
                    MyLog.Default.WriteLine("Unable to load audio data. Game continues, but without sound", LoggingOptions.AUDIO);
                    m_canPlay = false;
                }
            }
            catch (Exception ex)
            {
                MyLog.Default.WriteLine("Exception during loading audio engine. Game continues, but without sound. Details: " + ex.ToString(), LoggingOptions.AUDIO);
                MyLog.Default.WriteLine("Device ID: " + m_deviceDetails.DeviceID, LoggingOptions.AUDIO);
                MyLog.Default.WriteLine("Device name: " + m_deviceDetails.DisplayName, LoggingOptions.AUDIO);
                MyLog.Default.WriteLine("Device role: " + m_deviceDetails.Role, LoggingOptions.AUDIO);
                MyLog.Default.WriteLine("Output format: " + m_deviceDetails.OutputFormat, LoggingOptions.AUDIO);

                //  This exception is the only way I can know if we can play sound (e.g. if computer doesn't have sound card).
                //  I didn't find other ways of checking it.
                m_canPlay = false;
            }

            if (m_initParams.SimulateNoSoundCard)
            {
                m_canPlay = false;
            }

            if (m_canPlay)
            {
                m_cueBank = new MyCueBank(m_audioEngine, sounds);
                m_cueBank.DisablePooling = initParams.DisablePooling;
                m_effectBank             = new MyEffectBank(effects, m_audioEngine);
                m_3Dsounds = new List <IMy3DSoundEmitter>();
                m_listener = new Listener();
                m_listener.SetDefaultValues();
                m_helperEmitter = new Emitter();
                m_helperEmitter.SetDefaultValues();

                //  This is reverb turned to off, so we hear sounds as they are defined in wav files
                ApplyReverb = false;

                m_musicOn      = true;
                m_gameSoundsOn = true;

                m_musicAllowed = true;

                if ((m_musicCue != null) && m_musicCue.IsPlaying)
                {
                    // restarts music cue
                    m_musicCue = PlaySound(m_musicCue.CueEnum);
                    if (m_musicCue != null)
                    {
                        m_musicCue.SetOutputVoices(m_musicAudioVoiceDesc);
                    }

                    UpdateMusic(0);
                }
                else
                {
                    m_musicState = MyMusicState.Stopped;
                }
                m_loopMusic = true;

                m_transitionForward       = false;
                m_timeFromTransitionStart = 0;

                m_soundInstancesTotal2D = 0;
                m_soundInstancesTotal3D = 0;
            }

            MyLog.Default.DecreaseIndent();
            MyLog.Default.WriteLine("MyAudio.LoadData - END");
        }