Audio services

From Nintendo Switch Brew
Revision as of 16:54, 9 February 2021 by Hexkyz (talk | contribs)
Jump to navigation Jump to search

Contents

audout:u

This is "nn::audio::detail::IAudioOutManager".

Cmd Name
0 #ListAudioOuts
1 #OpenAudioOut
2 [3.0.0+] #ListAudioOutsAuto
3 [3.0.0+] #OpenAudioOutAuto

ListAudioOuts

Takes a type-0x6 output buffer. Populates the output buffer with the available audio output devices' names and returns an u32 with the number of device names written.

OpenAudioOut

Takes a type-0x5 input buffer (DeviceNameIn), a type-0x6 output buffer (DeviceNameOut), two u32s SampleRate (must be 48000) and ChannelCount (only the higher u16 is used), one AppletResourceUserId, a PID and a copy-handle. Returns an #IAudioOut object and four u32s: the sample rate, channel count, SampleFormat, and the initial AudioOutState.

ListAudioOutsAuto

Same as #ListAudioOuts, but takes a type-0x22 output buffer instead.

OpenAudioOutAuto

Same as #OpenAudioOut, but takes a type-0x21 input buffer and a type-0x22 output buffer instead.

IAudioOut

This is "nn::audio::detail::IAudioOut".

Cmd Name
0 #GetAudioOutState
1 #Start
2 #Stop
3 #AppendAudioOutBuffer
4 #RegisterBufferEvent
5 #GetReleasedAudioOutBuffers
6 #ContainsAudioOutBuffer
7 [3.0.0+] #AppendAudioOutBufferAuto
8 [3.0.0+] #GetReleasedAudioOutBuffersAuto
9 [4.0.0+] #GetAudioOutBufferCount
10 [4.0.0+] #GetAudioOutPlayedSampleCount
11 [4.0.0+] #FlushAudioOutBuffers
12 [6.0.0+] #SetAudioOutVolume
13 [6.0.0+] #GetAudioOutVolume

GetAudioOutState

Returns an u32 AudioOutState (0=Started, 1=Stopped).

Start

Starts audio playback using data from appended buffers.

Stop

Stops audio playback. This waits for audio playback to finish before returning.

AppendAudioOutBuffer

