Aal::atom

Revision as of 01:33, 4 May 2024 by Watertoon (talk | contribs) (Start a writeup on aal atom)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Aal atom serves as a replacement for NintendoWare atk. As such, NintendoWare formats like Bfsar and Bfstm are replaced with EPD's simple Bwav format. This library extends functionality of nn::audio.

Backend

AudioRendererController

The main manager of all aal atom managers.

AudioRendererThread

This thread is responsible for processing 3 of the CommandQueues for non-stream thread commands, processing is typically requested once a frame.

AudioDeviceNameManager

Manages the audio device names and volumes for the TV, Stereo Jack, and Built In Speakers.

BusManager

Manages audio buses. An IBus is implemented as either a SubMixBus or a FinalMixBus. There is a single FinalMixBus, which is responsible for outputting audio to the audio device. There is a handle table allocator for SubMixBus's. IBus are implemented on top of a RoutingNode, which is responsible for handling a bus's links to destination buses.

BusSendManager

Manages a handle table of BusSends used for objects sending audio data to a RoutingNode.

SourceManager

Manages audio sources. A Source is implemented on top of a RoutingNode, as the destination of it's audio is a bus. Sources can have multiple Voices.

CommandBufferManager

Manages 4 Command Queues with 16 usable Command List slots for scheduling ICommands.

CommandManager

Allocator for ICommands. ICommands have a Type which corresponds to a name, some types are shared by multiple classes.

Command Names
Name Type Value Description
Invalid 0 Not used.
Reserve 1 Unknown.
Blank 2 The default dummy ICommand.
BlankWithCheck 3
AcquireVoice 4 Triggers a Source to acquire the underlying nn::audio voice slots for every Voice
UpdateActiveSourceList 5 Rebuilds the SourceManager's active Source array
UpdateDeactiveSourceList 6 Frees inactive Sources from the SourceManager's active Source array
SetPlayState 7 Adjusts the PlayState for every Voice that is part of a Source
PrepareWave 8
SetVolume 9 Adjusts the volume for every Voice that is part of a Source
SetPitch 10 Adjusts the pitch for every Voice that is part of a Source
SetPriority 11 Adjusts the priority for every Voice that is part of a Source
SetChannelVolume 12 Adjusts the mix volumes for a Source?
SetSourceVolume 13
SetBiquadFilter 14 Adjusts the BiquadFilter parameters for every voice that is part of a Source
UpdateSourceConnection 15 Updates the IBus destinations for a Source
Unknown 16 Unused.
Unknown 17 Unused.
FileReadRequest 18 Tells the stream thread to read in the next part of an audio stream.
FileRegistrationRequest 19 Registers an audio stream to the stream thread.
FileUnregistrationRequest 20 Unregisters an audio stream from the stream thread.
AcquireBus 21 Triggers an IBus to acquire it's underlying nn::audio type
UpdateActiveBusList 22 Rebuilds the BusManager active IBus array and frees unused SubMixes
SetBusVolume 23 Adjusts the volume of an IBus
SetBusSendVolume 24 Adjusts the volume of a BusSendArray
UpdateBusConnection 25 Updates the IBus destinations for an IBus
AddEffect 26 Adds an IEffect to an IBus
RemoveEffect 27 Removes an IEffect from an IBus
UpdateEffect 28 Processes an IEffect

ClipManager

Manages a handle table of Clips. Clips appear to wrap bwav.

FaderBufferManager

Manages a handle table of Faders.

StreamBufferManager