Skip to main content

Troubleshooting

Solutions to common issues with ElysMusicEngine.


General Debugging

Step 1: Use Console Commands

Open console (~ key) and try:

music.debug

This shows:

  • All active layers
  • Their priorities
  • Which ones are playing
  • Current master volume

Step 2: Check Output Log

Window → Developer Tools → Output Log

Look for:

  • ERP Music Subsystem Initialized (plugin loaded)
  • Pushed music layer: LayerName (layer added)
  • Started playing layer: LayerName (music started)
  • Warnings about missing assets or invalid states

Music Not Playing

Symptom

You call Push Music Layer but hear nothing.

Solutions

1. Check Plugin Enabled

Edit → Plugins → Search "Elys Music Engine"

  • (Success) Must be enabled
  • Restart editor if you just enabled it

2. Verify Music Asset

  • Double-click music asset in Content Browser
  • Does it play?
  • If not → Reimport or use different asset

3. Check Layer Already Active

Branch: Is Layer Active("YourLayerName")
If TRUE: Layer already playing (Push ignored)
If FALSE: Should work

Fix: Pop the layer first, or use different name.

4. Check Master Volume

Console: music.debug

Look for Master Volume: 0.0 → That's your problem!

Fix:

Set Master Music Volume
- Volume: 1.0

5. Check Layer Volume

When pushing layer:

  • Volume Multiplier: Should be 1.0 (not 0.0)

6. Check Audio Settings

Edit → Project Settings → Audio

  • Master Volume: Should be > 0
  • Audio Device: Should be valid

Music Volume Not Triggering on Spawn

Symptom

You place a Music Volume in your level and set your Player Start inside it, but music doesn't play when the game starts. Walking into/out of the volume works fine.

Cause

Music Volumes (and Stinger Volumes) only trigger on overlap events — when actors enter or exit the volume. If an actor spawns inside, no overlap event fires.

Solution

Add the ERP Music Volume Detector component to your player/pawn:

  1. Open your player Blueprint (e.g., BP_ThirdPersonCharacter, BP_FirstPersonCharacter)
  2. Click Add Component
  3. Search for ERP Music Volume Detector
  4. Add it to your character

That's it! Now music volumes trigger correctly when:

  • Spawning at game start
  • Respawning after death
  • Joining multiplayer sessions
  • Teleporting into volumes

Advanced: Adjust Detection Timing

If volumes still don't trigger (very rare), increase the detection delay:

  1. Select the ERP Music Volume Detector component
  2. In Details panel → Check Delay: Change from 0.1 to 0.2 or 0.3

This gives the actor more time to fully initialize before checking for volumes. The detector performs a direct point-in-box geometry test (rotation-aware), so collision initialization delays are usually not an issue.


Music Stops Abruptly

Symptom

Music cuts off suddenly instead of fading.

Solutions

1. Increase Fade Times

When pushing layer:

  • Fade Out Time: Increase to 1.5 or 2.0 seconds
  • Fade In Time: Match the fade out time

2. Check Pop Timing

If you Pop a layer immediately after Push:

  • The fade might not complete
  • Add delay or check if already active first

3. Check Clear All Layers

Clear All Music Layers stops everything immediately:

  • Use Pop Music Layer for graceful fadeout

Wrong Music Playing

Symptom

Different music plays than expected.

Solutions

1. Check Priorities

Console: music.debug

Higher priority wins. Example:

Combat [10] Replace   ← This plays
Exploration [0] ← This doesn't (lower priority)

Fix: Adjust priorities when pushing layers.

2. Check Layer Mode

Replace: Stops lower priority music
Additive: Adds on top (both may play)

If you want only combat music:

  • Mode: Replace
  • Priority: Higher than exploration (e.g., 10 vs 0)

3. Check Layer Names

Case-sensitive! These are different:

  • "Combat"
  • "combat"
  • "Combat " (trailing space)

Fix: Use consistent naming.


Music Won't Stop

Symptom

Pop Music Layer doesn't stop the music.

Solutions

1. Check Layer Name Matches

Push Music Layer
- Layer Name: "Combat" ← Must match exactly

