Instruments
In XJ music, an Instrument is a collection of Audios. While all instruments are stored according to the Instrument Model, different Types and Modes of instruments have unique purposes and behaviors.
In XJ music, an Instrument is a collection of Audios. While all instruments are stored according to the Instrument Model, different Types and Modes of instruments have unique purposes and behaviors.
Different Types and Modes of instruments have unique purposes and behaviors.
Option A, is to tag audios with a single chord symbol (ie Cmaj7, Emin7b5) which is itself a shorthand for a list of notes (C, E, G, B and E, G, Bb, D for these examples)
With some clever voicing list tricks you could have a lot of freedom with this route. For example if you wrote a voicing list that included both Fmaj7 and Amin7 you would be outlining Fmaj7/9
The more complicated and versatile route, Option B, is what you’re saying—tagging audios with comma-separated lists of notes and having XJ cross-reference those with Main Program voicing lists to choose audios.
I think both will be useful, but to me the chord symbol tagging seems like a faster route to get multi-note audio happening because it’s the same process as the current single-note tagging. I could be underestimating what’s going on currently though
Theoretically, option B is closer to what exists today, but that’s not an obstacle.
I believe that there is a simple formula to tell us whether Option A or Option B yields more freedom a.k.a. modularity a.k.a. less work for more payoff.
Starting with Template Analysis (soon to be built) we can see how many different chords are present in all the main programs of the given template (For each type of instrument independently?) Calculate the relative complexity of using Chord-based (option A) or Note-based (option B) audio Chord-based complexity = How many different audios would be required to cover all the chords present in all main programs Note-based complexity = How many different audios would be required to cover all the voicing lists present in all main programs I suspect the answer (A vs B) varies between templates and instrument types
Setting | Description |
---|---|
isMultiphonic | Toggles whether multiple notes can be played at once. |
isAudioSelectionPersistent | Toggles between persistent and randomized audio selection. |
isOneShot | Toggles Instrument between one shot sounds and loops. |
isOneShotCutoffEnabled | Enables one shot sounds to cut one another off when played. |
isTonal | Determines whether audios are tonal or atonal. |
oneShotObserveLengthOfEvents | Determines whether one shots play out fully or are influenced by the length of their events. |
releaseMillis | Sets release length in milliseconds. |
The instrument menu contains a list of all instruments. Each instrument contains a configuration, which may affect the music when that instrument is chosen.
Here you can see the attributes of each instrument, as well as the memes assigned to it.
To compose the content of any given instrument, click its name in the list to open the Instrument Editor.
A chord-mode instrument such as a Pad-type instrument will provide a single audio per chord. In that case each row (audio) in the instrument will use the tones column to store the chord. The event column is ignored.
When choosing instrument audio (from a chord-mode instrument) for the chords of a main program, XJ will prioritize (see: marble bag) any available exact match. In lieu of an exact match, XJ will allow an acceptable substitute of the pre-slash description of a chord to a non-slash chord (e.g. “Eb/G” is an acceptable substitute for “Eb” and vice versa).
While the presence of voicings is used to make the decision “I’m going to look for a ___-type instrument” once XJ has arrived at the decision “I’m going to craft this ___-type chord-mode instrument now for this segment” there are zero references to voicing content. The content of the chord voicings is ignored. E.g. It’s possible to tell XJ to seek Pad instruments for a given main program even if the content of those voicings are all just “X” but it’s critical to understand the whole template you are composing. If the design of the template calls for both Note- and Chord-type instruments for a given instrument type, then it’s necessary to write whole voicings (comma-separated lists of notes voicing each chord) for interoperability.
For a table of XJ’s chord comprehension, see Chord Interpretation
A polyphonic instrument such as a Bass-type instrument will provide a single audio per note. In that case each row (audio) in the instrument will use the tones column to store the note. The event column is ignored.
A Drum-type instrument will provide a single audio per drum event. In that case each row (audio) in the instrument will use the event column to store the event. The note column is ignored.
Audio in loop-mode plays through its total length continuously, repeating at the start of each Main Program selection in a segment.
In the top header of an instrument are included properties that apply to the entire instrument, such as names, memes, type, mode, state, and volume.
Instrument Property | Description |
---|---|
Name | The name of the audio file. This defaults to the filename of the audio after importing but can be changed in the audio editor menu. |
Event | Determines the type of instrument audio event that the chosen audio will be, which influences the mixing choices of a segment. |
Volume | This value is a floating point integer that sets the volume of the chosen audio. 0.0 is completely silent and 1.0 is the original volume of the imported audio file. The volume value can be increased beyond 1.0 and its original volume, for example, an audio set to 2.0 will be twice as loud as the original file. |
Intensity | A floating integer from 0.0 to 1.0 that determines the intensity level at which the audio will get introduced into the overall mix in a segment. |
Tones | This value sets the note for the chosen audio. It can be a single note or chord. |
Tempo | Sets the audio’s tempo in beats per minute. |
Transient | A floating integer that determines in measurements of seconds where the chosen audio will be starting from when its event is slated to trigger. For example, the default transient offset is 0.0, indicating that the audio will start playing at the beginning of its file when triggered. A transient offset of 0.5 will include a pre-roll of 0.5 seconds and be that far into the audio when previously it would just be starting. |
Loop Beats | An integer that determines the length of a given audio, measured in bars. |
Drum instruments contain audios that XJ will pair with Beats during the beat-craft phase. This can be any one shot drum event, including kick drums, snare drums, hi-hats, toms, cymbals, and more.
Bass instruments contain melodic bass audios and can be played in all three instrument modes- event, chord and loop. Bass instruments are introduced during the detail-craft phase.
Pad instruments contain sustained melodic pad audios that are typically used as underlying texture. Pad instruments can be played in event, chord and loop modes, and are introduced during the detail-craft phase.
Sticky instruments contain one shot audios that “stick” closely to the beat, providing a supportive, repeating, syncopated single note phrase that is usually done by a guitar but could be approximated by any sound provided that the notes are relatively short in duration. Sticky instruments can be played in event, chord and loop modes, and are introduced during the detail-craft phase.
Stripe instruments contain melodic audios that punctuate transitions, highlight important beats, or enhance climactic moments in the music. Stripe instruments can be played in event, chord and loop modes, and are introduced during the detail-craft phase.
Stab instruments contain short percussive or chordal audios that are often created using synthesizers, electric pianos, or brass instruments. Stab instruments can be played in event, chord and loop modes, and are introduced during the detail-craft phase.
Hook instruments contain memorable musical phrases or riff audios played by instruments such as guitar, bass, or keyboards. These hooks can serve as the foundation of the song’s melody or provide a catchy motif that recurs throughout the composition. Hook instruments can be played in event, chord and loop modes, and are introduced during the detail-craft phase.
Percussion instruments contain audios that consist of rhythmic patterns or sequences of percussion instruments that are often used to add groove, texture, and rhythmic complexity to a track. These instruments typically consist of various percussive elements such as drums, cymbals, shakers, tambourines, congas, bongos, and other percussion instruments. Percussion instruments can be played in event, chord and loop modes, and are introduced during the detail-craft phase.
Transition instruments contain audios that are used to smoothly move between different sections or parts of a song, scene, or composition. These sounds help to create cohesion and flow within the production, guiding the listener from one part to another and maintaining interest and engagement throughout. Transition-instruments can only be played in event mode and are introduced in the transition-craft phase.
Background instruments contain audio textures that are at least 1 minute (longer than any section). They are used to create an atmospheric backdrop and establish a sense of place, mood, or environment without necessarily being the focal point of the sequence. When chosen, XJ uses a random piece from within the available audio to fill each section when the instrument is chosen and builds in and out of layers of background audio the same way it does perc loops. Backgorund instruments can only be played in loop mode and are introduced in the background-craft phase.