Takes a type-0x5 input buffer of AudioOutBuffer and a u64 which acts as a tag for the supplied buffer (official apps use the buffer's address).

RegisterBufferEvent

Returns an event handle that is signalled when a buffer is released.

GetReleasedAudioOutBuffers

Takes a type-0x6 output buffer which will be filled with the identifiers from #AppendAudioOutBuffer of audio buffers that have been released. Returns an u32 ReleasedBuffersCount.

ContainsAudioOutBuffer

Takes an u64 tag for the desired buffer. Returns 1 if the buffer was appended and not yet released.

AppendAudioOutBufferAuto

Same as #AppendAudioOutBuffer but takes a type-0x21 buffer instead.

GetReleasedAudioOutBuffersAuto

Same as #GetReleasedAudioOutBuffer but takes a type-0x22 buffer instead.

GetAudioOutBufferCount

Returns u32 amount of buffers awaiting playback.

GetAudioOutPlayedSampleCount

Returns u64 total amount of samples played back.

FlushAudioOutBuffers

Flushes all pending buffers. Returns 1 if buffers were pending.

SetAudioOutVolume

Set float playback volume for this interface.

GetAudioOutVolume

Get float playback volume for this interface. Default is 1.0.

audin:u

This is "nn::audio::detail::IAudioInManager".

Cmd Name
0 ListAudioIns
1 OpenAudioIn
2 [3.0.0+] ListAudioInsAuto
3 [3.0.0+] OpenAudioInAuto
4 [3.0.0+] ListAudioInsAutoFiltered
5 [5.0.0+] OpenAudioInProtocolSpecified

IAudioIn

This is "nn::audio::detail::IAudioIn".

Cmd Name
0 #GetAudioInState
1 Start
2 Stop
3 AppendAudioInBuffer
4 RegisterBufferEvent
5 GetReleasedAudioInBuffers
6 ContainsAudioInBuffer
7 [3.0.0+] AppendUacInBuffer
8 [3.0.0+] AppendAudioInBufferAuto
9 [3.0.0+] GetReleasedAudioInBuffersAuto
10 [3.0.0+] AppendUacInBufferAuto
11 [4.0.0+] GetAudioInBufferCount
12 [4.0.0+] SetDeviceGain
13 [4.0.0+] GetDeviceGain
14 [6.0.0+] FlushAudioInBuffers

GetAudioInState

Returns an u32 AudioInState (0=Started, 1=Stopped).

audrec:u

This is "nn::audio::detail::IFinalOutputRecorderManager".

Cmd Name
0 OpenFinalOutputRecorder

IFinalOutputRecorder

This is "nn::audio::detail::IFinalOutputRecorder".

Cmd Name
0 GetFinalOutputRecorderState
1 Start
2 Stop
3 AppendFinalOutputRecorderBuffer
4 RegisterBufferEvent
5 GetReleasedFinalOutputRecorderBuffers
6 ContainsFinalOutputRecorderBuffer
7 GetFinalOutputRecorderBufferEndTime
8 [3.0.0+] AppendFinalOutputRecorderBufferAuto
9 [3.0.0+] GetReleasedFinalOutputRecorderBuffersAuto
10 [6.0.0+] FlushFinalOutputRecorderBuffers
11 [9.0.0+] AttachWorkBuffer

auddev

This is "nn::audio::detail::IAudioSnoopManager".

This was added with [6.0.0+].

Cmd Name
0 EnableDspUsageMeasurement
1 DisableDspUsageMeasurement
6 GetDspUsage

audren:u

This is "nn::audio::detail::IAudioRendererManager".

Cmd Name
0 OpenAudioRenderer
1 GetWorkBufferSize
2 #GetAudioDeviceService
3 [3.0.0+] OpenAudioRendererForManualExecution
4 [4.0.0+] GetAudioDeviceServiceWithRevisionInfo

GetAudioDeviceService

Takes an input u64 AppletResourceUserId, returns an output #IAudioDevice.

IAudioRenderer

This is "nn::audio::detail::IAudioRenderer".

Cmd Name
0 #GetSampleRate
1 #GetSampleCount
2 #GetMixBufferCount
3 #GetState
4 RequestUpdate
5 Start
6 Stop
7 QuerySystemEvent
8 #SetRenderingTimeLimit
9 #GetRenderingTimeLimit
10 [3.0.0+] RequestUpdateAuto
11 [3.0.0+] ExecuteAudioRendererRendering

GetSampleRate

No input. Returns an u32 SampleRate.

GetSampleCount

No input. Returns an u32 SampleCount.

GetMixBufferCount

No input. Returns an u32 MixBufferCount.

GetState

No input. Returns an u32 State (0=Started, 1=Stopped).

SetRenderingTimeLimit

Takes an u32 RenderingTimeLimit. No output.

GetRenderingTimeLimit

No input. Returns an u32 RenderingTimeLimit.

IAudioDevice

This is "nn::audio::detail::IAudioDevice".

Cmd Name
0 #ListAudioDeviceName
1 #SetAudioDeviceOutputVolume
2 #GetAudioDeviceOutputVolume
3 GetActiveAudioDeviceName
4 QueryAudioDeviceSystemEvent
5 GetActiveChannelCount
6 [3.0.0+] #ListAudioDeviceNameAuto
7 [3.0.0+] #SetAudioDeviceOutputVolumeAuto
8 [3.0.0+] #GetAudioDeviceOutputVolumeAuto
10 [3.0.0+] GetActiveAudioDeviceNameAuto
11 [3.0.0+] QueryAudioDeviceInputEvent
12 [3.0.0+] QueryAudioDeviceOutputEvent
13 [5.0.0+] GetAudioSystemMasterVolumeSetting

ListAudioDeviceName

Takes a type-0x6 output buffer containing an array of DeviceName. Returns an output s32 for total number of output entries.

SetAudioDeviceOutputVolume

Takes a type-0x5 input buffer containing the DeviceName and a float. No output.

GetAudioDeviceOutputVolume

Takes a type-0x5 input buffer containing the DeviceName. Returns an output float.

ListAudioDeviceNameAuto

Takes a type-0x22 output buffer containing an array of DeviceName. Returns an output s32 for total number of output entries.

SetAudioDeviceOutputVolumeAuto

Takes a type-0x21 input buffer containing the DeviceName and a float. No output.

GetAudioDeviceOutputVolumeAuto

Takes a type-0x21 input buffer containing the DeviceName. Returns an output float.

audout:a

This is "nn::audio::detail::IAudioOutManagerForApplet".

This was removed with [11.0.0+].

Cmd Name
0 RequestSuspend
1 RequestResume
2 GetProcessMasterVolume
3 SetProcessMasterVolume
4 [4.0.0+] GetProcessRecordVolume
5 [4.0.0+] SetProcessRecordVolume

[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.

audin:a

This is "nn::audio::detail::IAudioInManagerForApplet".

This was removed with [11.0.0+].

Cmd Name
0 RequestSuspend
1 RequestResume
2 GetProcessMasterVolume
3 SetProcessMasterVolume

[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.

audrec:a

This is "nn::audio::detail::IFinalOutputRecorderManagerForApplet".

Cmd Name
0 RequestSuspend
1 RequestResume

[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.

audren:a

This is "nn::audio::detail::IAudioRendererManagerForApplet".

This was removed with [11.0.0+].

Cmd Name
0 RequestSuspend
1 RequestResume
2 GetProcessMasterVolume
3 SetProcessMasterVolume
4 RegisterAppletResourceUserId
5 UnregisterAppletResourceUserId
6 [4.0.0+] GetProcessRecordVolume
7 [4.0.0+] SetProcessRecordVolume

[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.

audout:d, audin:d, audrec:d, audren:d

This is "nn::audio::detail::IAudioOutManagerForDebugger", "nn::audio::detail::IAudioInManagerForDebugger", "nn::audio::detail::IFinalOutputRecorderManagerForDebugger", "nn::audio::detail::IAudioRendererManagerForDebugger".

These were removed with [11.0.0+].

Cmd Name
0 #RequestSuspend
1 #RequestResume

RequestSuspend

Takes an u64 AppletResourceUserId.

RequestResume

Takes an u64 AppletResourceUserId.

audctl

This is "nn::audioctrl::detail::IAudioController".

Cmd Name
0 GetTargetVolume
1 SetTargetVolume
2 GetTargetVolumeMin
3 GetTargetVolumeMax
4 IsTargetMute
5 SetTargetMute
6 IsTargetConnected
7 SetDefaultTarget
8 GetDefaultTarget
9 GetAudioOutputMode
10 SetAudioOutputMode
11 SetForceMutePolicy
12 GetForceMutePolicy
13 GetOutputModeSetting
14 SetOutputModeSetting
15 SetOutputTarget
16 SetInputTargetForceEnabled
17 [3.0.0+] SetHeadphoneOutputLevelMode
18 [3.0.0+] GetHeadphoneOutputLevelMode
19 [3.0.0+] AcquireAudioVolumeUpdateEventForPlayReport
20 [3.0.0+] AcquireAudioOutputDeviceUpdateEventForPlayReport
21 [3.0.0+] GetAudioOutputTargetForPlayReport
22 [3.0.0+] NotifyHeadphoneVolumeWarningDisplayedEvent
23 [4.0.0+] SetSystemOutputMasterVolume
24 [4.0.0+] GetSystemOutputMasterVolume
25 [4.0.0+] GetAudioVolumeDataForPlayReport
26 [4.0.0+] #UpdateHeadphoneSettings
27 [7.0.0+] SetVolumeMappingTableForDev
28 [10.0.0+] GetAudioOutputChannelCountForPlayReport
29 [10.0.0+] BindAudioOutputChannelCountUpdateEventForPlayReport

UpdateHeadphoneSettings

Takes one input bool. No output. NS calls this with the result of IParentalControlService::IsRestrictionEnabled[1].

codecctl

This is "nn::audio::detail::ICodecController".

This service no longer exists in [3.0.0+].

Cmd Name
0 #Initialize
1 #Finalize
2 #Sleep
3 #Wake
4 #SetVolume
5 #GetVolumeMax
6 #GetVolumeMin
7 #SetActiveTarget
8 #GetActiveTarget
9 #BindHeadphoneMicJackInterrupt
10 #IsHeadphoneMicJackInserted
11 #ClearHeadphoneMicJackInterrupt
12 #IsRequested

Initialize

No input/output.

Finalize

No input/output.

Sleep

No input/output.

Wake

No input/output.

SetVolume

Takes an u32 Volume. No output.

GetVolumeMax

No input. Returns an u32 VolumeMax.

GetVolumeMin

No input. Returns an u32 VolumeMin.

SetActiveTarget

Takes an u32 Target. No output.

GetActiveTarget

No input. Returns an u32 Target.

BindHeadphoneMicJackInterrupt

No input. Returns an event handle.

IsHeadphoneMicJackInserted

No input. Returns a bool.

ClearHeadphoneMicJackInterrupt

No input/output.

IsRequested

No input. Returns a bool.

hwopus

This is "nn::codec::detail::IHardwareOpusDecoderManager".

Cmd Name
0 #OpenHardwareOpusDecoder
1 #GetWorkBufferSize
2 [3.0.0+] #OpenHardwareOpusDecoderForMultiStream
3 [3.0.0+] #GetWorkBufferSizeForMultiStream

Official sw can use either software libopus, or hwopus via "nn::codec::HardwareOpus*" (separate from the former).

OpenHardwareOpusDecoder

Takes two s32s SampleRate and ChannelCount packed as an u64, an u32 WorkBufferSize and a TransferMemory handle for WorkBuffer. Returns an #IHardwareOpusDecoder object. The TransferMemory is created by the user-process with permissions=0.

GetWorkBufferSize

Takes two s32s SampleRate and ChannelCount packed as an u64. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment.

OpenHardwareOpusDecoderForMultiStream

Takes a type-0x19 input buffer, an u32 WorkBufferSize and a TransferMemory handle for WorkBuffer. Returns an #IHardwareOpusDecoder object. The TransferMemory is created by the user-process with permissions=0.

The input buffer is a #MultiStreamParameters struct. The user-process initializes this struct the same way as #GetWorkBufferSizeForMultiStream, except that an u8-array specified by the user is copied to +0x10 with size ChannelCount, when ChannelCount above 0.

GetWorkBufferSizeForMultiStream

Takes a type-0x19 input buffer. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment.

The input buffer is a #MultiStreamParameters struct.

IHardwareOpusDecoder

This is "nn::codec::detail::IHardwareOpusDecoder".

Cmd Name
0 [4.0.0+] #DecodeInterleavedOld ([1.0.0-3.0.2] DecodeInterleaved)
1 #SetContext
2 [4.0.0+] #DecodeInterleavedForMultiStreamOld ([3.0.0-3.0.2] DecodeInterleavedForMultiStream)
3 [3.0.0+] #SetContextForMultiStream
4 [6.0.0+] #DecodeInterleavedWithPerfOld ([4.0.0-5.1.0] DecodeInterleavedWithPerf)
5 [6.0.0+] #DecodeInterleavedForMultiStreamWithPerfOld ([4.0.0-5.1.0] DecodeInterleavedForMultiStreamWithPerf)
6 [6.0.0+] DecodeInterleavedWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleaved)
7 [6.0.0+] DecodeInterleavedForMultiStreamWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleavedForMultiStream)
8 [7.0.0+] #DecodeInterleaved
9 [7.0.0+] #DecodeInterleavedForMultiStream

DecodeInterleavedOld

Takes a type-0x5 input buffer (OpusDataIn) and a type-0x6 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize and s32 DecodedSampleCount.

Calls the same func as #DecodeInterleaved internally with flag=0 and out_u64_ptr=NULL.

SetContext

Takes a type-0x5 input buffer (DecoderContextIn). Sends the unknown context data to the hardware decoder. The input buffer is unused.

DecodeInterleavedForMultiStreamOld

Takes a type-0x5 input buffer (OpusDataIn) and a type-0x6 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize and s32 DecodedSampleCount.

Calls the same func as #DecodeInterleavedForMultiStream internally with flag=0 and out_u64_ptr=NULL.

SetContextForMultiStream

Takes a type-0x5 input buffer (DecoderContextIn). Sends the unknown context data to the hardware decoder.

DecodeInterleavedWithPerfOld

Takes a type-0x5 input buffer (OpusDataIn) and a type-0x46 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize, s32 DecodedSampleCount, and an u64.

The output u64 is ignored by official user-processes.

Calls the same func as #DecodeInterleaved internally with flag=0.

DecodeInterleavedForMultiStreamWithPerfOld

Takes a type-0x5 input buffer (OpusDataIn) and a type-0x46 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize, s32 DecodedSampleCount, and an u64.

The output u64 is ignored by official user-processes.

Calls the same func as #DecodeInterleavedForMultiStream internally with flag=0.

DecodeInterleaved

Takes an input u8 bool flag, a type-0x5 input buffer (OpusDataIn) and a type-0x46 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize, s32 DecodedSampleCount, and an u64.

The bool flag indicates whether or not a reset of the decoder context is being requested.

DecodeInterleavedForMultiStream

Takes an input u8 bool flag, a type-0x5 input buffer (OpusDataIn) and a type-0x46 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize, s32 DecodedSampleCount, and an u64.

The bool flag indicates whether or not a reset of the decoder context is being requested.

auddebug

This is "nn::audio::detail::IAudioDebugManager".

This service doesn't exist in retail units.

Cmd Name
0 ProfilerStart
1 ProfilerStop
2 CpuProfilerStart
3 CpuProfilerStop

aud:a

This is "nn::audio::detail::IAudioSystemManagerForApplet".

This was added with [11.0.0+].

Cmd Name
0 RegisterAppletResourceUserId
1 UnregisterAppletResourceUserId
2 RequestSuspendAudio
3 RequestResumeAudio
4 GetAudioOutputProcessMasterVolume
5 SetAudioOutputProcessMasterVolume
6 GetAudioInputProcessMasterVolume
7 SetAudioInputProcessMasterVolume
8 GetAudioOutputProcessRecordVolume
9 SetAudioOutputProcessRecordVolume

aud:d

This is "nn::audio::detail::IAudioSystemManagerForDebugger".

This was added with [11.0.0+].

Cmd Name
0 RequestSuspendAudioForDebug
1 RequestResumeAudioForDebug

SampleFormat

This is "nn::audio::SampleFormat".

Value Name
0 Invalid
1 PcmInt8
2 PcmInt16
3 PcmInt24
4 PcmInt32
5 PcmFloat
6 Adpcm

AudioOutBuffer

This is "nn::audio::AudioOutBuffer".

Offset Size Description
0x00 8 Pointer to next buffer (unused)
0x08 8 Pointer to sample buffer
0x10 8 Capacity of sample buffer
0x18 8 Size of data in the sample buffer
0x20 8 Offset of data in the sample buffer (unused/ignored?)

MultiStreamParameters

Offset Size Description
0x0 0x4 Sample rate (Hz)
0x4 0x4 Number of channels
0x8 0x4 Number of streams
0xC 0x4 Number of stereo streams
0x10 0x100 u8 array of channel mappings