Skip to content

Commit 4933ef8

Browse files
committed
Chart editor all supported sound formats
1 parent 663b8d7 commit 4933ef8

File tree

9 files changed

+36
-36
lines changed

9 files changed

+36
-36
lines changed

source/funkin/audio/FunkinSound.hx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,16 @@ class FunkinSound extends FlxSound implements ICloneable<FunkinSound>
5757
* Waveform data for this sound.
5858
* This is lazily loaded, so it will be built the first time it is accessed.
5959
*/
60-
public var waveformData(get, never):WaveformData;
60+
public var waveformData(get, never):Null<WaveformData>;
6161

6262
var _waveformData:Null<WaveformData> = null;
6363

64-
function get_waveformData():WaveformData
64+
function get_waveformData():Null<WaveformData>
6565
{
6666
if (_waveformData == null)
6767
{
6868
_waveformData = WaveformDataParser.interpretFlxSound(this);
69-
if (_waveformData == null) throw 'Could not interpret waveform data!';
69+
if (_waveformData == null) trace('Could not interpret waveform data!');
7070
}
7171
return _waveformData;
7272
}

source/funkin/audio/waveform/WaveformData.hx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ class WaveformData
195195
var thatChannel = that.channel(channelIndex);
196196
var resultChannel = result.channel(channelIndex);
197197

