diff --git a/source/funkin/ui/debug/charting/ChartEditorState.hx b/source/funkin/ui/debug/charting/ChartEditorState.hx index ea1d21c97b1..51bbe8f0d9c 100644 --- a/source/funkin/ui/debug/charting/ChartEditorState.hx +++ b/source/funkin/ui/debug/charting/ChartEditorState.hx @@ -5673,7 +5673,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState var startTimestamp:Float = 0; if (playtestStartTime) startTimestamp = scrollPositionInMs + playheadPositionInMs; - var playbackRate:Float = ((menubarItemPlaybackSpeed.value ?? 1.0) * 2.0) / 100.0; + var playbackRate:Float = ((menubarItemPlaybackSpeed.value / 100.0) ?? 0.5) * 2.0; playbackRate = Math.floor(playbackRate / 0.05) * 0.05; // Round to nearest 5% playbackRate = Math.max(0.05, Math.min(2.0, playbackRate)); // Clamp to 5% to 200% @@ -6144,20 +6144,30 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState fadeInWelcomeMusic(WELCOME_MUSIC_FADE_IN_DELAY, WELCOME_MUSIC_FADE_IN_DURATION); - // Reapply the volume. - var instTargetVolume:Float = menubarItemVolumeInstrumental.value ?? 1.0; - var vocalPlayerTargetVolume:Float = menubarItemVolumeVocalsPlayer.value ?? 1.0; - var vocalOpponentTargetVolume:Float = menubarItemVolumeVocalsOpponent.value ?? 1.0; + // Reapply the volume and playback rate. + var instTargetVolume:Float = (menubarItemVolumeInstrumental.value / 100.0) ?? 1.0; + var vocalPlayerTargetVolume:Float = (menubarItemVolumeVocalsPlayer.value / 100.0) ?? 1.0; + var vocalOpponentTargetVolume:Float = (menubarItemVolumeVocalsOpponent.value / 100.0) ?? 1.0; + + var playbackRate = ((menubarItemPlaybackSpeed.value / 100.0) ?? 0.5) * 2.0; + playbackRate = Math.floor(playbackRate / 0.05) * 0.05; // Round to nearest 5% + playbackRate = Math.max(0.05, Math.min(2.0, playbackRate)); // Clamp to 5% to 200% if (audioInstTrack != null) { audioInstTrack.volume = instTargetVolume; + #if FLX_PITCH + audioInstTrack.pitch = playbackRate; + #end audioInstTrack.onComplete = null; } if (audioVocalTrackGroup != null) { audioVocalTrackGroup.playerVolume = vocalPlayerTargetVolume; audioVocalTrackGroup.opponentVolume = vocalOpponentTargetVolume; + #if FLX_PITCH + audioVocalTrackGroup.pitch = playbackRate; + #end } } @@ -6311,6 +6321,11 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState public function postLoadInstrumental():Void { + // Reapply the volume and playback rate. + var instTargetVolume:Float = ((menubarItemVolumeInstrumental.value / 100) ?? 1.0); + var playbackRate:Float = ((menubarItemPlaybackSpeed.value / 100.0) ?? 0.5) * 2.0; + playbackRate = Math.floor(playbackRate / 0.05) * 0.05; // Round to nearest 5% + playbackRate = Math.max(0.05, Math.min(2.0, playbackRate)); // Clamp to 5% to 200% if (audioInstTrack != null) { // Prevent the time from skipping back to 0 when the song ends. @@ -6323,6 +6338,10 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState } audioVocalTrackGroup.pause(); }; + audioInstTrack.volume = instTargetVolume; + #if FLX_PITCH + audioInstTrack.pitch = playbackRate; + #end } else { @@ -6339,6 +6358,25 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState healthIconsDirty = true; } + public function postLoadVocals():Void + { + // Reapply the volume and playback rate. + var vocalPlayerTargetVolume:Float = (menubarItemVolumeVocalsPlayer.value / 100.0) ?? 1.0; + var vocalOpponentTargetVolume:Float = (menubarItemVolumeVocalsOpponent.value / 100.0) ?? 1.0; + var playbackRate:Float = ((menubarItemPlaybackSpeed.value / 100.0) ?? 0.5) * 2.0; + playbackRate = Math.floor(playbackRate / 0.05) * 0.05; // Round to nearest 5% + playbackRate = Math.max(0.05, Math.min(2.0, playbackRate)); // Clamp to 5% to 200% + + if (audioVocalTrackGroup != null) + { + audioVocalTrackGroup.playerVolume = vocalPlayerTargetVolume; + audioVocalTrackGroup.opponentVolume = vocalOpponentTargetVolume; + #if FLX_PITCH + audioVocalTrackGroup.pitch = playbackRate; + #end + } + } + function hardRefreshOffsetsToolbox():Void { var offsetsToolbox:ChartEditorOffsetsToolbox = cast this.getToolbox(CHART_EDITOR_TOOLBOX_OFFSETS_LAYOUT); diff --git a/source/funkin/ui/debug/charting/handlers/ChartEditorAudioHandler.hx b/source/funkin/ui/debug/charting/handlers/ChartEditorAudioHandler.hx index 329873d6823..c2bc2956aa0 100644 --- a/source/funkin/ui/debug/charting/handlers/ChartEditorAudioHandler.hx +++ b/source/funkin/ui/debug/charting/handlers/ChartEditorAudioHandler.hx @@ -146,6 +146,8 @@ class ChartEditorAudioHandler result = playVocals(state, DAD, opponentId, instId); // if (!result) return false; + state.postLoadVocals(); + var perfE:Float = TimerUtil.start(); state.hardRefreshOffsetsToolbox();