Difference between revisions of "Audio services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 10: Line 10:
 
| 1 || [[#OpenAudioOut]]
 
| 1 || [[#OpenAudioOut]]
 
|-
 
|-
| 2 || [[#ListAudioOutsEx]]
+
| 2 || [3.0.0+] [[#ListAudioOutsEx]]
 
|-
 
|-
| 3 || [[#OpenAudioOutEx]]
+
| 3 || [3.0.0+] [[#OpenAudioOutEx]]
 
|}
 
|}
  
Line 70: Line 70:
 
| 6 || [[#ContainsAudioOutBuffer]]
 
| 6 || [[#ContainsAudioOutBuffer]]
 
|-
 
|-
| 7 || [[#AppendAudioOutBufferEx]]
+
| 7 || [3.0.0+] [[#AppendAudioOutBufferEx]]
 
|-
 
|-
| 8 || [[#GetReleasedAudioOutBufferEx]]
+
| 8 || [3.0.0+] [[#GetReleasedAudioOutBufferEx]]
 
|}
 
|}
  
Line 129: Line 129:
 
|-
 
|-
 
| 1 || OpenAudioIn
 
| 1 || OpenAudioIn
 +
|-
 +
| 2 || [3.0.0+] ListAudioInsEx
 +
|-
 +
| 3 || [3.0.0+] OpenAudioInEx
 
|}
 
|}
  
Line 151: Line 155:
 
|-
 
|-
 
| 6 || ContainsAudioInBuffer
 
| 6 || ContainsAudioInBuffer
 +
|-
 +
| 7 ||
 +
|-
 +
| 8 || [3.0.0+] AppendAudioInBufferEx
 +
|-
 +
| 9 || [3.0.0+] GetReleasedAudioInBufferEx
 +
|-
 +
| 10 || [3.0.0+]
 
|}
 
|}
  

Revision as of 18:34, 19 February 2018

audout:u

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

Cmd Name
0 #ListAudioOuts
1 #OpenAudioOut
2 [3.0.0+] #ListAudioOutsEx
3 [3.0.0+] #OpenAudioOutEx

ListAudioOuts

Takes a type-6 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-5 input buffer (DeviceNameIn), a type-6 output buffer (DeviceNameOut), two u32s SampleRate (must be 48000) and ChannelCount (high u16 can't be 0, official apps pass 0xCAFE0000), one u64 ClientPID, a PID and a copy-handle. Returns an #IAudioOut object and four u32s: the sample rate, channel count, PCM format, and the initial AudioOutState.

PCM format

Value Name
0 Invalid
1 INT8
2 INT16
3 INT24
4 INT32
5 PCM Float
6 ADPCM

ListAudioOutsEx

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

OpenAudioOutEx

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

IAudioOut

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

Cmd Name
0 #GetAudioOutState
1 #StartAudioOut
2 #StopAudioOut
3 #AppendAudioOutBuffer
4 #RegisterBufferEvent
5 #GetReleasedAudioOutBuffer
6 #ContainsAudioOutBuffer
7 [3.0.0+] #AppendAudioOutBufferEx
8 [3.0.0+] #GetReleasedAudioOutBufferEx

GetAudioOutState

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

StartAudioOut

Starts audio playback using data from appended buffers.

StopAudioOut

Stops audio playback.

AppendAudioOutBuffer

Takes a type-5 input buffer for sample data and a u64 which acts as a tag for the supplied buffer (official apps use the buffer's address).

The format of the input buffer is as follows:

Offset Size Description
0x00 8 Pointer to next buffer
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

RegisterBufferEvent

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

GetReleasedAudioOutBuffer

Takes a type-6 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.

AppendAudioOutBufferEx

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

GetReleasedAudioOutBufferEx

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

audin:u

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

Cmd Name
0 ListAudioIns
1 OpenAudioIn
2 [3.0.0+] ListAudioInsEx
3 [3.0.0+] OpenAudioInEx

IAudioIn

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

Cmd Name
0 #GetAudioInState
1 StartAudioIn
2 StopAudioIn
3 AppendAudioInBuffer
4 RegisterBufferEvent
5 GetReleasedAudioInBuffer
6 ContainsAudioInBuffer
7
8 [3.0.0+] AppendAudioInBufferEx
9 [3.0.0+] GetReleasedAudioInBufferEx
10 [3.0.0+]

GetAudioInState

Returns an AudioInState, 0x00=Started 0x01=Stopped (u32)

audrec:u

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

Cmd Name
0 OpenFinalOutputRecorder

IFinalOutputRecorder

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

Cmd Name
0 GetFinalOutputRecorderState
1 StartFinalOutputRecorder
2 StopFinalOutputRecorder
3 AppendFinalOutputRecorderBuffer
4 RegisterBufferEvent
5 GetReleasedFinalOutputRecorderBuffer
6 ContainsFinalOutputRecorderBuffer

audren:u

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

Cmd Name
0 OpenAudioRenderer
1 GetAudioRendererWorkBufferSize
2 GetAudioRenderersProcessMasterVolume
3 SetAudioRenderersProcessMasterVolume

IAudioRenderer

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

Cmd Name
0 #GetAudioRendererSampleRate
1 #GetAudioRendererSampleCount
2 #GetAudioRendererMixBufferCount
3 #GetAudioRendererState
4 RequestUpdateAudioRenderer
5 StartAudioRenderer
6 StopAudioRenderer
7 QuerySystemEvent
8 #SetAudioRendererRenderingTimeLimit
9 #GetAudioRendererRenderingTimeLimit

GetAudioRendererSampleRate

Returns the Sample Rate. (u32)

GetAudioRendererSampleCount

Returns the Sample Count. (u32)

GetAudioRendererMixBufferCount

Returns the number of Mix Buffers. (u32)

GetAudioRendererState

Returns an AudioRenderState, 0x00=Started 0x01=Stopped (u32)

SetAudioRendererRenderingTimeLimit

Takes a upper limit of the rendering time in percent. (u32)

GetAudioRendererRenderingTimeLimit

Returns the upper limit of the rendering time in percent. (u32)

audout:a, audin:a, audrec:a, audren:a

This is "nn::audio::detail::IAudioOutManagerForApplet", "nn::audio::detail::IAudioInManagerForApplet", "nn::audio::detail::IFinalOutputRecorderManagerForApplet", "nn::audio::detail::IAudioRendererManagerForApplet".

Cmd Name
0 RequestSuspend
1 RequestResume

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".

Cmd Name
0 #RequestSuspendForDebug
1 #RequestResumeForDebug

RequestSuspendForDebug

Takes an AppletResourceUserId. (u64)

RequestResumeForDebug

Takes an AppletResourceUserId. (u64)

codecctl

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

Cmd Name
0 InitializeCodecController
1 FinalizeCodecController
2 SleepCodecController
3 WakeCodecController
4 #SetCodecVolume
5 GetCodecVolumeMax
6 GetCodecVolumeMin
7 SetCodecActiveTarget
8 Unknown
9 BindCodecHeadphoneMicJackInterrupt
10 IsCodecHeadphoneMicJackInserted
11 ClearCodecHeadphoneMicJackInterrupt
12 IsCodecDeviceRequested

SetCodecVolume

Takes a Volume (uint32)