Easy Music Manager - Beginner Guide
Date: 2026-07-20
Project: EEMHatchFoxStudios.uproject
Manager: `/Game/EasyMusicManager/Blueprints/BP_EasyMusicManager`
Trigger: `/Game/EasyMusicManager/Blueprints/BP_EMM_MusicTrigger`
What the system does
Easy Music Manager plays background music from a centralized music library.
The system can:
- play songs sequentially,
- play songs randomly without repetitions,
- keep an individual song looping,
- reserve songs for special events,
- change the music when the player enters an area,
- return to ambient music when the player leaves,
- use Crossfade, Fade Out Then Fade In, or Cut transitions.
You do not need to modify any Blueprint to use these features.
1. Add your songs
Open the Data Table:
/Game/EasyMusicManager/Blueprints/Data/DT_EMMTracks
Create one row for each song. Give every row a unique and recognizable name, for example:
Exploration_Day
Exploration_Night
Combat_Boss
Secret_Room
Each row contains the following options:
SB_Music
The audio asset played by the manager.
It accepts any SoundBase-compatible asset, such as a SoundWave, SoundCue, or MetaSound Source.
Important: Do not enable looping directly inside the Unreal SoundWave/audio asset. Easy Music Manager controls looping through its own track configuration, usually from DT_EMMTracks. If looping is enabled directly on the SoundWave, EMM may not correctly detect when the track ends. This can affect sequential and random playback, transitions, requested-only tracks, loop control, triggers, and demo testing.
Correct: Import the audio normally, leave the SoundWave Looping option disabled, and configure looping with B_LoopThisTrack in DT_EMMTracks.
Incorrect: Enabling looping directly inside each SoundWave/audio asset.
B_LoopThisTrack
When enabled, the song starts again after it finishes.
Common uses include:
- permanent area music,
- combat music,
- boss music,
- ambient tracks that should not change automatically.
Important: an ambient track with this option enabled will not advance to the next song until another event requests a change.
B_PlayOnlyWhenRequested
When enabled, the track is excluded from the ambient playlist.
Use it for songs that should only play at specific moments, such as:
- combat,
- boss encounters,
- special rooms,
- narrative scenes,
- secret areas.
The track remains stored in DT_EMMTracks and can be selected by a BP_EMM_MusicTrigger.
This option does not block the track. It only excludes it from ambient rotation.
2. Configure the manager
Place exactly one BP_EasyMusicManager in every map that uses EMM.
The current trigger finds the manager automatically. Multiple managers in the same map are not supported.
In the Details panel, expand ST_EMMSettings and configure these options:
B_PlayOnStart
Starts playing music automatically when the level begins.
When disabled, the level starts without music until another element requests a track.
B_PlayRandom
- Disabled: plays ambient tracks sequentially.
- Enabled: selects tracks randomly without repeating them until the cycle is complete.
B_StartWithFirstTrack
Used together with B_PlayRandom.
- Disabled: the first song is also selected randomly.
- Enabled: starts with the first ambient track and then continues randomly.
This option only affects the first track of the level.
Enum_TransitionMode
Defines how one song changes into the next.
- Crossfade: the previous song fades out while the new song fades in.
- Fade Out Then Fade In: the previous song fades out completely, an optional pause occurs, and then the new song begins.
- Cut: stops the previous song and starts the new one immediately.
Important: If you want an instant transition, use Cut.
PlayRequestedTrack converts an all-zero fade request to Cut when entering requested music. ResumeAmbientMusic and normal ambient transitions do not apply the same fallback. For any instant transition, including leaving a trigger, select Cut explicitly. Do not use Crossfade with both fade values at 0 or Fade Out Then Fade In with fade-out, fade-in, and gap all at 0.
F_FadeOutTime
The number of seconds the previous song takes to fade out.
A value of 0 produces an immediate change.
F_FadeInTime
The number of seconds the new song takes to reach its normal volume.
This value is not used when the selected mode is Cut.
F_GapBetweenTracks
The amount of silence between one song and the next.
This value is only used by Fade Out Then Fade In.
F_ChangeBeforeTrackEnds
Defines how many seconds before the end of a song the next automatic transition should begin.
For example, with a value of 5, the manager prepares the transition when approximately five seconds remain.
SC_Music
The Sound Class reserved for music.
Use SC_Music to control music volume separately. SC_Music should be a child of SC_Master, and the music assets should be assigned to SC_Music.
The SC_Music field inside ST_EMMSettings is an informational reference. It does not automatically route or reassign audio assets.
Assign SC_Music directly on each SoundWave, SoundCue, or MetaSound Source used by EMM.
3. Prepare the map
For a standard ambient playlist:
- Place exactly one BP_EasyMusicManager in the map.
- Confirm that it uses DT_EMMTracks.
- Configure ST_EMMSettings.
- Enable B_PlayOnStart if music should begin with the level.
- Save the map and press Play.
The manager reads every row from DT_EMMTracks when the level begins. You do not need to enter the number of songs manually.
Changes made to the Data Table are loaded the next time the level starts. The library is not refreshed automatically during an active game session.
4. Change music inside an area
Place a BP_EMM_MusicTrigger where the music should change.
EMM_Manager
This exposed reference may be assigned for clarity, but the current trigger Blueprint does not use it for playback requests.
The current trigger locates BP_EasyMusicManager automatically with GetActorOfClass. Exactly one manager must exist in the map.
TrackToPlay
Select a row from DT_EMMTracks.
For combat or area music that should continue while the player remains inside, configure its row as follows:
B_LoopThisTrack = true
B_PlayOnlyWhenRequested = true
If B_LoopThisTrack is disabled, the manager returns to ambient rotation when the song finishes, even if the player is still inside the trigger.
Enum_TransitionMode
Select how the music should change when this trigger is used.
The trigger has its own transition settings, separate from the manager's ambient settings. The same trigger settings are used when entering and leaving the area.
F_FadeOutTime
The time used to fade out the music that is currently playing.
F_FadeInTime
The time used to fade in the new music.
F_GapBetweenTracks
The pause used when the transition mode is Fade Out Then Fade In.
5. Adjust the trigger area
Select the collision component of BP_EMM_MusicTrigger and resize it to cover the desired area.
When the player enters:
- The trigger obtains the selected row from DT_EMMTracks.
- It requests that track from the manager.
- The manager performs the transition configured on the trigger.
When the player leaves:
- The trigger requests a return to ambient music.
- The manager finds the next valid ambient track.
- It performs the transition using the trigger settings.
The interrupted ambient track does not resume from its previous playback position. The manager returns to the rotation and selects the next valid candidate.
If no ambient track is available, the requested music stops and the level remains silent.
6. Quick examples
Sequential ambient playlist
B_PlayOnStart = true
B_PlayRandom = false
All ambient tracks should use:
B_LoopThisTrack = false
B_PlayOnlyWhenRequested = false
Random ambient playlist
B_PlayOnStart = true
B_PlayRandom = true
B_StartWithFirstTrack = false
The manager does not repeat a song until the cycle is complete.
Fixed first song, then random
B_PlayOnStart = true
B_PlayRandom = true
B_StartWithFirstTrack = true
Combat area
In DT_EMMTracks, configure the combat track as follows:
B_LoopThisTrack = true
B_PlayOnlyWhenRequested = true
On the trigger:
TrackToPlay = Combat_Boss
Enum_TransitionMode = Cut or Crossfade
7. Demo map: MapTest
Open /Game/EasyMusicManager/Map/MapTest. The demo contains exactly one BP_EasyMusicManager and three separated MusicTrigger areas. Walk through each labeled area to hear both the requested-music transition and the return to ambient music.
Cut
Requests Battle_2 with Fade Out 0, Fade In 0, and Gap 0.
Crossfade
Requests Battle_1 with Fade Out 5 seconds, Fade In 5 seconds, and Gap 0.
Fade Out Then Fade In
Requests Battle_2 with Fade Out 5 seconds, Gap 2 seconds, and Fade In 5 seconds.
When the player leaves any of these areas, the manager returns to ambient rotation using that trigger's transition values. The demo volumes are intentionally separated so their overlap events cannot compete.
8. Common problems
Music does not start
Check that:
- a manager exists in the map,
- B_PlayOnStart is enabled,
- DT_EMMTracks contains at least one ambient track,
- SB_Music is not empty,
- the audio has an audible volume.
The trigger does not work
Check that:
- exactly one BP_EasyMusicManager exists in the current map,
- TrackToPlay has a valid Data Table and row,
- the player passes through the collision volume,
- the trigger has the correct size.
A song never changes
Check B_LoopThisTrack and the audio asset's internal looping settings.
Looping should be controlled with B_LoopThisTrack. Avoid enabling internal looping on the SoundWave, SoundCue, or MetaSound as well, because the manager must receive the audio completion event to continue.
Special music ends too soon
Enable B_LoopThisTrack on the row used by the trigger.
Gap Between Tracks does not create a pause
Confirm that the transition mode is Fade Out Then Fade In. The gap is not used by Crossfade or Cut.
Current limitations
- The trigger is configured for player 0.
- Overlapping triggers do not manage priorities between areas. Keep trigger volumes separated unless the project implements its own priority or arbitration logic.
- The system does not preserve the exact playback position when changing maps or returning from a trigger.
- A manager must be placed and configured in every map that uses the system.