From 32460a257f7642b1376be4aa2262cdf2a49a5729 Mon Sep 17 00:00:00 2001 From: minenice55 Date: Sun, 20 Mar 2022 19:46:12 -0400 Subject: [PATCH 1/2] extend multisound with pitch, volume, looping, offset in seconds --- Assets/Scripts/Conductor.cs | 6 ++++++ Assets/Scripts/Util/MultiSound.cs | 18 +++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Assets/Scripts/Conductor.cs b/Assets/Scripts/Conductor.cs index 9fd63ec0..d92b874e 100644 --- a/Assets/Scripts/Conductor.cs +++ b/Assets/Scripts/Conductor.cs @@ -234,6 +234,12 @@ namespace HeavenStudio return secPerBeat * beat; } + // convert real seconds to beats + public float GetRestFromRealTime(float seconds) + { + return seconds/secPerBeat; + } + public void SetBpm(float bpm) { this.songBpm = bpm; diff --git a/Assets/Scripts/Util/MultiSound.cs b/Assets/Scripts/Util/MultiSound.cs index 09709f70..cf7db59a 100644 --- a/Assets/Scripts/Util/MultiSound.cs +++ b/Assets/Scripts/Util/MultiSound.cs @@ -17,11 +17,19 @@ namespace HeavenStudio.Util { public string name { get; set; } public float beat { get; set; } + public float pitch { get; set; } + public float volume { get; set; } + public bool looping { get; set; } + public float offset { get; set; } - public Sound(string name, float beat) + public Sound(string name, float beat, float pitch = 1f, float volume = 1f, bool looping = false, float offset = 0f) { this.name = name; this.beat = beat; + this.pitch = pitch; + this.volume = volume; + this.looping = looping; + this.offset = offset; } } @@ -47,18 +55,18 @@ namespace HeavenStudio.Util for (int i = 0; i < sounds.Count; i++) { - if (songPositionInBeats >= sounds[i].beat && index == i) + if (songPositionInBeats >= sounds[i].beat - Conductor.instance.GetRestFromRealTime(sounds[i].offset) && index == i) { if (game) - Jukebox.PlayOneShotGame(sounds[i].name, forcePlay:forcePlay); + Jukebox.PlayOneShotGame(sounds[i].name, sounds[i].beat, sounds[i].pitch, sounds[i].volume, sounds[i].looping, forcePlay); else - Jukebox.PlayOneShot(sounds[i].name); + Jukebox.PlayOneShot(sounds[i].name, sounds[i].beat, sounds[i].pitch, sounds[i].volume, sounds[i].looping); index++; } } - if (songPositionInBeats >= (sounds[sounds.Count - 1].beat)) + if (songPositionInBeats >= (sounds[sounds.Count - 1].beat - Conductor.instance.GetRestFromRealTime(sounds[sounds.Count - 1].offset))) { Delete(); } From f37f2af66524e9155be29d9915ae4835bcf70512 Mon Sep 17 00:00:00 2001 From: minenice55 Date: Sun, 20 Mar 2022 19:58:37 -0400 Subject: [PATCH 2/2] oops forgot a small thing includes example using a fan club sound --- Assets/Scripts/Games/FanClub/FanClub.cs | 8 ++++---- Assets/Scripts/Util/MultiSound.cs | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Games/FanClub/FanClub.cs b/Assets/Scripts/Games/FanClub/FanClub.cs index 39b93986..c5c43344 100644 --- a/Assets/Scripts/Games/FanClub/FanClub.cs +++ b/Assets/Scripts/Games/FanClub/FanClub.cs @@ -306,8 +306,8 @@ namespace HeavenStudio.Games if (!noSound) MultiSound.Play(new MultiSound.Sound[] { new MultiSound.Sound("fanClub/arisa_ka_jp", beat), - new MultiSound.Sound("fanClub/arisa_mo_jp", beat + 0.5f), - new MultiSound.Sound("fanClub/arisa_ne_jp", beat + 1f), + new MultiSound.Sound("fanClub/arisa_mo_jp", beat + 0.5f, offset: 0.07407407f), + new MultiSound.Sound("fanClub/arisa_ne_jp", beat + 1f, offset: 0.07407407f), }); responseToggle = true; @@ -355,8 +355,8 @@ namespace HeavenStudio.Games if (noSound) return; MultiSound.Play(new MultiSound.Sound[] { new MultiSound.Sound("fanClub/arisa_ka_jp", beat), - new MultiSound.Sound("fanClub/arisa_mo_jp", beat + 0.5f), - new MultiSound.Sound("fanClub/arisa_ne_jp", beat + 1f), + new MultiSound.Sound("fanClub/arisa_mo_jp", beat + 0.5f, offset: 0.07407407f), + new MultiSound.Sound("fanClub/arisa_ne_jp", beat + 1f, offset: 0.07407407f), }, forcePlay:true); } diff --git a/Assets/Scripts/Util/MultiSound.cs b/Assets/Scripts/Util/MultiSound.cs index cf7db59a..3b1b6cda 100644 --- a/Assets/Scripts/Util/MultiSound.cs +++ b/Assets/Scripts/Util/MultiSound.cs @@ -58,9 +58,9 @@ namespace HeavenStudio.Util if (songPositionInBeats >= sounds[i].beat - Conductor.instance.GetRestFromRealTime(sounds[i].offset) && index == i) { if (game) - Jukebox.PlayOneShotGame(sounds[i].name, sounds[i].beat, sounds[i].pitch, sounds[i].volume, sounds[i].looping, forcePlay); + Jukebox.PlayOneShotGame(sounds[i].name, sounds[i].beat - Conductor.instance.GetRestFromRealTime(sounds[i].offset), sounds[i].pitch, sounds[i].volume, sounds[i].looping, forcePlay); else - Jukebox.PlayOneShot(sounds[i].name, sounds[i].beat, sounds[i].pitch, sounds[i].volume, sounds[i].looping); + Jukebox.PlayOneShot(sounds[i].name, sounds[i].beat - Conductor.instance.GetRestFromRealTime(sounds[i].offset), sounds[i].pitch, sounds[i].volume, sounds[i].looping); index++; }