CRI ADX(Unreal Engine) v1
Intermediate Level 21 Learn about cue sheets

The word "cue sheet" has come up many times in the lessons so far, but what exactly is a cue sheet?

term

Cue Sheet

An object that aggregates multiple queues.
A group of audio files per cue sheet will be output as a single file. For example, it is assumed that it will be used for one scene or one character in a game.

ACB File

Files output by CRI Atom Craft. One file is output for each cue sheet.

Atom Cue Sheet Assets

This is an asset that is generated when you import an ACB file.
The contents of the ACB file are saved.

Sound Atom CueSheet Object

It is a C++ object.
Contains Raw ACB Data (details below).
It provides functions for handling cue sheet information.
Saving this object as a uasset file will create an Atom Cue Sheet asset.

Raw ACB Data

A copy of the ACB file contents.

Atom Cue Assets

An asset that has a one-to-one correspondence with a cue in the cue sheet.
Use this asset to indicate which cue to play.

A cue sheet is required to play a cue

In order to play a cue, the associated cuesheet must be loaded.
Specifically, both of the following conditions must be met:

If a cue play command is issued without a cue sheet being loaded, our plug-in will implicitly do either 1 or 2 below.
This mechanism makes it possible to play cues without having to think about the cue sheet.
However, quality sound control requires knowledge of cue sheets.

*You don't need to understand everything on this page at once. Learn it little by little.

1. Load the Atom Cue Sheet asset

Implicit Loading with Hard References

When you load an asset, any assets that have a hard reference relationship with it will be loaded in a chain reaction.
Here's a concrete example where an Atom Cue Sheet asset is implicitly loaded:

  • When an Atom Cue asset is loaded, the associated Atom Cue Sheet asset is also loaded.
  • If you drag and drop an Atom Cue Sheet asset onto a level in the UE5 editor, the Atom Cue Sheet asset will be loaded when the level is loaded when the game is run.

Explicit Loading

Of course, you can also load it explicitly using the asset loading system provided by UE5. For more information, see the official UE5 documentation.

2. Load the Raw ACB Data in the Atom Cue Sheet asset

Implicit Loading

  • The Raw ACB Data is implicitly loaded when a queue play command is issued.
  • If you drag and drop an Atom Cue Sheet asset onto a level in the UE5 editor, the Atom Cue Sheet asset and Raw ACB Data will be implicitly loaded when the level is loaded when the game is run.

Explicit Loading

  • For C++
    Execute the USoundAtomCueSheet::LoadAtomCueSheet function.
  • For Blueprints
    Run the LoadAtomCueSheet node

By performing the above operations, it is possible to explicitly load the Raw ACB Data.

Implicit Load Details

By default, cue sheets are loaded when they are needed and discarded when they are no longer needed.

When do you determine that a cue sheet is needed?

When the cue is commanded to play.
Atom Cue Sheet assets and Raw ACB Data will be loaded as needed.

When is a cue sheet considered no longer necessary?

When the Atom Cue Sheet asset is no longer referenced anywhere.
To be precise, when the GC time comes and the Atom Cue Sheet asset is not referenced anywhere, the Atom Cue Sheet asset and raw ACB data will be unloaded and discarded.

Benefits

  • No need to use Blueprints
  • No need to manage
  • No need to worry about forgetting to load or unload

Disadvantages

However, implicit loading has the following disadvantages:

  • There may be times when it takes some time for the sound to actually be heard after you issue the command to play a cue.
    If you issue a command to play a cue when no cue sheet is loaded, it will automatically begin loading the cue sheet and play the cue once it has finished loading.
  • There are cases where this can result in inefficient processing.
    In situations where the need for cue sheets changes rapidly, it would be best to never discard them, but since the system cannot know this in advance, they will be discarded whenever they are no longer needed.
    For example, consider a situation where you need to make an explosion sound.
    1. Start playing the explosion cue at SpawnSoundAtLocation (assuming implicit loading has occurred)
    2. Explosion cue playback finished
    3. During GC, the following objects are deemed unnecessary and discarded:
      • AtomComponent spawned by SpawnSoundAtLocation
      • Explosion cue asset (*Assume that there are no other objects referencing this asset other than the AtomComponent above)
      • Explosion cue sheet asset (*It is assumed that there are no other objects referencing this asset other than the explosion cue asset)

        If it goes "explosion -> GC -> explosion -> GC", then implicit loading and discarding will be repeated.

        Choosing between implicit and explicit loading

        Situations where implicit loading is useful

        • When the period during which the cue sheet is used coincides with the period of implicit loading/unloading
        • If a delay in playback start is not a problem
          Example: A cue sheet for background music and environmental sounds associated with a map

        Situations where explicit loading is appropriate

        • When the period during which the cue sheet is used is limited within one persistent level
          Example: Open world games, persistent levels with a huge number of sublevels
        • When playback start delays are not allowed
          Example: SE in general

        To achieve high quality sound control, try to gradually learn to use implicit and explicit loading.