Difference between revisions of "Audio services"
(Add full interface name (imported from SwIPC)) |
|||
Line 6: | Line 6: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || ListAudioOuts | + | | 0 || [[#ListAudioOuts]] |
|- | |- | ||
| 1 || [[#OpenAudioOut]] | | 1 || [[#OpenAudioOut]] | ||
|} | |} | ||
+ | |||
+ | == 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 == | == OpenAudioOut == | ||
− | Takes two | + | 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|PCM format]], and the initial AudioOutState. | ||
=== PCM format === | === PCM format === | ||
− | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 34: | Line 38: | ||
| 6 || ADPCM | | 6 || ADPCM | ||
|} | |} | ||
− | |||
== IAudioOut == | == IAudioOut == | ||
Line 45: | Line 48: | ||
| 0 || [[#GetAudioOutState]] | | 0 || [[#GetAudioOutState]] | ||
|- | |- | ||
− | | 1 || StartAudioOut | + | | 1 || [[#StartAudioOut]] |
|- | |- | ||
− | | 2 || StopAudioOut | + | | 2 || [[#StopAudioOut]] |
|- | |- | ||
− | | 3 || [[#AppendAudioOutBuffer]] | + | | 3 || [[#AppendAudioOutBuffer]] |
|- | |- | ||
| 4 || [[#RegisterBufferEvent]] | | 4 || [[#RegisterBufferEvent]] | ||
|- | |- | ||
− | | 5 || [[#GetReleasedAudioOutBuffer]] | + | | 5 || [[#GetReleasedAudioOutBuffer]] |
|- | |- | ||
| 6 || [[#ContainsAudioOutBuffer]] | | 6 || [[#ContainsAudioOutBuffer]] | ||
|- | |- | ||
− | | 7 || [[# | + | | 7 || [[#AppendAudioOutBufferEx]] |
|- | |- | ||
− | | 8 || [[# | + | | 8 || [[#GetReleasedAudioOutBufferEx]] |
|} | |} | ||
=== GetAudioOutState === | === GetAudioOutState === | ||
+ | Returns an u32 '''AudioOutState''' (0x00=Started, 0x01=Stopped). | ||
− | + | === StartAudioOut === | |
+ | Starts audio playback using data from appended buffers. | ||
+ | |||
+ | === StopAudioOut === | ||
+ | Stops audio playback. | ||
=== AppendAudioOutBuffer === | === 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: | |
− | The format of | ||
− | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
− | | 0x00 || 8 || Pointer to | + | | 0x00 || 8 || Pointer to next buffer |
|- | |- | ||
− | | 0x08 || 8 || Pointer to sample | + | | 0x08 || 8 || Pointer to sample buffer |
|- | |- | ||
| 0x10 || 8 || Capacity of sample buffer | | 0x10 || 8 || Capacity of sample buffer | ||
|- | |- | ||
− | | 0x18 || 8 || Size of data in sample buffer | + | | 0x18 || 8 || Size of data in the sample buffer |
|- | |- | ||
− | | 0x20 || 8 || | + | | 0x20 || 8 || Offset of data in the sample buffer |
|} | |} | ||
=== RegisterBufferEvent === | === 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 = | = audin:u = | ||
Line 229: | Line 241: | ||
Returns the upper limit of the rendering time in percent. (u32) | Returns the upper limit of the rendering time in percent. (u32) | ||
− | = audout:a, audin:a, audrec:a | + | = 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". | This is "nn::audio::detail::IAudioOutManagerForApplet", "nn::audio::detail::IAudioInManagerForApplet", "nn::audio::detail::IFinalOutputRecorderManagerForApplet", "nn::audio::detail::IAudioRendererManagerForApplet". | ||
Line 241: | Line 253: | ||
|} | |} | ||
− | = audout:d, audin:d, audrec:d | + | = 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". | This is "nn::audio::detail::IAudioOutManagerForDebugger", "nn::audio::detail::IAudioInManagerForDebugger", "nn::audio::detail::IFinalOutputRecorderManagerForDebugger", "nn::audio::detail::IAudioRendererManagerForDebugger". | ||
Revision as of 20:34, 13 February 2018
audout:u
This is "nn::audio::detail::IAudioOutManager".
Cmd | Name |
---|---|
0 | #ListAudioOuts |
1 | #OpenAudioOut |
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 |
IAudioOut
This is "nn::audio::detail::IAudioOut".
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 |
IAudioIn
This is "nn::audio::detail::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 (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)