diff --git a/Assets/Scripts/Conductor.cs b/Assets/Scripts/Conductor.cs index 9fd63ec02..d92b874e4 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/Games/FanClub/FanClub.cs b/Assets/Scripts/Games/FanClub/FanClub.cs index 7d98375f9..e3c6048f0 100644 --- a/Assets/Scripts/Games/FanClub/FanClub.cs +++ b/Assets/Scripts/Games/FanClub/FanClub.cs @@ -358,8 +358,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; @@ -407,8 +407,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 09709f70f..3b1b6cda6 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 - Conductor.instance.GetRestFromRealTime(sounds[i].offset), sounds[i].pitch, sounds[i].volume, sounds[i].looping, forcePlay); else - Jukebox.PlayOneShot(sounds[i].name); + Jukebox.PlayOneShot(sounds[i].name, sounds[i].beat - Conductor.instance.GetRestFromRealTime(sounds[i].offset), 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(); }