Pop Music Layer
- Layer Name: "Combat" ← Same name!

Common mistake:

Push: "Combat"
Pop: "combat" ← Wrong! Case-sensitive

2. Check Fade Out Time

Music does fade out, it just takes time:

  • Default: 1.0 seconds
  • Wait for fade to complete

Console: music.debug will show (FADING OUT) status.

3. Force Stop

If stuck, use:

Clear All Music Layers

This immediately stops everything.


Music Volumes Not Triggering

Symptom

Walk into ERP_MusicVolume but music doesn't change.

Solutions

1. Check Collision Settings

Select the ERP_MusicVolume actor:

Details Panel:

  • Collision Enabled: ✅ Query and Physics
  • Generate Overlap Events: ✅ True

Note: Music Volumes use BrushComponent - shape it however you need (box, sphere, custom).

2. Check Player Collision

Your player character:

  • Must have collision enabled
  • Must generate overlap events

3. Check Content Configuration

Make sure content is properly configured:

  • Single Layer: Layer Name must be set, Music asset assigned
  • Single Preset: Music Preset must be assigned
  • Layer/Preset List: List must contain valid entries
  • By Tag: Tags must exist in the appropriate registry (Layer or Preset)

4. Check Actor Filter Tag

If Actor Filter Tag is set:

  • Player must implement IGameplayTagAssetInterface
  • Player must have that tag
  • Fix: Add tag to player or leave field empty

5. Check Trigger Once

If Trigger Once: true:

  • Volume only triggers first time
  • Fix: Set to false or reset (re-enter level)

5. Visualize Volume

Select volume → Show → Collision

  • Should see the box bounds
  • Make sure it's large enough to actually hit

6. Check Output Log

Look for:

Music Volume: Pushed layer 'VolumeName'

If not there → Volume not triggering overlap.


Music Stops Between Levels

Symptom

Music stops when loading new level.

Solutions

1. Enable Persistence

When pushing layer:

Push Music Layer
- Persist Across Levels: (Success) TRUE

2. Check Level Streaming

If using Level Streaming:

  • Persistence should work automatically
  • If not, check Audio settings (Master Volume reset?)

3. Re-Push After Load

Alternative if persistence doesn't work:

Event BeginPlay (new level)

Check: Is Layer Active("MenuMusic")
If FALSE:
Push Music Layer("MenuMusic", ...)

Stingers Not Working

Symptom

Call Play Stinger but nothing happens.

Solutions

1. Check Stinger Asset

  • Verify sound asset is valid
  • Double-click to preview
  • Should be short (1-5 seconds typical)

2. Check Music Ducking

If bDuckMusic: true but music too loud:

  • Increase Duck Volume (e.g., 0.2 = very quiet)

3. Check Stinger Volume

Stinger itself might be too quiet:

  • Check asset volume
  • Increase in Sound Cue/Wave settings

4. Check Simultaneous Stingers

Only one stinger at a time:

  • If already playing, new stinger ignored
  • Future: Queue system

Audio Ducking Not Working

Symptom

Music doesn't lower during important audio (dialogue, cutscenes, narration, etc.).

Solutions

1. Check Audio Component Valid

Spawn Sound 2D (your audio)
↓ Audio Component pin
Branch: Is Valid?
If Valid:
Enable Audio Ducking

2. Check Duck Volume

  • 0.0 = complete silence
  • 0.5 = half volume
  • 1.0 = no ducking (no effect)

TIP: Use 0.3 - 0.5 for best results.

3. Check Audio Finishes

Ducking restores when audio finishes:

  • If audio loops forever → Music stays ducked
  • If audio component destroyed → No restore callback

Fix: Use non-looping audio or manually restore:

Set Master Music Volume
- Volume: 1.0

Performance Issues

Symptom

FPS drop or stuttering when music changes.

Solutions

1. Use Smaller Audio Files

  • Large uncompressed WAV: Slow loading
  • Fix: Use compressed formats (OGG Vorbis)
  • Or compress in Sound Wave settings

2. Reduce Layer Count

  • 10+ active layers: Check if all needed
  • Fix: Consolidate layers or Pop unused

3. Check Asset Streaming

