In the first part of this series, we looked at vertically layering our stems and controlling playback by using AISAC fades. This approach was useful for escalating the intensity of our music and was easy to implement.
In this second part, we will look at creating a modular system by switching horizontally between full pieces of music. Using this technique, we can switch between entirely different arrangements, tempos, and musical keys. Of course, with this added flexibility comes greater difficulty in getting all the parts to sequence naturally. Fortunately, ADX2 gives us the tools to solve the technical challenges that this approach introduces.
This project was created using CRIWARE SDK for Unity V3.00.04 and Unity V2018.4.19f1
Composing a horizontal music system takes a bit more experimentation and testing than with a vertical approach. We need to think about how tight we want the transitions to be, as this can have a significant impact on our orchestration and arrangement choices. Also, since DAWs generally aren’t designed with this level of interactive control in mind, we are likely going to do a lot more iterative testing, swapping between Atom Craft and our DAW.
To illustrate some of the tools available, we have created a sample project which features a music system with a calm state and a battle state, as well as transition states between these.
Atom Craft Implementation
Once we have some music to work with, we can jump into Atom Craft. The primary tool ADX2 offers for horizontal sequencing is the Blocks features. Blocks allow us to encapsulate our ideas into little chunks of self-contained music, which can be easily switched between. To get set up, we need to:
- Create a new Polyphonic Cue
- Change the Time Base to Cue, and set:
- Setting Type to Bars/Beats
- Measure and BPM to match our music
- Drag the song parts (Materials) into our Cue and arrange then as appropriate
- Right-click → New Object → Create Block
- Right-click a Block → Color Settings to make the Blocks easier to identify
Blocks have quite a few settings, so let’s go over them.
- Playback LoopNum sets the number of times our Block will loop. Setting this to -1 will ensure that it loops infinitely, or at least until we tell it to stop or transition.
- Number of Divisions will divide our Block by the set value, which controls how quickly our Block will transition when another Block’s playback has been initiated. Lower values allow our music to play out more fully, but higher values offer tighter synchronization to the gameplay.
- Block Transition Timing works in tandem with Number of Divisions to determine whether the Block should transition partway through, or only when playback reaches the end of the Block.
- Transition Behavior controls whether the audio within the Block continues after a transition has occurred. We might want to continue playback in the case of long release tails, but generally, we want the Block Stop behavior.
- Block Transition Mode determines whether playback to the next Block will start from the beginning of that next Block, or relative to where playback is in the existing Block. In other words, if playback in the current Block stops at the end of bar 2, playback will start from bar 3 in the next Block.
For the sample project that we have put together, we have decided to switch between Calm and Battle states using intermediary Blocks. Calm and Battle are set to loop indefinitely (-1), allowing for transitions to happen on each bar. Since playback can be stopped midway through a Material, we have opted for Block Stop Transition Behavior for these.
For the transitions, we have set these to play fully, without any looping. Since Battle follows Battle Transition, we have set Destination Type to Next Block. For the Calm Transition, however, we have been more explicit since Calm is at the beginning of the Timeline. This behavior can be specified in the Inspector under the Block panel if Destination Type is set to Block Destination. Also, since this transition has a long tail, we have set Transition Behavior to None, so that the transition bleeds more naturally into Calm.
With our music system set up, we can now quickly audition the results in Session View. Simply drag in the music Cue, select the Block tab, and sequence different states using the corresponding play buttons.