Integration of Jukebox Library (#451)

* add Jukebox library

todo:
- saving / loading of new format
- inferrence of unknown data like past versions
- move the temporary float casts to proper use of double
- make sound related functions take double for timing
- inform people that the Jukebox sound player was renamed to SoundByte lol

* make sound, input scheduling, and super curve use double precision

* successfully load charts

* editor works again

v1 riqs can be saved and loaded

* first tempo and volume markers are unmovable

fix loading of charts' easing values

* use gsync / freesync

* update Jukebox refs to SoundByte

* game events use double part 1

Air Rally - Glee Club converted

* don't load song if chart load fails

* finish conversion of all minigames

* remove editor waveform toggle

* timeline now respects added song offset length

clear cache files on app close
prepped notes for dsp sync

* update timeline length when offset changed

* update to latest Jukebox

* make error panel object in global game manager

* improve conductor music scheduling

* added error message box

fix first game events sometimes not playing
This commit is contained in:
minenice55
2023-06-10 15:13:29 -04:00
committed by GitHub
parent b7afd697ce
commit bb2ae74339
176 changed files with 4868 additions and 3013 deletions

View File

@ -1,5 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Starpelly;
@ -17,8 +17,8 @@ namespace HeavenStudio.Util
public double scheduledTime;
public bool looping;
public float loopEndBeat = -1;
public float fadeTime;
public double loopEndBeat = -1;
public double fadeTime;
int loopIndex = 0;
private AudioSource audioSource;
@ -27,8 +27,8 @@ namespace HeavenStudio.Util
private double startTime;
public float beat;
public float offset;
public double beat;
public double offset;
public float scheduledPitch = 1f;
bool playInstant = false;
@ -48,7 +48,7 @@ namespace HeavenStudio.Util
audioSource.Play();
playInstant = true;
played = true;
startTime = cnd.songPositionAsDouble;
startTime = AudioSettings.dspTime;
StartCoroutine(NotRelyOnBeatSound());
}
else
@ -126,7 +126,7 @@ namespace HeavenStudio.Util
}
}
public void SetLoopParams(float endBeat, float fadeTime)
public void SetLoopParams(double endBeat, double fadeTime)
{
loopEndBeat = endBeat;
this.fadeTime = fadeTime;
@ -158,6 +158,7 @@ namespace HeavenStudio.Util
#region Bend
// All of these should only be used with rockers.
// minenice: consider doing these in the audio thread so they can work per-sample?
public void BendUp(float bendTime, float bendedPitch)
{
this.bendedPitch = bendedPitch;
@ -201,20 +202,20 @@ namespace HeavenStudio.Util
#endregion
public void KillLoop(float fadeTime)
public void KillLoop(double fadeTime)
{
StartCoroutine(FadeLoop(fadeTime));
}
float loopFadeTimer = 0f;
IEnumerator FadeLoop(float fadeTime)
IEnumerator FadeLoop(double fadeTime)
{
float startingVol = audioSource.volume;
while (loopFadeTimer < fadeTime)
{
loopFadeTimer += Time.deltaTime;
audioSource.volume = Mathf.Max((1f - (loopFadeTimer / fadeTime)) * startingVol, 0f);
audioSource.volume = (float) Math.Max((1f - (loopFadeTimer / fadeTime)) * startingVol, 0.0);
yield return null;
}