Large music files:

  • Enable Streaming in Sound Wave asset settings
  • Reduces memory, improves load times (Performance tip)

4. Preload Critical Music

In Level Blueprint:

Event BeginPlay

Load Asset (async)
- Asset: Your Music Asset

(Cache in variable for later use)

Plugin Not Loading

Symptom

Plugin missing in menus or nodes not available.

Solutions

1. Check Plugin Enabled

Edit → Plugins → Search "Elys Music Engine"

If not found:

  • Plugin not in Plugins/ folder
  • Check file structure: Plugins/ElysMusicEngine/...

2. Regenerate Project Files

Right-click .uprojectGenerate Visual Studio project files

3. Rebuild Project

  • Close editor
  • Build in Visual Studio (Development Editor configuration)
  • Reopen editor

4. Check Engine Version

Plugin requires Unreal Engine 5.0+:

  • Check .uplugin file: "EngineVersion": "5.0.0"
  • If older engine → Update or modify plugin for UE4

Audio Crackling / Distortion

Symptom

Music sounds distorted or crackly.

Solutions

1. Check Audio Device Settings

Edit → Project Settings → Platforms → Windows → Audio

  • Buffer Size: Increase if too low
  • Sample Rate: Match your music files

2. Check CPU Load

  • Too many layers playing?
  • Other systems causing hitches?

Fix: Reduce layer count or optimize other systems.

3. Check Music Asset Quality

  • Bitrate too low?
  • Compression artifacts?

Fix: Use higher quality source or adjust compression.


Preset Assets Not Working

Symptom

Push Music Preset doesn't play music.

Solutions

1. Check Preset Asset Valid

Open ERP_MusicLayerPreset asset:

  • At least one layer defined?
  • Music assets assigned?
  • Layer names set?

2. Check Clear Existing

Push Music Preset
- Clear Existing: TRUE ← Stops all current music
- Clear Existing: FALSE ← Adds on top of current

Choose based on your needs.

3. Check Layer Priorities

Preset layers still subject to priority rules:

  • Higher priority preset layers play first
  • Lower priority may be overridden by active layers

Blueprint Node Missing

Symptom

Can't find "Push Music Layer" or other nodes.

Solutions

1. Check Context-Sensitivity

Blueprint search is context-aware:

  • Disable "Context Sensitive" checkbox in search
  • Type: Push Music Layer

2. Check Category

All nodes in category: "ERP Music"

Search: category:ERP or category:Music

3. Refresh Nodes

  • Save and close Blueprint
  • Reopen
  • Try searching again

4. Check Plugin Compiled

If nodes missing after adding plugin:

  • Close editor
  • Rebuild project
  • Reopen editor

Common Mistakes

MistakeProblemSolution
Layer name typoPop doesn't workUse exact same name (case-sensitive)
Priority too lowCombat doesn't overrideSet combat priority higher (10 vs 0)
Replace vs AdditiveMusic behavior wrongUse Replace for main, Additive for layers
Forget to PopMusic plays foreverAlways Pop when done
No Persist flagMusic stops on level loadEnable "Persist Across Levels"
Volume collision offVolume doesn't triggerEnable collision + overlap events

Still Need Help?

Check Other Documentation

Debug Checklist

  • Console command: music.debug
  • Output Log for errors
  • Plugin enabled and compiled
  • Music assets valid and play directly
  • Layer names match exactly
  • Priorities make sense
  • Fade times reasonable
  • Persistence flag set if needed

Report a Bug

If you found a real bug:

  1. Check FAB marketplace reviews/Q&A first
  2. Provide:
    • Unreal version
    • Plugin version
    • Minimal repro steps
    • Output log excerpt
  3. Contact support via FAB or email

Stinger Handles

Symptom: Stinger Handle is Invalid

You call Play Stinger With Handle but the returned handle is invalid or doesn't work.

Solutions

1. Check if handle is valid before using

FERP_StingerHandle Handle = MusicSys->PlayStingerWithHandle(...);

if (Handle.IsValid()) // Always check!
{
// Safe to use
}
else
{
// Sound may be null or loading failed
}

2. Verify the sound is loaded

