Godot Music Mixer
Godot Music Mixer is a helper scene (MusicPlaylist.tscn) for creating
and managing music playlists, and also adaptive music for video games.
It supports shuffle, looping, crossfading, and nesting.
Originally made for the puzzle game Sawdust.
Include MusicPlaylist in your project
Add as many songs (as StreamPlayers) as you want in the order you
want as children to the playlist
Turn on Autoplay, or manually call the
playmethod to get going!
The playlist themselves can be stacked in a tree fashion (see example),
so you can multiple different moods or tags of music, and then
crossfade between them. This is useful for adaptive music, and to avoid
jarring music changes.
It can be done to any level of nesting, so you could, for example, have
a single master MusicPlaylist, that contains playlists for every game
level (so that when changing levels you can crossfade), and each game
level could have both "action" and "passive" playlists that
individually are crossfaded between.
- Autoplay - turn on to play as soon as it enters the scene
- Prefer pause - good for long running ambient tracks, this means
that if the playlist stops, it actually will just pause and next time
it plays it will resume from this location
- Repeat one - repeats a single track forever
- Crossfade - crossfade between tracks when switching
- Shuffle - turn on to shuffle tracks. NOTE: Remember to
randomize()before using this feature!.
- Crossfade Style - whether to crossfade both tracks, or just one
(generally, "Fade out only" and "Crossfade" are the most useful)
The "example" directory contains an example project with two buttons,
letting you switch between an "exciting" playlist and a "ambient"
playlist. The ambient playlist has "prefer pause" enabled
Both the code and example music clips are licensed under MIT.
There are a lot of features I want to add:
- Fade in for playing (so that when resuming without crossfade it can
- Easing function for crossfade
- Manual mixing: One fun effect is having two tracks play at the same
time, that parallel somehow (e.g. the same music, but one is played
with lo-fi electronic timbres, while the other has classical
instruments) and crossfade between them. (see "misc notes")
- Rudimentary beat matching (you'd need to specify BPM, it'd just try
to sync them up if an even multiple)
- More looping features
Pull requests are welcome!