Difference between revisions of "Audio services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 23: Line 23:
 
| 2 || StopAudioOut
 
| 2 || StopAudioOut
 
|-
 
|-
| 3 || AppendAudioOutBuffer
+
| 3 || [[#AppendAudioOutBuffer]] taking a type 0x5 (A descriptor) buffer
 
|-
 
|-
| 4 || RegisterBufferEvent
+
| 4 || [[#RegisterBufferEvent]]
 
|-
 
|-
| 5 || GetReleasedAudioOutBuffer
+
| 5 || [[#GetReleasedAudioOutBuffer]] taking a type 0x6 (B descriptor) buffer
 
|-
 
|-
 
| 6 || ContainsAudioOutBuffer
 
| 6 || ContainsAudioOutBuffer
 +
|-
 +
| 7 || [[#AppendAudioOutBuffer]] taking a type 0x21 buffer
 +
|-
 +
| 8 || [[#GetReleasedAudioOutBuffer]] taking a type 0x22 buffer
 
|}
 
|}
  
Line 35: Line 39:
  
 
Returns an AudioOutState, 0x00=Started 0x01=Stopped
 
Returns an AudioOutState, 0x00=Started 0x01=Stopped
 +
 +
=== AppendAudioOutBuffer ===
 +
 +
Takes a u64 (not sure what this is, might act as some sort of identifier for the audio buffer? official applications seem to use the address of the audio buffer struct for this) and a buffer.
 +
The format of said buffer is as follows:
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x00 || 8 || Some kind of pointer? This usually points to the sample data pointer.
 +
|-
 +
| 0x08 || 8 || Pointer to sample data.
 +
|-
 +
| 0x10 || 8 || Capacity of sample buffer
 +
|-
 +
| 0x18 || 8 || Size of data in sample buffer
 +
|-
 +
| 0x20 || 8 || Unknown. Zero works.
 +
|}
 +
 +
=== RegisterBufferEvent ===
 +
 +
Returns an event handle that is signalled when a buffer is released
 +
 +
=== GetReleasedAudioOutBuffer ===
 +
 +
Takes a buffer, which it will fill with the identifiers passed from [[#AppendAudioOutBuffer]] of audio buffers that have been released. Will return a u32 (may indicate how many buffers were released?)
  
 
= audout:a =
 
= audout:a =

Revision as of 20:04, 30 December 2017

audout:u

Cmd Name
0 ListAudioOuts
1 #OpenAudioOut

OpenAudioOut

Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an #IAudioOut object.

IAudioOut

Cmd Name
0 #GetAudioOutState
1 StartAudioOut
2 StopAudioOut
3 #AppendAudioOutBuffer taking a type 0x5 (A descriptor) buffer
4 #RegisterBufferEvent
5 #GetReleasedAudioOutBuffer taking a type 0x6 (B descriptor) buffer
6 ContainsAudioOutBuffer
7 #AppendAudioOutBuffer taking a type 0x21 buffer
8 #GetReleasedAudioOutBuffer taking a type 0x22 buffer

GetAudioOutState

Returns an AudioOutState, 0x00=Started 0x01=Stopped

AppendAudioOutBuffer

Takes a u64 (not sure what this is, might act as some sort of identifier for the audio buffer? official applications seem to use the address of the audio buffer struct for this) and a buffer. The format of said buffer is as follows:

Offset Size Description
0x00 8 Some kind of pointer? This usually points to the sample data pointer.
0x08 8 Pointer to sample data.
0x10 8 Capacity of sample buffer
0x18 8 Size of data in sample buffer
0x20 8 Unknown. Zero works.

RegisterBufferEvent

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

GetReleasedAudioOutBuffer

Takes a buffer, which it will fill with the identifiers passed from #AppendAudioOutBuffer of audio buffers that have been released. Will return a u32 (may indicate how many buffers were released?)

audout:a

Cmd Name
0 RequestSuspendAudioOuts
1 RequestResumeAudioOuts

audout:d

Cmd Name
0 #RequestSuspendAudioOutsForDebug
1 #RequestResumeAudioOutsForDebug

RequestSuspendAudioOutsForDebug

Takes an AppletResourceUserId. (u64)

RequestResumeAudioOutsForDebug

Takes an AppletResourceUserId. (u64)

audin:u

Cmd Name
0 ListAudioIns
1 OpenAudioIn

IAudioIn

Cmd Name
0 #GetAudioInState
1 StartAudioIn
2 StopAudioIn
3 AppendAudioInBuffer
4 RegisterBufferEvent
5 GetReleasedAudioInBuffer
6 ContainsAudioInBuffer

GetAudioInState

Returns an AudioInState, 0x00=Started 0x01=Stopped

audin:a

Cmd Name
0 RequestSuspendAudioIns
1 RequestResumeAudioIns

audin:d

Cmd Name
0 #RequestSuspendAudioInsForDebug
1 #RequestResumeAudioInsForDebug

RequestSuspendAudioInsForDebug

Takes an AppletResourceUserId. (u64)

RequestResumeAudioInsForDebug

Takes an AppletResourceUserId. (u64)

audrec:u

Cmd Name
0 OpenFinalOutputRecorder

IFinalOutputRecorder

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

audren:u

Cmd Name
0 OpenAudioRenderer
1 GetAudioRendererWorkBufferSize
2 GetAudioRenderersProcessMasterVolume
3 SetAudioRenderersProcessMasterVolume

IAudioRenderer

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

codecctl

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)