Difference between revisions of "Audio services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 311: Line 311:
 
= codecctl =
 
= codecctl =
 
This is "nn::audio::detail::ICodecController".
 
This is "nn::audio::detail::ICodecController".
 +
 +
This service no longer exists in [3.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 316: Line 318:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || InitializeCodecController
+
| 0 || [[#InitializeCodecController]]
 
|-
 
|-
| 1 || FinalizeCodecController
+
| 1 || [[#FinalizeCodecController]]
 
|-
 
|-
| 2 || SleepCodecController
+
| 2 || [[#SleepCodecController]]
 
|-
 
|-
| 3 || WakeCodecController
+
| 3 || [[#WakeCodecController]]
 
|-
 
|-
 
| 4 || [[#SetCodecVolume]]
 
| 4 || [[#SetCodecVolume]]
 
|-
 
|-
| 5 || GetCodecVolumeMax
+
| 5 || [[#GetCodecVolumeMax]]
 
|-
 
|-
| 6 || GetCodecVolumeMin
+
| 6 || [[#GetCodecVolumeMin]]
 
|-
 
|-
| 7 || SetCodecActiveTarget
+
| 7 || [[#SetCodecActiveTarget]]
 
|-
 
|-
| 8 || Unknown
+
| 8 || [[#GetCodecActiveTarget]]
 
|-
 
|-
| 9 || BindCodecHeadphoneMicJackInterrupt
+
| 9 || [[#BindCodecHeadphoneMicJackInterrupt]]
 
|-
 
|-
| 10 || IsCodecHeadphoneMicJackInserted
+
| 10 || [[#IsCodecHeadphoneMicJackInserted]]
 
|-
 
|-
| 11 || ClearCodecHeadphoneMicJackInterrupt
+
| 11 || [[#ClearCodecHeadphoneMicJackInterrupt]]
 
|-
 
|-
| 12 || IsCodecDeviceRequested
+
| 12 || [[#IsCodecDeviceRequested]]
 
|}
 
|}
 +
 +
== InitializeCodecController ==
 +
Takes no input.
 +
 +
== FinalizeCodecController ==
 +
Takes no input.
 +
 +
== SleepCodecController ==
 +
Takes no input.
 +
 +
== WakeCodecController ==
 +
Takes no input.
  
 
== SetCodecVolume ==
 
== SetCodecVolume ==
 +
Takes an u32 '''Volume'''.
 +
 +
== GetCodecVolumeMax ==
 +
Returns an u32 '''VolumeMax'''.
 +
 +
== GetCodecVolumeMin ==
 +
Returns an u32 '''VolumeMin'''.
 +
 +
== SetCodecActiveTarget ==
 +
Takes an u32 '''Target'''.
 +
 +
== GetCodecActiveTarget ==
 +
Returns an u32 '''Target'''.
 +
 +
== BindCodecHeadphoneMicJackInterrupt ==
 +
Returns an event handle.
 +
 +
== IsCodecHeadphoneMicJackInserted ==
 +
Returns a bool.
 +
 +
== ClearCodecHeadphoneMicJackInterrupt ==
 +
Takes no input.
  
Takes a Volume (uint32)
+
== IsCodecDeviceRequested ==
 +
Returns a bool.
  
 
[[Category:Services]]
 
[[Category:Services]]

Revision as of 17:51, 25 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
9 [4.0.0+]
10 [4.0.0+]
11 [4.0.0+]

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
4 [3.0.0+] ListAudioInsExAndProbe

IAudioIn

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

Cmd Name
0 #GetAudioInState
1 StartAudioIn
2 StopAudioIn
3 AppendAudioInBuffer
4 RegisterBufferEvent
5 GetReleasedAudioInBuffer
6 ContainsAudioInBuffer
7 [3.0.0+] AppendAudioInBufferWithUserEvent
8 [3.0.0+] AppendAudioInBufferEx
9 [3.0.0+] GetReleasedAudioInBufferEx
10 [3.0.0+] AppendAudioInBufferWithUserEventEx
11 [4.0.0+]
12 [4.0.0+]
13 [4.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".

This service no longer exists in [3.0.0+].

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

InitializeCodecController

Takes no input.

FinalizeCodecController

Takes no input.

SleepCodecController

Takes no input.

WakeCodecController

Takes no input.

SetCodecVolume

Takes an u32 Volume.

GetCodecVolumeMax

Returns an u32 VolumeMax.

GetCodecVolumeMin

Returns an u32 VolumeMin.

SetCodecActiveTarget

Takes an u32 Target.

GetCodecActiveTarget

Returns an u32 Target.

BindCodecHeadphoneMicJackInterrupt

Returns an event handle.

IsCodecHeadphoneMicJackInserted

Returns a bool.

ClearCodecHeadphoneMicJackInterrupt

Takes no input.

IsCodecDeviceRequested

Returns a bool.