198+
if (thatChannel == null) return this.clone();
199+
198200
for (index in 0...this.length)
199201
{
200202
var thisMinSample = thisChannel.minSample(index);

source/funkin/ui/debug/charting/ChartEditorState.hx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,6 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
148148
public static final CHART_EDITOR_TOOLBOX_FREEPLAY_LAYOUT:String = Paths.ui('chart-editor/toolbox/freeplay');
149149
public static final CHART_EDITOR_TOOLBOX_PLAYTEST_PROPERTIES_LAYOUT:String = Paths.ui('chart-editor/toolbox/playtest-properties');
150150

151-
// Validation
152-
public static final SUPPORTED_MUSIC_FORMATS:Array<String> = #if sys ['ogg'] #else ['mp3'] #end;
153-
154151
// Layout
155152

156153
/**

source/funkin/ui/debug/charting/dialogs/ChartEditorUploadVocalsDialog.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class ChartEditorUploadVocalsDialog extends ChartEditorBaseDialog
109109

110110
vocalsEntry.onClick = function(_event)
111111
{
112-
Dialogs.openBinaryFile('Open $charName Vocals', [{label: 'Audio File (.ogg)', extension: 'ogg'}], function(selectedFile)
112+
Dialogs.openBinaryFile('Open $charName Vocals', FileUtil.FILE_EXTENSION_INFO_AUDIO, function(selectedFile)
113113
{
114114
if (selectedFile != null && selectedFile.bytes != null)
115115
{

source/funkin/ui/debug/charting/handlers/ChartEditorAudioHandler.hx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import funkin.audio.waveform.WaveformSprite;
1313
import flixel.util.FlxColor;
1414
import haxe.io.Bytes;
1515
import haxe.io.Path;
16+
import lime.media.AudioBuffer;
1617

1718
/**
1819
* Functions for loading audio for the chart editor.
@@ -69,6 +70,7 @@ class ChartEditorAudioHandler
6970
*/
7071
public static function loadVocalsFromBytes(state:ChartEditorState, bytes:Bytes, charId:String, instId:String = '', wipeFirst:Bool = false):Bool
7172
{
73+
if (AudioBuffer.getCodec(bytes) == null) return false;
7274
var trackId:String = '${charId}${instId == '' ? '' : '-${instId}'}';
7375
if (wipeFirst) wipeVocalData(state);
7476
state.audioVocalTrackData.set(trackId, bytes);
@@ -119,9 +121,11 @@ class ChartEditorAudioHandler
119121
*/
120122
public static function loadInstFromBytes(state:ChartEditorState, bytes:Bytes, instId:String = '', wipeFirst:Bool = false):Bool
121123
{
124+
if (AudioBuffer.getCodec(bytes) == null) return false;
122125
if (instId == '') instId = 'default';
123126
if (wipeFirst) wipeInstrumentalData(state);
124127
state.audioInstTrackData.set(instId, bytes);
128+
trace('instId: ${instId} bytes:${state.audioInstTrackData.get(instId)?.length}');
125129
return true;
126130
}
127131

source/funkin/ui/debug/charting/handlers/ChartEditorDialogHandler.hx

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ class ChartEditorDialogHandler
532532

533533
instrumentalBox.onClick = function(_)
534534
{
535-
Dialogs.openBinaryFile('Open Instrumental', [{label: 'Audio File (.ogg)', extension: 'ogg'}], function(selectedFile:SelectedFileInfo)
535+
Dialogs.openBinaryFile('Open Instrumental', FileUtil.FILE_EXTENSION_INFO_AUDIO, function(selectedFile:SelectedFileInfo)
536536
{
537537
if (selectedFile != null && selectedFile.bytes != null)
538538
{
@@ -567,17 +567,8 @@ class ChartEditorDialogHandler
567567
}
568568
else
569569
{
570-
var message:String = if (!ChartEditorState.SUPPORTED_MUSIC_FORMATS.contains(path.ext ?? ''))
571-
{
572-
'File format (${path.ext}) not supported for instrumental track (${path.file}.${path.ext})';
573-
}
574-
else
575-
{
576-
'Failed to load instrumental track (${path.file}.${path.ext}) for variation (${state.selectedVariation})';
577-
}
578-
579570
// Tell the user the load was successful.
580-
state.error('Failed to Load Instrumental', message);
571+
state.error('Failed to Load Instrumental', 'Failed to load instrumental track (${path.file}.${path.ext}) for variation (${state.selectedVariation})');
581572
}
582573
};
583574

source/funkin/ui/debug/charting/toolboxes/ChartEditorFreeplayToolbox.hx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ class ChartEditorFreeplayToolbox extends ChartEditorBaseToolbox
324324
for (index in 0...numberOfTicks)
325325
{
326326
var tickPos = chartEditorState.offsetTickBitmap.width / 2 * index;
327-
var tickTime = tickPos * (waveformScale / BASE_SCALE * waveformMagicFactor) / waveformMusic.waveform.waveformData.pointsPerSecond();
327+
var tickTime = tickPos * (waveformScale / BASE_SCALE * waveformMagicFactor) / waveformMusic.waveform.waveformData?.pointsPerSecond();
328328

329329
var tickLabel:Label = new Label();
330330
tickLabel.text = formatTime(tickTime);
@@ -397,7 +397,7 @@ class ChartEditorFreeplayToolbox extends ChartEditorBaseToolbox
397397

398398
// Move the audio preview to the playhead position.
399399
var currentWaveformIndex:Int = Std.int(playheadAbsolutePos * (waveformScale / BASE_SCALE * waveformMagicFactor));
400-
var targetSongTimeSeconds:Float = waveformMusic.waveform.waveformData.indexToSeconds(currentWaveformIndex);
400+
var targetSongTimeSeconds:Float = waveformMusic.waveform.waveformData?.indexToSeconds(currentWaveformIndex);
401401
audioPreviewTracks.time = targetSongTimeSeconds * Constants.MS_PER_SEC;
402402
}
403403

@@ -452,11 +452,11 @@ class ChartEditorFreeplayToolbox extends ChartEditorBaseToolbox
452452

453453
var previewStartPosAbsolute = waveformDragPreviewStartPos + waveformScrollview.hscrollPos;
454454
var previewStartPosIndex:Int = Std.int(previewStartPosAbsolute * (waveformScale / BASE_SCALE * waveformMagicFactor));
455-
var previewStartPosMs:Int = Std.int(waveformMusic.waveform.waveformData.indexToSeconds(previewStartPosIndex) * Constants.MS_PER_SEC);
455+
var previewStartPosMs:Int = Std.int(waveformMusic.waveform.waveformData?.indexToSeconds(previewStartPosIndex) * Constants.MS_PER_SEC);
456456

457457
var previewEndPosAbsolute = waveformDragPreviewEndPos + waveformScrollview.hscrollPos;
458458
var previewEndPosIndex:Int = Std.int(previewEndPosAbsolute * (waveformScale / BASE_SCALE * waveformMagicFactor));
459-
var previewEndPosMs:Int = Std.int(waveformMusic.waveform.waveformData.indexToSeconds(previewEndPosIndex) * Constants.MS_PER_SEC);
459+
var previewEndPosMs:Int = Std.int(waveformMusic.waveform.waveformData?.indexToSeconds(previewEndPosIndex) * Constants.MS_PER_SEC);
460460

461461
chartEditorState.performCommand(new SetFreeplayPreviewCommand(previewStartPosMs, previewEndPosMs));
462462

@@ -629,7 +629,7 @@ class ChartEditorFreeplayToolbox extends ChartEditorBaseToolbox
629629

630630
if (audioPreviewTracks.playing)
631631
{
632-
var targetScrollPos:Float = waveformMusic.waveform.waveformData.secondsToIndex(audioPreviewTracks.time / Constants.MS_PER_SEC) / (waveformScale / BASE_SCALE * waveformMagicFactor);
632+
var targetScrollPos:Float = waveformMusic.waveform.waveformData?.secondsToIndex(audioPreviewTracks.time / Constants.MS_PER_SEC) / (waveformScale / BASE_SCALE * waveformMagicFactor);
633633
// waveformScrollview.hscrollPos = targetScrollPos;
634634
var prevPlayheadAbsolutePos = playheadAbsolutePos;
635635
playheadAbsolutePos = targetScrollPos;
@@ -652,11 +652,11 @@ class ChartEditorFreeplayToolbox extends ChartEditorBaseToolbox
652652
{
653653
var previewStartPosAbsolute = waveformDragPreviewStartPos + waveformScrollview.hscrollPos;
654654
var previewStartPosIndex:Int = Std.int(previewStartPosAbsolute * (waveformScale / BASE_SCALE * waveformMagicFactor));
655-
var previewStartPosMs:Int = Std.int(waveformMusic.waveform.waveformData.indexToSeconds(previewStartPosIndex) * Constants.MS_PER_SEC);
655+
var previewStartPosMs:Int = Std.int(waveformMusic.waveform.waveformData?.indexToSeconds(previewStartPosIndex) * Constants.MS_PER_SEC);
656656

657657
var previewEndPosAbsolute = waveformDragPreviewEndPos + waveformScrollview.hscrollPos;
658658
var previewEndPosIndex:Int = Std.int(previewEndPosAbsolute * (waveformScale / BASE_SCALE * waveformMagicFactor));
659-
var previewEndPosMs:Int = Std.int(waveformMusic.waveform.waveformData.indexToSeconds(previewEndPosIndex) * Constants.MS_PER_SEC);
659+
var previewEndPosMs:Int = Std.int(waveformMusic.waveform.waveformData?.indexToSeconds(previewEndPosIndex) * Constants.MS_PER_SEC);
660660

661661
// Set the values in milliseconds.
662662
freeplayPreviewStart.value = previewStartPosMs;
@@ -667,8 +667,8 @@ class ChartEditorFreeplayToolbox extends ChartEditorBaseToolbox
667667
}
668668
else
669669
{
670-
previewBoxStartPosAbsolute = waveformMusic.waveform.waveformData.secondsToIndex(chartEditorState.currentSongFreeplayPreviewStart / Constants.MS_PER_SEC) / (waveformScale / BASE_SCALE * waveformMagicFactor);
671-
previewBoxEndPosAbsolute = waveformMusic.waveform.waveformData.secondsToIndex(chartEditorState.currentSongFreeplayPreviewEnd / Constants.MS_PER_SEC) / (waveformScale / BASE_SCALE * waveformMagicFactor);
670+
previewBoxStartPosAbsolute = waveformMusic.waveform.waveformData?.secondsToIndex(chartEditorState.currentSongFreeplayPreviewStart / Constants.MS_PER_SEC) / (waveformScale / BASE_SCALE * waveformMagicFactor);
671+
previewBoxEndPosAbsolute = waveformMusic.waveform.waveformData?.secondsToIndex(chartEditorState.currentSongFreeplayPreviewEnd / Constants.MS_PER_SEC) / (waveformScale / BASE_SCALE * waveformMagicFactor);
672672

673673
freeplayPreviewStart.value = chartEditorState.currentSongFreeplayPreviewStart;
674674
freeplayPreviewEnd.value = chartEditorState.currentSongFreeplayPreviewEnd;
@@ -679,7 +679,7 @@ class ChartEditorFreeplayToolbox extends ChartEditorBaseToolbox
679679
{
680680
super.refresh();
681681

682-
waveformMagicFactor = MAGIC_SCALE_BASE_TIME / (chartEditorState.offsetTickBitmap.width / waveformMusic.waveform.waveformData.pointsPerSecond());
682+
waveformMagicFactor = MAGIC_SCALE_BASE_TIME / (chartEditorState.offsetTickBitmap.width / waveformMusic.waveform.waveformData?.pointsPerSecond());
683683

684684
var currentZoomFactor = waveformScale / BASE_SCALE * waveformMagicFactor;
685685

source/funkin/ui/debug/charting/toolboxes/ChartEditorOffsetsToolbox.hx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ class ChartEditorOffsetsToolbox extends ChartEditorBaseToolbox
211211
{
212212
// We have to change the song time to match the playhead position when we move it.
213213
var currentWaveformIndex:Int = Std.int(playheadAbsolutePos * (waveformScale / BASE_SCALE * waveformMagicFactor));
214-
var targetSongTimeSeconds:Float = waveformPlayer.waveform.waveformData.indexToSeconds(currentWaveformIndex);
214+
var targetSongTimeSeconds:Float = waveformPlayer.waveform.waveformData?.indexToSeconds(currentWaveformIndex);
215215
audioPreviewTracks.time = targetSongTimeSeconds * Constants.MS_PER_SEC;
216216
}
217217

@@ -323,7 +323,7 @@ class ChartEditorOffsetsToolbox extends ChartEditorBaseToolbox
323323
for (index in 0...numberOfTicks)
324324
{
325325
var tickPos = chartEditorState.offsetTickBitmap.width / 2 * index;
326-
var tickTime = tickPos * (waveformScale / BASE_SCALE * waveformMagicFactor) / waveformInstrumental.waveform.waveformData.pointsPerSecond();
326+
var tickTime = tickPos * (waveformScale / BASE_SCALE * waveformMagicFactor) / waveformInstrumental.waveform.waveformData?.pointsPerSecond();
327327

328328
var tickLabel:Label = new Label();
329329
tickLabel.text = formatTime(tickTime);
@@ -396,7 +396,7 @@ class ChartEditorOffsetsToolbox extends ChartEditorBaseToolbox
396396

397397
// Move the audio preview to the playhead position.
398398
var currentWaveformIndex:Int = Std.int(playheadAbsolutePos * (waveformScale / BASE_SCALE * waveformMagicFactor));
399-
var targetSongTimeSeconds:Float = waveformPlayer.waveform.waveformData.indexToSeconds(currentWaveformIndex);
399+
var targetSongTimeSeconds:Float = waveformPlayer.waveform.waveformData?.indexToSeconds(currentWaveformIndex);
400400
audioPreviewTracks.time = targetSongTimeSeconds * Constants.MS_PER_SEC;
401401
}
402402

@@ -424,11 +424,11 @@ class ChartEditorOffsetsToolbox extends ChartEditorBaseToolbox
424424
var deltaMilliseconds:Float = switch (dragWaveform)
425425
{
426426
case PLAYER:
427-
deltaPixels / waveformPlayer.waveform.waveformData.pointsPerSecond() * Constants.MS_PER_SEC;
427+
deltaPixels / waveformPlayer.waveform.waveformData?.pointsPerSecond() * Constants.MS_PER_SEC;
428428
case OPPONENT:
429-
deltaPixels / waveformOpponent.waveform.waveformData.pointsPerSecond() * Constants.MS_PER_SEC;
429+
deltaPixels / waveformOpponent.waveform.waveformData?.pointsPerSecond() * Constants.MS_PER_SEC;
430430
case INSTRUMENTAL:
431-
deltaPixels / waveformInstrumental.waveform.waveformData.pointsPerSecond() * Constants.MS_PER_SEC;
431+
deltaPixels / waveformInstrumental.waveform.waveformData?.pointsPerSecond() * Constants.MS_PER_SEC;
432432
};
433433

434434
switch (dragWaveform)
@@ -732,7 +732,7 @@ class ChartEditorOffsetsToolbox extends ChartEditorBaseToolbox
732732
{
733733
trace('Playback time: ${audioPreviewTracks.time}');
734734

735-
var targetScrollPos:Float = waveformInstrumental.waveform.waveformData.secondsToIndex(audioPreviewTracks.time / Constants.MS_PER_SEC) / (waveformScale / BASE_SCALE * waveformMagicFactor);
735+
var targetScrollPos:Float = waveformInstrumental.waveform.waveformData?.secondsToIndex(audioPreviewTracks.time / Constants.MS_PER_SEC) / (waveformScale / BASE_SCALE * waveformMagicFactor);
736736
// waveformScrollview.hscrollPos = targetScrollPos;
737737
var prevPlayheadAbsolutePos = playheadAbsolutePos;
738738
playheadAbsolutePos = targetScrollPos;
@@ -805,7 +805,7 @@ class ChartEditorOffsetsToolbox extends ChartEditorBaseToolbox
805805
{
806806
super.refresh();
807807

808-
waveformMagicFactor = MAGIC_SCALE_BASE_TIME / (chartEditorState.offsetTickBitmap.width / waveformInstrumental.waveform.waveformData.pointsPerSecond());
808+
waveformMagicFactor = MAGIC_SCALE_BASE_TIME / (chartEditorState.offsetTickBitmap.width / waveformInstrumental.waveform.waveformData?.pointsPerSecond());
809809

810810
var currentZoomFactor = waveformScale / BASE_SCALE * waveformMagicFactor;
811811

source/funkin/util/FileUtil.hx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ class FileUtil
4949
};
5050
#end
5151

52+
// All supported audio file formats supported by haxeflixel.
53+
public static final FILE_EXTENSION_INFO_AUDIO:Array<FileDialogExtensionInfo> = [{
54+
extension: 'ogg, mp3, wav, opus, flac',
55+
label: 'Audio File (*.ogg, *.mp3, *.wav, *.opus, *.flac)',
56+
}];
57+
5258
/**
5359
* Paths which should not be deleted or modified by scripts.
5460
*/

0 commit comments

Comments
 (0)