if (!StingerSound || !StingerSound->IsValidLowLevel())
{
UE_LOG(LogTemp, Error, TEXT("Stinger sound is null or invalid"));
return;
}

3. Check stinger is still playing before controlling

if (MusicSys->IsStingerPlaying(Handle))
{
MusicSys->PauseStinger(Handle); // Safe to pause
}
else
{
// Stinger already finished - handle is now invalid
}

Symptom: Loop Events Not Firing

Looping stingers don't trigger OnStingerLoopCompleted event.

Solutions

1. Verify looping is enabled

FERP_EnhancedStingerParams Params;
Params.bLoop = true; // Must be TRUE
Params.LoopCount = 3; // Not 0 (infinite), not 1 (no loop)
Params.LoopDelay = 0.2f; // Delay between repeats

2. Bind the event before playing

// WRONG: Bind after playing
FERP_StingerHandle Handle = MusicSys->PlayStingerEnhanced(Params);
MusicSys->OnStingerLoopCompleted.AddDynamic(this, &AMyClass::OnLoopComplete);

// CORRECT: Bind before (or in constructor/BeginPlay)
MusicSys->OnStingerLoopCompleted.AddDynamic(this, &AMyClass::OnLoopComplete);
FERP_StingerHandle Handle = MusicSys->PlayStingerEnhanced(Params);

3. Check the event signature

// Event handler must match exactly
UFUNCTION()
void OnLoopComplete(FERP_StingerHandle Handle, int32 LoopIndex)
{
// Handle and LoopIndex parameters required
}

Migration Guide: PlayStinger → PlayStingerWithHandle

Upgrading from old PlayStinger() to new handle-based API.

Old Code (Still Works)

// Simple stinger, no control possible
MusicSys->PlayStinger(MyStingerSound, true, 0.3f, 0.2f, 0.5f);

// No way to pause, resume, or monitor after playing
// Play with handle for full control
FERP_StingerHandle Handle = MusicSys->PlayStingerWithHandle(
MyStingerSound, true, 0.3f, 0.2f, 0.5f
);

if (Handle.IsValid())
{
// Now you can control it
MusicSys->PauseStinger(Handle); // Later
MusicSys->ResumeStinger(Handle); // Later
MusicSys->StopStinger(Handle); // Later
MusicSys->SetStingerVolume(Handle, 0.5f);
}

Enhanced Parameters (Looping + Network Sync)

// Old: No looping support
PlayStinger(...);

// New: Full control with looping and network sync
FERP_EnhancedStingerParams Params;
Params.StingerSound = MyStingerSound;
Params.bDuckMusic = true;
Params.bLoop = true;
Params.LoopCount = 3;
Params.LoopDelay = 0.2f;
Params.SyncMode = ERP_EStingerSyncMode::Synchronized2D;

FERP_StingerHandle Handle = MusicSys->PlayStingerEnhanced(Params);

Event Handling

// New: React to loop/completion events
MusicSys->OnStingerLoopCompleted.AddDynamic(this, &AMyClass::OnLoopEvent);
MusicSys->OnStingerCompleted.AddDynamic(this, &AMyClass::OnFinished);

void AMyClass::OnLoopEvent(FERP_StingerHandle Handle, int32 LoopIndex)
{
UE_LOG(LogTemp, Log, TEXT("Loop %d complete"), LoopIndex);
}

void AMyClass::OnFinished(FERP_StingerHandle Handle)
{
UE_LOG(LogTemp, Log, TEXT("Stinger finished"));
}

Network Synchronization

// Old: Sync via PlayContext actor (deprecated)
// AERP_MusicPlayContext* PlayContext = ...;
// MusicSys->PlayStinger(...); // No network sync

// New: Sync via GameState component (recommended)
UERP_MusicSyncComponent* SyncComp = MusicSys->GetOrCreateSyncComponent();

FERP_EnhancedStingerParams Params;
Params.StingerSound = MyStingerSound;
Params.SyncMode = ERP_EStingerSyncMode::Synchronized2D; // All clients

FERP_StingerHandle Handle = SyncComp->SyncPlayStinger(Params);

Most issues are simple configuration problems. Use music.debug first!