diff --git a/Project.xml b/Project.xml index b39618908..6df879583 100644 --- a/Project.xml +++ b/Project.xml @@ -213,7 +213,7 @@ - --> + --> --> diff --git a/source/funkin/ui/debug/charting/toolboxes/ChartEditorFreeplayToolbox.hx b/source/funkin/ui/debug/charting/toolboxes/ChartEditorFreeplayToolbox.hx index 8d3554a08..c384e7a6d 100644 --- a/source/funkin/ui/debug/charting/toolboxes/ChartEditorFreeplayToolbox.hx +++ b/source/funkin/ui/debug/charting/toolboxes/ChartEditorFreeplayToolbox.hx @@ -290,7 +290,7 @@ class ChartEditorFreeplayToolbox extends ChartEditorBaseToolbox // waveformMusic.waveform.forceUpdate = true; var perfStart = haxe.Timer.stamp(); var waveformData1 = playerVoice.waveformData; - var waveformData2 = opponentVoice.waveformData; + var waveformData2 = opponentVoice?.waveformData ?? playerVoice.waveformData; // this null check is for songs that only have 1 vocals file! var waveformData3 = chartEditorState.audioInstTrack.waveformData; var waveformData = waveformData1.merge(waveformData2).merge(waveformData3); trace('Waveform data merging took: ${haxe.Timer.stamp() - perfStart} seconds'); diff --git a/source/funkin/ui/debug/charting/toolboxes/ChartEditorOffsetsToolbox.hx b/source/funkin/ui/debug/charting/toolboxes/ChartEditorOffsetsToolbox.hx index 67ca82b1b..fd9209294 100644 --- a/source/funkin/ui/debug/charting/toolboxes/ChartEditorOffsetsToolbox.hx +++ b/source/funkin/ui/debug/charting/toolboxes/ChartEditorOffsetsToolbox.hx @@ -276,8 +276,13 @@ class ChartEditorOffsetsToolbox extends ChartEditorBaseToolbox // Build opponent waveform. // waveformOpponent.waveform.forceUpdate = true; - waveformOpponent.waveform.waveformData = opponentVoice.waveformData; - waveformOpponent.waveform.duration = opponentVoice.length / Constants.MS_PER_SEC; + // note: if song only has one set of vocals (Vocals.ogg/mp3) then this is null and crashes charting editor + // so we null check + if (opponentVoice != null) + { + waveformOpponent.waveform.waveformData = opponentVoice.waveformData; + waveformOpponent.waveform.duration = opponentVoice.length / Constants.MS_PER_SEC; + } // Build instrumental waveform. // waveformInstrumental.waveform.forceUpdate = true;