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); } } } }
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); } }
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); }
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; }
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"); }
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); } } } }
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); } } }
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"); }