/// <summary> /// Constructor /// </summary> /// <param name="soundEffect">Sound effect</param> /// <param name="sourceVoice">Source voice</param> /// <param name="emitterDescription">Emitter description</param> /// <param name="listenerDescription">Listener description</param> /// <param name="destroyWhenFinished">Sets whether the instance must be disposed after it's finished</param> internal GameAudioEffectInstance( GameAudioEffect soundEffect, SourceVoice sourceVoice, GameAudioSourceDescription emitterDescription, GameAudioSourceDescription listenerDescription, bool destroyWhenFinished) { Effect = soundEffect; voice = sourceVoice; paused = false; IsLooped = false; volume = 1.0f; pan = 0.0f; pitch = 0.0f; outputMatrix = null; Emitter = new GameAudioEmitter(emitterDescription); Listener = new GameAudioListener(listenerDescription); voice.BufferStart += SourceVoice_BufferStart; voice.BufferEnd += SourceVoice_BufferEnd; voice.LoopEnd += SourceVoice_LoopEnd; this.destroyWhenFinished = destroyWhenFinished; }
/// <summary> /// Updates emitter state /// </summary> /// <param name="audioEmitter">Emitter state</param> private void UpdateEmitter(GameAudioEmitter audioEmitter) { if (emitter == null) { emitter = new Emitter(); } emitter.Position = audioEmitter.Position; emitter.OrientFront = audioEmitter.Forward; emitter.OrientTop = audioEmitter.Up; emitter.Velocity = audioEmitter.Velocity; emitter.ChannelCount = this.Effect.WaveFormat.Channels; emitter.ChannelRadius = 1; if (emitter.ChannelCount > 1) { emitter.ChannelAzimuths = new float[emitter.ChannelCount]; } emitter.InnerRadius = 2; emitter.InnerRadiusAngle = MathUtil.PiOverFour; emitter.VolumeCurve = GameAudioPresets.DefaultLinearCurve; emitter.LfeCurve = GameAudioPresets.DefaultEmitterLfeCurve; emitter.ReverbCurve = GameAudioPresets.DefaultEmitterReverbCurve; emitter.CurveDistanceScaler = GameAudio.DistanceScale * audioEmitter.Radius; emitter.DopplerScaler = GameAudio.DopplerScale; if (audioEmitter.Cone.HasValue) { if (emitter.Cone == null) { emitter.Cone = new Cone(); } emitter.Cone.InnerAngle = audioEmitter.Cone.Value.InnerAngle; emitter.Cone.InnerVolume = audioEmitter.Cone.Value.InnerVolume; emitter.Cone.InnerLpf = audioEmitter.Cone.Value.InnerLpf; emitter.Cone.InnerReverb = audioEmitter.Cone.Value.InnerReverb; emitter.Cone.OuterAngle = audioEmitter.Cone.Value.OuterAngle; emitter.Cone.OuterVolume = audioEmitter.Cone.Value.OuterVolume; emitter.Cone.OuterLpf = audioEmitter.Cone.Value.OuterLpf; emitter.Cone.OuterReverb = audioEmitter.Cone.Value.OuterReverb; } }