@@ -19,6 +19,9 @@ import openfl.events.Event;
1919import openfl .media .Sound ;
2020import openfl .media .SoundChannel ;
2121import openfl .media .SoundMixer ;
22+ #if lime_vorbis
23+ import lime .media .vorbis .VorbisFile ;
24+ #end
2225
2326/**
2427 * A FlxSound which adds additional functionality:
@@ -342,8 +345,40 @@ class FunkinSound extends FlxSound implements ICloneable<FunkinSound>
342345
343346 if (shouldLoadPartial )
344347 {
345- var music = FunkinSound .loadPartial (pathToUse , params .partialParams ?. start ?? 0.0 , params .partialParams ?. end ?? 1.0 , params ?. startingVolume ?? 1.0 ,
346- params .loop ?? true , false , false , params .onComplete );
348+ var start : Float = params .partialParams ?. start ?? 0.0 ;
349+ var end : Float = params .partialParams ?. end ?? 1.0 ;
350+
351+ // If partial, attempt to load from vorbis first.
352+ #if lime_vorbis
353+ var vorbisFile : Null <VorbisFile > = VorbisFile .fromFile (Paths .stripLibrary (pathToUse ));
354+ if (vorbisFile != null )
355+ {
356+ var vorbisSound : Null <Sound > = Sound .fromAudioBuffer (lime.media. AudioBuffer .fromVorbisFile (vorbisFile ));
357+
358+ if (vorbisSound != null )
359+ {
360+ var sound : Null <FunkinSound > = FunkinSound .load (vorbisSound , params ?. startingVolume ?? 1.0 , params .loop ?? true , false , true , false ,
361+ params .onComplete );
362+ if (sound != null )
363+ {
364+ sound ._label = pathToUse ;
365+
366+ FlxG .sound .music = sound ;
367+ FlxG .sound .list .remove (FlxG .sound .music );
368+
369+ // Apply the partial limits for the sound.
370+ sound .loopTime = sound .length * start ;
371+ sound .endTime = sound .length * end ;
372+
373+ if (FlxG .sound .music != null && params .onLoad != null ) params .onLoad ();
374+
375+ return true ;
376+ }
377+ }
378+ }
379+ #end
380+
381+ var music = FunkinSound .loadPartial (pathToUse , start , end , params ?. startingVolume ?? 1.0 , params .loop ?? true , false , false , params .onComplete );
347382
348383 if (music != null )
349384 {
0 commit comments