Assumption 1: As a game's story progresses, dynamic background music is often used to enhance the player's immersion.
Assumption 2: Background music is probably always streamed due to memory limitation and performance.
What do I need to consider when I'm checking the feasibility of having dynamic(ally changing, adapting) background music? For example when a boss enemy appears the game should not just replace the "wandering music" to "boss combat", it should rather somehow cross-fade the two music scores as it starts playing the new music.
Is it usually possible to stream multiple sounds in parallel? I'm using LibGDX, where -- as far as I'm aware -- only a single streaming music instance can be played at a time, so how can I have such music with this framework?
Do I suspect correctly if I also need to separate a dynamic music into parts like "intro", "loopable part", "loopable part near the climax", "outro", etc., and when a part ends have a music manager code decide which part should be (re)started?
I'm more interested in understanding the theory instead of the actual implementation of the code.