gogodyne - Music Sequencer

Dynamic Multitrack Loop Player Plugin for Unreal Engine

What the Music Sequencer Does for You

The Music Sequencer is like a robot DJ. You arrange the loop or stem files of your song into sequences, and at runtime the Music Sequencer will play them seamlessly and aligned to bar boundaries.

A sequence can play in order, randomized, or jump around. Tracks can be set to fade in or out, played together, and crossfaded. A "Song" is a custom asset, and with unlimited tracks and sequences.

You trigger "Scenes" at runtime to change which sequences are playing. Songs are controlled through C++ or Blueprints:

  • BeginSong and FinishSong to start or end a Song.

  • TriggerScene to start or stop Sequences.

The Music Sequencer is fully accessible from Blueprints. Although it is an all-code plugin, you won't need to program in order to use it.

Documentation

https://github.com/gogodyne/MusicSequencerPlugin/wiki

Issues, Reporting, and Feature Requests

https://github.com/gogodyne/MusicSequencerPlugin/issues

The Music Sequencer now supports UE 5.5-5.7

Hey gogowhorfin,

I’m finally getting around to adding this to my project, and finding some issues through testing. I’m trying to instantiate a DJ object via the game instance (blueprint only project) and noticing that I am getting different results while debugging. Right now I am tying begin song logic to the object being initialized by the game instance, and basically the music is only successfully starting if I’m playing in the editor viewport. Attempting to run the standalone / built game and the music is not starting playing.

Additionally, I’m trying to use the plugin to have seamless music transitions across level loads, i.e. I’d like the fade out from the main menu music to persist and complete async from the level load. In debug at least, the song is freezing during level load. I wanted to see how it would perform standalone / built when I found the other issue.

Please let me know if you have any advice!

Song not playing in a build:
If you are using only GameplayTags to control the Song, then the issue could be that optimization is leaving the Song Asset out of the package. This is normal packaging optimization because there are no variables referencing the Song Asset.

If this is the case, you can create a variable reference somewhere. That will signal that the Song Asset should be included in the build.

Try making a Song variable and assign the Song Asset to it, such as in the Level Blueprint. You don’t have to actually use that variable. But this will allow the Asset to be packaged, and you can continue to use GameplayTags.

Note: There are several other ways to force Assets to be packaged. (See "Edit > Project Settings > Project > Packaging) But these methods are dependent on how you want your project to be built. The method above should cause the Song to work in a build. However, you might still want to configure your project differently. It would depend on your project’s needs.

Song freezing on Level Load:
There seems to be an issue where Quartz clears out all the timer callbacks on Level Load (which is different from Level streaming). This issue causes the Music Sequencer to lose track of timing, and it can’t recover. I have not yet heard back from Epic about it, but I hope to get it resolved soon. I know this is a significant problem, so I do apologize.

Thanks for posting! Please let me know how it goes.

Hi gogo, thanks for getting back to me. No luck with the following changes:

  • Added song variable to the level w/ the relevant song as the default value
  • Added folder to the asset directories to cook
  • Added folder to the non-asset directories to cook
  • Added folder to additional non-asset directories to package
  • created a primary data asset covering the sound assets and the Music Sequencer Song

I appreciate the ideas, let me know if you think of something else or if there’s more info I can provide.

EDIT: Nevermind, I figured it out. I did have a delay before firing the logic, but essentially the music sequencer subsystem takes some extra time to initialize in the built project. I added an isValid to the subsystem on runtime and saw it wasn’t valid when initially called (original delay 5 seconds, added an extra 10 seconds before any logic fired).

Thank you for the help