示例#1
0
        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;
 }
示例#3
0
        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();
        }
示例#5
0
        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();
        }
示例#6
0
        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);
        }
示例#8
0
        /// <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;
        }
        /// <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;
        }
示例#10
0
 private static float PitchVariation(MyObjectBuilder_CueDefinition cue)
 {
     return MyVRageUtils.GetRandomFloat(-1f, 1f) * cue.PitchVariation / 100f;
 }
示例#11
0
 private static float VolumeVariation(MyObjectBuilder_CueDefinition cue)
 {
     return MyVRageUtils.GetRandomFloat(-1f, 1f) * cue.VolumeVariation * 0.07f;
 }
示例#12
0
        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;
        }