Audio services: Difference between revisions
Add full interface name (imported from SwIPC) |
No edit summary |
||
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". | ||