public MyInMemoryWave GetRandomWave(MyObjectBuilder_CueDefinition cue) { int randomIndex = MyVRageUtils.GetRandomInt(cue.Waves.Length); string waveToPlay = cue.Waves[randomIndex]; MyInMemoryWave wave = m_waveBank.GetWave(waveToPlay); if (wave == null) { return(null); } return(wave); }
public bool Add(MyObjectBuilder_CueDefinition cue, string waveFilename) { string filename = Path.Combine(MyAudio.AudioPath, waveFilename); bool result = File.Exists(filename); if (result) { MyInMemoryWave wave = new MyInMemoryWave(cue, filename); m_waves[waveFilename] = wave; } else { MySandboxGame.Log.WriteLine(string.Format("Unable to find audio file: {0}", filename), LoggingOptions.AUDIO); } return result; }
public bool Add(MyObjectBuilder_CueDefinition cue, string waveFilename) { string filename = Path.Combine(MyAudio.AudioPath, waveFilename); bool result = File.Exists(filename); if (result) { MyInMemoryWave wave = new MyInMemoryWave(cue, filename); m_waves[waveFilename] = wave; } else { MySandboxGame.Log.WriteLine(string.Format("Unable to find audio file: {0}", filename), LoggingOptions.AUDIO); } return(result); }
public MyInMemoryWave(MyObjectBuilder_CueDefinition cue, string filename) { m_stream = new SoundStream(File.OpenRead(filename)); m_waveFormat = m_stream.Format; m_buffer = new AudioBuffer { Stream = m_stream.ToDataStream(), AudioBytes = (int)m_stream.Length, Flags = BufferFlags.None }; if (cue.Loopable) m_buffer.LoopCount = AudioBuffer.LoopInfinite; m_stream.Close(); }
public MyInMemoryWave(MyObjectBuilder_CueDefinition cue, string filename) { m_stream = new SoundStream(File.OpenRead(filename)); m_waveFormat = m_stream.Format; m_buffer = new AudioBuffer { Stream = m_stream.ToDataStream(), AudioBytes = (int)m_stream.Length, Flags = BufferFlags.None }; if (cue.Loopable) { m_buffer.LoopCount = AudioBuffer.LoopInfinite; } m_stream.Close(); }
public MySourceVoice GetVoice(MySoundCuesEnum cueEnum) { MyObjectBuilder_CueDefinition cue = GetCue(cueEnum); if ((cue == null) || (cue.Waves == null) || (cue.Waves.Length == 0)) { return(null); } MyInMemoryWave wave = GetRandomWave(cue); if (wave == null) { return(null); } MyWaveFormat myWaveFormat = new MyWaveFormat() { Encoding = wave.WaveFormat.Encoding, Channels = wave.WaveFormat.Channels, SampleRate = wave.WaveFormat.SampleRate, WaveFormat = wave.WaveFormat }; MySourceVoice voice = m_voicePools[myWaveFormat].NextAvailable(); if (voice == null) { return(null); } voice.SubmitSourceBuffer(cueEnum, wave.Buffer, wave.Stream.DecodedPacketsInfo, wave.WaveFormat.SampleRate); if (m_applyReverb) { voice.Voice.SetEffectChain(m_effectDescriptor); voice.Voice.EnableEffect(0); } else { voice.Voice.SetEffectChain(null); } return(voice); }
public bool IsPlayingHudSounds() { var list = m_playingVoices.ToArray(); foreach (var voice in list) { if (voice == null) { continue; } MyObjectBuilder_CueDefinition cue = m_owner.GetCue(voice.CueEnum); if (cue.IsHudCue) { return(true); } } return(false); }
/// <summary> /// Updates emitter position, forward, up and velocity /// </summary> public static void UpdateValues(this Emitter emitter, Vector3 position, Vector3 forward, Vector3 up, Vector3 velocity, MyObjectBuilder_CueDefinition cue, int channelsCount) { emitter.Position = SharpDXHelper.ToSharpDX(position); emitter.OrientFront = SharpDXHelper.ToSharpDX(forward); emitter.OrientTop = SharpDXHelper.ToSharpDX(up); emitter.Velocity = SharpDXHelper.ToSharpDX(velocity); emitter.DopplerScaler = 1f; emitter.CurveDistanceScaler = cue.MaxDistance; if (m_currVolumeCurve != cue.VolumeCurve) { emitter.VolumeCurve = m_curves[(int)cue.VolumeCurve]; m_currVolumeCurve = cue.VolumeCurve; } emitter.InnerRadius = (channelsCount > 2) ? cue.MaxDistance : 0f; emitter.InnerRadiusAngle = (channelsCount > 2) ? 0.5f * SharpDX.AngleSingle.RightAngle.Radians : 0f; }
private static float PitchVariation(MyObjectBuilder_CueDefinition cue) { return MyVRageUtils.GetRandomFloat(-1f, 1f) * cue.PitchVariation / 100f; }
private static float VolumeVariation(MyObjectBuilder_CueDefinition cue) { return MyVRageUtils.GetRandomFloat(-1f, 1f) * cue.VolumeVariation * 0.07f; }
private static MySourceVoice TrySwitchToCue2D(IMy3DSoundEmitter source, MyObjectBuilder_CueDefinition cue3D) { MyEntity entity = source.Entity; MyEntity owner = source.OwnedBy; MyEntity parent = (owner != null) ? owner.Parent : null; bool isControlledObject = (entity == MySession.ControlledObject) || (owner == MySession.ControlledObject) || (parent == MySession.ControlledObject); if ((MyGuiScreenTerminal.IsOpen && (MyGuiScreenTerminal.Interacted == entity)) || (isControlledObject && (cue3D.Alternative2D != string.Empty))) { try { MySoundCuesEnum cueEnum = (MySoundCuesEnum)Enum.Parse(typeof(MySoundCuesEnum), cue3D.Alternative2D); MyObjectBuilder_CueDefinition cue2D = m_cueBank.GetCue(cueEnum); float volume = cue2D.Volume; if (cue2D.VolumeVariation != 0f) { float variation = VolumeVariation(cue2D); volume = MathHelper.Clamp(volume + variation, 0f, 1f); } if (m_3Dsounds.Contains(source)) StopUpdating3DCue(source); return PlayCue2DInternal(cueEnum, volume); } catch (Exception) { return null; } } return null; }