private void PlaySound(SoundResource sound) { // Adjust the sound back to normal settings if it is a looping sound that is already playing if ((currentPlayHandle != null) && currentPlayHandle.IsPlaying() && Looping) { AdjustSound(Loudness, PitchOffset); return; } StopSound(false); PlaySettings playSettings = (Looping ? PlaySettings.Looped : PlaySettings.PlayOnce); playSettings.DontSync = false; playSettings.Loudness = LoudnessPercentToDb(Loudness + LoudnessVariance * RandomNegOneToOne()); playSettings.PitchShift = PitchOffset + PitchVariance * RandomNegOneToOne(); if (Spatialized) { if (audio != null) { currentPlayHandle = audio.PlaySoundOnComponent(sound, playSettings); } else { currentPlayHandle = ScenePrivate.PlaySoundAtPosition(sound, ObjectPrivate.Position, playSettings); } } else { currentPlayHandle = ScenePrivate.PlaySound(sound, playSettings); } }
void setVolume(float volume) { if (DebugLogging) { Log.Write("setVolume " + volume); } if ((scenePlayHandle != null) && scenePlayHandle.IsPlaying()) { scenePlayHandle.SetLoudness(LoudnessPercentToDb(volume)); } }
public override void Init() { // Check to make sure a sound has been configured in the editor if (LoopingSound == null) { Log.Write("LoopingSoundComponentScript has no configured sound to play!"); return; } if (!ObjectPrivate.TryGetFirstComponent(out _audio)) { Log.Write("LoopingSoundComponentScript is on an object that does not have an audio emitter."); return; } ObjectPrivate.AddInteractionData addData = (ObjectPrivate.AddInteractionData)WaitFor(ObjectPrivate.AddInteraction, "Play sound", true); addData.Interaction.Subscribe((InteractionData data) => { // If not sound is playing, start one up if (_playHandle == null) { PlaySettings playSettings = PlaySettings.Looped; playSettings.Loudness = (60.0f * (Loudness / 100.0f)) - 48.0f; // Convert percentage to decibels (dB) _playHandle = _audio.PlaySoundOnComponent(LoopingSound, playSettings); } // Else if a sound is playing, stop it else { if (_playHandle.IsPlaying()) { _playHandle.Stop(); } _playHandle = null; } }); }