Introduction to the CRI ADX Tools

CRI ADX Basics

Role of CRI ADX

CRI ADX plays data files generated by dedicated tools, such as CRI Atom Craft, on the target machines (e.g. game consoles or smartphones) using the ADX runtime library.

cri_adx2_primer_tool_runtime_flow.png

Data files are created by registering the sound files created by regular audio applications, such as Pro Tools or Sound Forge, into the ADX-specific tools and adjusting playback timing and parameters, then encoding (compressing) the files. The runtime library plays data files generated by the tools (multiple compressed waveforms) on the target machine while decoding them in real time.

Sound Design Using Cues

A program based on sound files plays back a sound by specifying a filename. In CRI ADX, a sound is played back by specifying a Cue (signal). The simplest usage example is to drag and drop a sound file onto CRI Atom Craft to automatically create a Cue with the same name as the file. Then, the application can play the sound by specifying the Cue name instead of the sound file name.

cri_adx2_primer_cue_packing.png

The programmer can play the sound by setting a Cue as follows:

criAtomExPlayer_SetCueName(player, acb, "Explosion");
criAtomExPlyaer_Start(player);

Sound designers communicate the sound to be played in the application to the programmer by defining it as a Cue. A Cue means a signal. Designers can define not only the playback of sound files but also sound controls, such as stopping the sound or lowering the volume, as a Cue (signal). For example, in the case of a missile explosion sound effect, using a Cue, a designer can define instructions such as "stop the flying sound of the missile and play the explosion sound" when the missile lands. Since the designer uses the "Cue" abstraction to design sounds, flexible and advanced sound design is possible based on the application various events.

cri_adx2_primer_missile.png


How A Sound Is Played

First, the application creates a "player". Then, it assigns a Cue to the player and calls the start function to play the sound. The internal behavior of the runtime library is as follows:

  1. The player creates a sequencer.
  2. The sequencer plays the sound based on the sequence data specified by the Cue.
    Sequence data is a timeline (track) data on which sound control instructions such as playback start or parameter modifications are placed.
  3. When it is time to play the sound, the sequencer fetches a Voice from the Voice Pool and initiates the playback of the sound data.
    A Voice is a mechanism to play back a single waveform, and the Voice Pool is a mechanism to dynamically manage the playback of voices.
  4. A Voice decodes compressed audio data and sends it to a Bus.
    A Bus can be considered an audio mixer that processes audio signals and has a routing function.
  5. A Bus can apply various effects, such as a reverberation or a compressor, and plays the sound on the target machine.
cri_adx2_primer_concept.png


What is a Player?

Applications control the sound using a "player." To play a sound, an application first creates a player and specifies a Cue to be played. The program can call APIs (functions) on the player to control the playback or to change parameters such as the volume. The program can create several players, each one having a different purpose. For example, the program can create a player for music, a player for environmental sound, a player for character A and a player for character B.
In addition, it is possible to trigger multiple sounds simultaneously on a single player. For example, by triggering several gunshots (or footsteps) with overlap on the same player, the result will be more realistic.

cri_adx2_primer_player.png


What is a Cue?

A Cue is a "signal" used to control the CRI ADX runtime library.
The application program sets a Cue to the player and calls the start function,
then it controls the sound based on the sequence data set in the Cue.
Therefore, you can consider:

"Cue" = Identifier of "sequence data"

.
By dragging and dropping a sound file onto a CueSheet, a Cue to play that sound data is created.
This Cue contains the simplest form of sequence data.

cri_adx2_primer_cue.png


What is a Sequencer?

A sequencer is a "mechanism to perform tasks in order." For example, it can perform tasks such as "First play this music, then lower the volume of the music after four seconds, and finally play back this dialog line after five seconds." This group of tasks is called a sequence data. A sequencer is created by setting a Cue to a player and calling the start function. The sequencer reads the sequence data and controls the sound with the appropriate timing. Since the sequencer is programmable, it can implement advanced sound behavior such as looping or conditional branching.

cri_adx2_primer_sequencer.png


What is Sequence data?

Sequence data is data used to control the Sequencer. It can control the sound along the timeline.
Example:
"Play the sound of a gunshot, then after 200 milliseconds, play the sound of a falling cartridge case"
"Gradually lower the volume of the sound of a flying missile for two seconds, then play the sound of an explosion"
This time-oriented sound control can be achieved using sequence data.
When playing sounds, the sequence data contains the following information.

(1) Starting time of the playback
(2) Playback parameters
(3) Waveform data ID

By changing the playback parameters, sound variations can be generated while keeping the amount of data small since the same waveform can be used with a different volume, pitch, or sound image location.

The sequence data, similarly to what is happening with the digital audio workstations (DAW) on the market, can have multiple tracks. Waveforms or actions can be placed on each track. By placing "actions", sound controls such as stopping the playback or changing the playback parameters can be implemented. Users can also set playback parameters on each track to adjust the volume or pitch.

cri_adx2_primer_sequence.png


What is a Voice?

A Voice is a mechanism to play back a single waveform. The Voice is named after the human voice, since humans can only produce a single sound at a time. A Voice in CRI ADX has a mechanism to extract the compressed sound data in real-time or to stream from a file or over a network. In addition, the user can change the volume, pitch, or position of the sound image (panning), or apply filters by setting playback parameters. The waveform data played back by a Voice is sent to the Bus, and users can specify the amount of data sent to each bus (send amount) separately. Although a Voice is a monophonic sound source in typical audio system, a Voice in CRI ADX can handle multi-channel sound sources.

cri_adx2_primer_voice.png


What is a Voice Pool?

A Voice Pool is a pool of Voices. When instructed to play back sound, the sequencer fetches a Voice from the Voice Pool and sets playback parameters and sound data to play the sound. After finishing the playback, the Voice is returned to the Voice Pool. This dynamic allocation of the Voices depending on the situation is called "Dynamic Voice Assignment (Dynamic Playback Management)." It allows for the efficient playback of multiple sounds.

cri_adx2_primer_voice_pool.png


What is a Bus?

A Bus receives the audio signal from the Voice and applies effects on it. In CRI ADX, flexible effect processing is possible by using multiple busses. For example, the signal received by the sound effect bus is "filtered" and sent to the master bus and the environmental sound bus. The signal received by the environmental sound bus goes through the "reverberation effect" and is sent to the master bus. Eventually, both signals are mixed in the master bus and played back on the target machine. Setting the route of the signal processing in this manner is called "routing."
Although the term bus originally related to a "shared automobile", it is used here as it can handle multiple signals such as those from right and left channels at the same time. A bus in CRI ADX can handle up to eight signal channels.

cri_adx2_primer_dsp_bus.png