@@ -6144,20 +6144,30 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
6144
6144
6145
6145
fadeInWelcomeMusic (WELCOME_MUSIC_FADE_IN_DELAY , WELCOME_MUSIC_FADE_IN_DURATION );
6146
6146
6147
- // Reapply the volume.
6147
+ // Reapply the volume and playback rate .
6148
6148
var instTargetVolume : Float = menubarItemVolumeInstrumental .value ?? 1.0 ;
6149
6149
var vocalPlayerTargetVolume : Float = menubarItemVolumeVocalsPlayer .value ?? 1.0 ;
6150
6150
var vocalOpponentTargetVolume : Float = menubarItemVolumeVocalsOpponent .value ?? 1.0 ;
6151
6151
6152
+ var playbackRate = ((menubarItemPlaybackSpeed .value ?? 1.0 ) * 2.0 ) / 100.0 ;
6153
+ playbackRate = Math .floor (playbackRate / 0.05 ) * 0.05 ; // Round to nearest 5%
6154
+ playbackRate = Math .max (0.05 , Math .min (2.0 , playbackRate )); // Clamp to 5% to 200%
6155
+
6152
6156
if (audioInstTrack != null )
6153
6157
{
6154
6158
audioInstTrack .volume = instTargetVolume ;
6159
+ #if FLX_PITCH
6160
+ audioInstTrack .pitch = playbackRate ;
6161
+ #end
6155
6162
audioInstTrack .onComplete = null ;
6156
6163
}
6157
6164
if (audioVocalTrackGroup != null )
6158
6165
{
6159
6166
audioVocalTrackGroup .playerVolume = vocalPlayerTargetVolume ;
6160
6167
audioVocalTrackGroup .opponentVolume = vocalOpponentTargetVolume ;
6168
+ #if FLX_PITCH
6169
+ audioVocalTrackGroup .pitch = playbackRate ;
6170
+ #end
6161
6171
}
6162
6172
}
6163
6173
@@ -6311,6 +6321,11 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
6311
6321
6312
6322
public function postLoadInstrumental (): Void
6313
6323
{
6324
+ // Reapply the volume and playback rate.
6325
+ var instTargetVolume : Float = menubarItemVolumeInstrumental .value ?? 1.0 ;
6326
+ var playbackRate = ((menubarItemPlaybackSpeed .value ?? 1.0 ) * 2.0 ) / 100.0 ;
6327
+ playbackRate = Math .floor (playbackRate / 0.05 ) * 0.05 ; // Round to nearest 5%
6328
+ playbackRate = Math .max (0.05 , Math .min (2.0 , playbackRate )); // Clamp to 5% to 200%
6314
6329
if (audioInstTrack != null )
6315
6330
{
6316
6331
// Prevent the time from skipping back to 0 when the song ends.
@@ -6323,6 +6338,10 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
6323
6338
}
6324
6339
audioVocalTrackGroup .pause ();
6325
6340
};
6341
+ audioInstTrack .volume = instTargetVolume ;
6342
+ #if FLX_PITCH
6343
+ audioInstTrack .pitch = playbackRate ;
6344
+ #end
6326
6345
}
6327
6346
else
6328
6347
{
@@ -6339,6 +6358,25 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
6339
6358
healthIconsDirty = true ;
6340
6359
}
6341
6360
6361
+ public function postLoadVocals (): Void
6362
+ {
6363
+ // Reapply the volume and playback rate.
6364
+ var vocalPlayerTargetVolume : Float = menubarItemVolumeVocalsPlayer .value ?? 1.0 ;
6365
+ var vocalOpponentTargetVolume : Float = menubarItemVolumeVocalsOpponent .value ?? 1.0 ;
6366
+ var playbackRate = ((menubarItemPlaybackSpeed .value ?? 1.0 ) * 2.0 ) / 100.0 ;
6367
+ playbackRate = Math .floor (playbackRate / 0.05 ) * 0.05 ; // Round to nearest 5%
6368
+ playbackRate = Math .max (0.05 , Math .min (2.0 , playbackRate )); // Clamp to 5% to 200%
6369
+
6370
+ if (audioVocalTrackGroup != null )
6371
+ {
6372
+ audioVocalTrackGroup .playerVolume = vocalPlayerTargetVolume ;
6373
+ audioVocalTrackGroup .opponentVolume = vocalOpponentTargetVolume ;
6374
+ #if FLX_PITCH
6375
+ audioVocalTrackGroup .pitch = playbackRate ;
6376
+ #end
6377
+ }
6378
+ }
6379
+
6342
6380
function hardRefreshOffsetsToolbox (): Void
6343
6381
{
6344
6382
var offsetsToolbox : ChartEditorOffsetsToolbox = cast this .getToolbox (CHART_EDITOR_TOOLBOX_OFFSETS_LAYOUT );
0 commit comments