Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR introduces support for looping from MPF
sound_player
triggers andMPFSoundAsset
resources. Manually tested with sound files, sound asset resources, andAudioStreamRandomizer
resources.Addresses issue #15
Summary
The Godot classes
AudioStreamOGG
andAudioStreamWAV
support a nativeloop
property which will endlessly loop the sound playback, whileAudioStreamMPF
supports aloop_mode
property which loops playback in a variety of ways. Unfortunately:AudioStreamPlayer
(orGMCChannel
) which prevents any count of loopingAudioStreamRandomizer
and other stream types do not have any native looping propertyThe Fix
This PR adds loop-management logic to
GMCChannel
to manually loop an audio stream by hooking into thefinished
signal and callingplay()
again. For situations where a specific number of loops are requested, metadata is attached to the stream to count the number of loops.When the stream playback finishes, the channel will check the loop state and either re-play the stream or stop itself.
Note: For situations where the audio stream is a native Godot type that supports looping and the looping is infinite, the native looping property is set and the channel does not manually manage looping.