Difference between revisions of "Audio services"
(→audctl) |
|||
(46 intermediate revisions by 5 users not shown) | |||
Line 6: | Line 6: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || [[#ListAudioOuts]] | + | | 0 || [[#ListAudioOuts|ListAudioOuts]] |
|- | |- | ||
− | | 1 || [[#OpenAudioOut]] | + | | 1 || [[#OpenAudioOut|OpenAudioOut]] |
|- | |- | ||
− | | 2 || [3.0.0+] [[#ListAudioOutsAuto]] | + | | 2 || [3.0.0+] [[#ListAudioOutsAuto|ListAudioOutsAuto]] |
|- | |- | ||
− | | 3 || [3.0.0+] [[#OpenAudioOutAuto]] | + | | 3 || [3.0.0+] [[#OpenAudioOutAuto|OpenAudioOutAuto]] |
|} | |} | ||
== ListAudioOuts == | == ListAudioOuts == | ||
− | Takes a type- | + | Takes a type-0x6 output buffer containing an array of [[#AudioOutInfo]]. Returns an u32 '''Count'''. |
− | |||
== OpenAudioOut == | == OpenAudioOut == | ||
− | Takes a type- | + | Takes a PID-descriptor, a type-0x5 input buffer '''NameIn''', a type-0x6 output buffer '''NameOut''', an input [[#AudioOutParameter]], an input Process handle and an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an [[#IAudioOut]] and an output [[#AudioOutParameterInternal]]. |
− | Returns an [[#IAudioOut]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== ListAudioOutsAuto == | == ListAudioOutsAuto == | ||
Line 47: | Line 25: | ||
== OpenAudioOutAuto == | == OpenAudioOutAuto == | ||
− | Same as [[#OpenAudioOut]], but takes a type-0x21 input buffer instead. | + | Same as [[#OpenAudioOut]], but takes a type-0x21 input buffer and a type-0x22 output buffer instead. |
== IAudioOut == | == IAudioOut == | ||
Line 56: | Line 34: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || [[#GetAudioOutState]] | + | | 0 || [[#GetAudioOutState|GetAudioOutState]] |
|- | |- | ||
− | | 1 || [[# | + | | 1 || [[#Start|Start]] |
|- | |- | ||
− | | 2 || [[# | + | | 2 || [[#Stop|Stop]] |
|- | |- | ||
− | | 3 || [[#AppendAudioOutBuffer]] | + | | 3 || [[#AppendAudioOutBuffer|AppendAudioOutBuffer]] |
|- | |- | ||
− | | 4 || [[#RegisterBufferEvent]] | + | | 4 || [[#RegisterBufferEvent|RegisterBufferEvent]] |
|- | |- | ||
− | | 5 || [[# | + | | 5 || [[#GetReleasedAudioOutBuffers|GetReleasedAudioOutBuffers]] |
|- | |- | ||
− | | 6 || [[#ContainsAudioOutBuffer]] | + | | 6 || [[#ContainsAudioOutBuffer|ContainsAudioOutBuffer]] |
|- | |- | ||
− | | 7 || [3.0.0+] [[#AppendAudioOutBufferAuto]] | + | | 7 || [3.0.0+] [[#AppendAudioOutBufferAuto|AppendAudioOutBufferAuto]] |
|- | |- | ||
− | | 8 || [3.0.0+] [[# | + | | 8 || [3.0.0+] [[#GetReleasedAudioOutBuffersAuto|GetReleasedAudioOutBuffersAuto]] |
|- | |- | ||
− | | 9 || [4.0.0+] GetAudioOutBufferCount | + | | 9 || [4.0.0+] [[#GetAudioOutBufferCount|GetAudioOutBufferCount]] |
|- | |- | ||
− | | 10 || [4.0.0+] GetAudioOutPlayedSampleCount | + | | 10 || [4.0.0+] [[#GetAudioOutPlayedSampleCount|GetAudioOutPlayedSampleCount]] |
|- | |- | ||
− | | 11 || [4.0.0+] FlushAudioOutBuffers | + | | 11 || [4.0.0+] [[#FlushAudioOutBuffers|FlushAudioOutBuffers]] |
|- | |- | ||
− | | 12 || [6.0.0+] SetAudioOutVolume | + | | 12 || [6.0.0+] [[#SetAudioOutVolume|SetAudioOutVolume]] |
|- | |- | ||
− | | 13 || [6.0.0+] GetAudioOutVolume | + | | 13 || [6.0.0+] [[#GetAudioOutVolume|GetAudioOutVolume]] |
|} | |} | ||
=== GetAudioOutState === | === GetAudioOutState === | ||
− | Returns an | + | No input. Returns an output [[#AudioOutState]]. |
+ | |||
+ | === Start === | ||
+ | No input/output. | ||
− | |||
Starts audio playback using data from appended buffers. | Starts audio playback using data from appended buffers. | ||
− | === | + | === Stop === |
+ | No input/output. | ||
+ | |||
Stops audio playback. This waits for audio playback to finish before returning. | Stops audio playback. This waits for audio playback to finish before returning. | ||
=== AppendAudioOutBuffer === | === AppendAudioOutBuffer === | ||
− | Takes a type- | + | Takes a type-0x5 input buffer containing an [[#AudioOutBuffer]] and an input u64 '''BufferClientPtr'''. No output. |
+ | |||
+ | === RegisterBufferEvent === | ||
+ | No input. Returns an output Event handle. | ||
− | The | + | The event is signalled when a buffer is released. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | === | + | === GetReleasedAudioOutBuffers === |
− | Returns an | + | Takes a type-0x6 output buffer '''AudioBuffer'''. Returns an output u32 '''Count'''. |
− | + | '''AudioBuffer''' will be filled with the identifiers from [[#AppendAudioOutBuffer]] of audio buffers that have been released. | |
− | |||
− | |||
=== ContainsAudioOutBuffer === | === ContainsAudioOutBuffer === | ||
− | Takes an u64 ''' | + | Takes an input u64 '''AudioBufferPointer'''. Returns an output bool '''Contains'''. |
=== AppendAudioOutBufferAuto === | === AppendAudioOutBufferAuto === | ||
− | Same as [[#AppendAudioOutBuffer]] but takes a type-0x21 buffer instead. | + | Same as [[#AppendAudioOutBuffer]], but takes a type-0x21 buffer instead. |
+ | |||
+ | === GetReleasedAudioOutBuffersAuto === | ||
+ | Same as [[#GetReleasedAudioOutBuffer]], but takes a type-0x22 buffer instead. | ||
+ | |||
+ | === GetAudioOutBufferCount === | ||
+ | No input. Returns an output u32 '''AudioOutBufferCount'''. | ||
+ | |||
+ | === GetAudioOutPlayedSampleCount === | ||
+ | No input. Returns an output u64 '''AudioOutPlayedSampleCount'''. | ||
+ | |||
+ | === FlushAudioOutBuffers === | ||
+ | No input. Returns an output bool '''Pending'''. | ||
+ | |||
+ | === SetAudioOutVolume === | ||
+ | Takes an input float '''AudioOutVolume'''. No output. | ||
− | === | + | === GetAudioOutVolume === |
− | + | No input. Returns an output float '''AudioOutVolume'''. | |
= audin:u = | = audin:u = | ||
Line 136: | Line 120: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || ListAudioIns | + | | 0 || [[#ListAudioIns|ListAudioIns]] |
+ | |- | ||
+ | | 1 || [[#OpenAudioIn|OpenAudioIn]] | ||
|- | |- | ||
− | | | + | | 2 || [3.0.0+] [[#ListAudioInsAuto|ListAudioInsAuto]] |
|- | |- | ||
− | | | + | | 3 || [3.0.0+] [[#OpenAudioInAuto|OpenAudioInAuto]] |
|- | |- | ||
− | | | + | | 4 || [3.0.0+] [[#ListAudioInsAutoFiltered|ListAudioInsAutoFiltered]] |
|- | |- | ||
− | | | + | | 5 || [5.0.0+] [[#OpenAudioInProtocolSpecified|OpenAudioInProtocolSpecified]] |
|} | |} | ||
+ | |||
+ | == ListAudioIns == | ||
+ | Takes a type-0x6 output buffer containing an array of [[#AudioInInfo]]. Returns an u32 '''Count'''. | ||
+ | |||
+ | == OpenAudioIn == | ||
+ | Takes a PID-descriptor, a type-0x5 input buffer '''NameIn''', a type-0x6 output buffer '''NameOut''', an input [[#AudioInParameter]], an input Process handle and an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an [[#IAudioIn]] and an an output [[#AudioInParameterInternal]]. | ||
+ | |||
+ | == ListAudioInsAuto == | ||
+ | Same as [[#ListAudioIns]], but takes a type-0x22 output buffer instead. | ||
+ | |||
+ | == OpenAudioInAuto == | ||
+ | Same as [[#OpenAudioIn]], but takes a type-0x21 input buffer and a type-0x22 output buffer instead. | ||
+ | |||
+ | == ListAudioInsAutoFiltered == | ||
+ | Same as [[#ListAudioInsAuto]]. | ||
+ | |||
+ | == OpenAudioInProtocolSpecified == | ||
+ | Same as [[#OpenAudioIn]], but takes an additional input u64 '''Protocol'''. | ||
== IAudioIn == | == IAudioIn == | ||
Line 154: | Line 158: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || [[#GetAudioInState]] | + | | 0 || [[#GetAudioInState|GetAudioInState]] |
|- | |- | ||
− | | 1 || | + | | 1 || [[#Start_2|Start]] |
|- | |- | ||
− | | 2 || | + | | 2 || [[#Stop_2|Stop]] |
|- | |- | ||
− | | 3 || AppendAudioInBuffer | + | | 3 || [[#AppendAudioInBuffer|AppendAudioInBuffer]] |
|- | |- | ||
− | | 4 || RegisterBufferEvent | + | | 4 || [[#RegisterBufferEvent_2|RegisterBufferEvent]] |
|- | |- | ||
− | | 5 || | + | | 5 || [[#GetReleasedAudioInBuffers|GetReleasedAudioInBuffers]] |
|- | |- | ||
− | | 6 || ContainsAudioInBuffer | + | | 6 || [[#ContainsAudioInBuffer|ContainsAudioInBuffer]] |
|- | |- | ||
− | | 7 || [3.0.0+] | + | | 7 || [3.0.0+] [[#AppendUacInBuffer|AppendUacInBuffer]] |
|- | |- | ||
− | | 8 || [3.0.0+] AppendAudioInBufferAuto | + | | 8 || [3.0.0+] [[#AppendAudioInBufferAuto|AppendAudioInBufferAuto]] |
|- | |- | ||
− | | 9 || [3.0.0+] | + | | 9 || [3.0.0+] [[#GetReleasedAudioInBuffersAuto|GetReleasedAudioInBuffersAuto]] |
|- | |- | ||
− | | 10 || [3.0.0+] | + | | 10 || [3.0.0+] [[#AppendUacInBufferAuto|AppendUacInBufferAuto]] |
|- | |- | ||
− | | 11 || [4.0.0+] GetAudioInBufferCount | + | | 11 || [4.0.0+] [[#GetAudioInBufferCount|GetAudioInBufferCount]] |
|- | |- | ||
− | | 12 || [4.0.0+] | + | | 12 || [4.0.0+] [[#SetDeviceGain|SetDeviceGain]] |
|- | |- | ||
− | | 13 || [4.0.0+] | + | | 13 || [4.0.0+] [[#GetDeviceGain|GetDeviceGain]] |
|- | |- | ||
− | | 14 || [6.0.0+] FlushAudioInBuffers | + | | 14 || [6.0.0+] [[#FlushAudioInBuffers|FlushAudioInBuffers]] |
|} | |} | ||
=== GetAudioInState === | === GetAudioInState === | ||
− | Returns an u32 ''' | + | No input. Returns an output [[#AudioInState]]. |
+ | |||
+ | === Start === | ||
+ | No input/output. | ||
+ | |||
+ | === Stop === | ||
+ | No input/output. | ||
+ | |||
+ | === AppendAudioInBuffer === | ||
+ | Takes a type-0x5 input buffer containing an [[#AudioInBuffer]] and an input u64 '''BufferClientPtr'''. No output. | ||
+ | |||
+ | === RegisterBufferEvent === | ||
+ | No input. Returns an output Event handle. | ||
+ | |||
+ | The event is signalled when a buffer is released. | ||
+ | |||
+ | === GetReleasedAudioInBuffers === | ||
+ | Takes a type-0x6 output buffer '''AudioBuffer'''. Returns an output u32 '''Count'''. | ||
+ | |||
+ | '''AudioBuffer''' will be filled with the identifiers from [[#AppendAudioInBuffer]] of audio buffers that have been released. | ||
+ | |||
+ | === ContainsAudioInBuffer === | ||
+ | Takes an input u64 '''AudioBufferPointer'''. Returns an output bool '''Contains'''. | ||
+ | |||
+ | === AppendUacInBuffer === | ||
+ | Takes a type-0x5 input buffer containing an '''UacInBuffer''', an input u64 '''BufferClientPtr''' and an input Event handle. No output. | ||
+ | |||
+ | === AppendAudioInBufferAuto === | ||
+ | Same as [[#AppendAudioInBuffer]], but takes a type-0x21 buffer instead. | ||
+ | |||
+ | === GetReleasedAudioInBuffersAuto === | ||
+ | Same as [[#GetReleasedAudioInBuffer]], but takes a type-0x22 buffer instead. | ||
+ | |||
+ | === AppendUacInBufferAuto === | ||
+ | Same as [[#AppendUacInBuffer]], but takes a type-0x21 buffer instead. | ||
+ | |||
+ | === GetAudioInBufferCount === | ||
+ | No input. Returns an output u32 '''AudioInBufferCount'''. | ||
+ | |||
+ | === SetDeviceGain === | ||
+ | Takes an input float '''DeviceGain'''. No output. | ||
+ | |||
+ | === GetDeviceGain === | ||
+ | No input. Returns an output float '''DeviceGain'''. | ||
+ | |||
+ | === FlushAudioInBuffers === | ||
+ | No input. Returns an output bool '''Pending'''. | ||
= audrec:u = | = audrec:u = | ||
Line 195: | Line 245: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || OpenFinalOutputRecorder | + | | 0 || [[#OpenFinalOutputRecorder]] |
|} | |} | ||
+ | |||
+ | == OpenFinalOutputRecorder == | ||
+ | Takes an input [[#FinalOutputRecorderParameter]], an input Process handle and an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an [[#IFinalOutputRecorder]] and an output [[#FinalOutputRecorderParameterInternal]]. | ||
== IFinalOutputRecorder == | == IFinalOutputRecorder == | ||
Line 205: | Line 258: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || GetFinalOutputRecorderState | + | | 0 || [[#GetFinalOutputRecorderState|GetFinalOutputRecorderState]] |
+ | |- | ||
+ | | 1 || [[#Start_3|Start]] | ||
+ | |- | ||
+ | | 2 || [[#Stop_3|Stop]] | ||
+ | |- | ||
+ | | 3 || [[#AppendFinalOutputRecorderBuffer|AppendFinalOutputRecorderBuffer]] | ||
+ | |- | ||
+ | | 4 || [[#RegisterBufferEvent_3|RegisterBufferEvent]] | ||
+ | |- | ||
+ | | 5 || [[#GetReleasedFinalOutputRecorderBuffers|GetReleasedFinalOutputRecorderBuffers]] | ||
|- | |- | ||
− | | | + | | 6 || [[#ContainsFinalOutputRecorderBuffer|ContainsFinalOutputRecorderBuffer]] |
|- | |- | ||
− | | | + | | 7 || [[#GetFinalOutputRecorderBufferEndTime|GetFinalOutputRecorderBufferEndTime]] |
|- | |- | ||
− | | 3 | | + | | 8 || [3.0.0+] [[#AppendFinalOutputRecorderBufferAuto|AppendFinalOutputRecorderBufferAuto]] |
|- | |- | ||
− | | | + | | 9 || [3.0.0+] [[#GetReleasedFinalOutputRecorderBuffersAuto|GetReleasedFinalOutputRecorderBuffersAuto]] |
|- | |- | ||
− | | | + | | 10 || [6.0.0+] [[#FlushFinalOutputRecorderBuffers|FlushFinalOutputRecorderBuffers]] |
|- | |- | ||
− | | | + | | 11 || [9.0.0+] [[#AttachWorkBuffer|AttachWorkBuffer]] |
+ | |} | ||
+ | |||
+ | === GetFinalOutputRecorderState === | ||
+ | No input. Returns an output [[#FinalOutputRecorderState]]. | ||
+ | |||
+ | === Start === | ||
+ | No input/output. | ||
+ | |||
+ | === Stop === | ||
+ | No input/output. | ||
+ | |||
+ | === AppendFinalOutputRecorderBuffer === | ||
+ | Takes a type-0x5 input buffer containing an [[#FinalOutputRecorderBuffer]] and an input u64 '''BufferClientPtr'''. No output. | ||
+ | |||
+ | === RegisterBufferEvent === | ||
+ | No input. Returns an output Event handle. | ||
+ | |||
+ | The event is signalled when a buffer is released. | ||
+ | |||
+ | === GetReleasedFinalOutputRecorderBuffers === | ||
+ | Takes a type-0x6 output buffer '''FinalOutputRecorderBuffer'''. Returns two output u64s '''Count''' and '''Released'''. | ||
+ | |||
+ | '''FinalOutputRecorderBuffer''' will be filled with the identifiers from [[#AppendFinalOutputRecorderBuffer]] of recorder buffers that have been released. | ||
+ | |||
+ | === ContainsFinalOutputRecorderBuffer === | ||
+ | Takes an input u64 '''FinalOutputRecorderBufferPointer'''. Returns an output bool '''Contains'''. | ||
+ | |||
+ | === GetFinalOutputRecorderBufferEndTime === | ||
+ | Takes an input u64 '''FinalOutputRecorderBufferPointer'''. Returns an output u64 '''Released'''. | ||
+ | |||
+ | === AppendFinalOutputRecorderBufferAuto === | ||
+ | Same as [[#AppendFinalOutputRecorderBuffer]], but takes a type-0x21 buffer instead. | ||
+ | |||
+ | === GetReleasedFinalOutputRecorderBuffersAuto === | ||
+ | Same as [[#GetReleasedFinalOutputRecorderBuffers]], but takes a type-0x22 buffer instead. | ||
+ | |||
+ | === FlushFinalOutputRecorderBuffers === | ||
+ | No input. Returns an output bool '''Pending'''. | ||
+ | |||
+ | === AttachWorkBuffer === | ||
+ | Takes an input [[#FinalOutputRecorderWorkBufferParameterInternal]]. No output. | ||
+ | |||
+ | = auddev = | ||
+ | This is "nn::audio::detail::IAudioSnoopManager". | ||
+ | |||
+ | This was added with [6.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
|- | |- | ||
− | | | + | ! Cmd || Name |
|- | |- | ||
− | | | + | | 0 || [17.0.0+] GetDspStatistics ([6.0.0-16.1.0] EnableDspUsageMeasurement) |
|- | |- | ||
− | | | + | | 1 || [6.0.0-16.1.0] DisableDspUsageMeasurement |
|- | |- | ||
− | | | + | | 6 || [6.0.0-16.1.0] GetDspUsage |
|} | |} | ||
Line 279: | Line 390: | ||
|- | |- | ||
| 11 || [3.0.0+] ExecuteAudioRendererRendering | | 11 || [3.0.0+] ExecuteAudioRendererRendering | ||
+ | |- | ||
+ | | 12 || [15.0.0+] SetVoiceDropParameter | ||
+ | |- | ||
+ | | 13 || [15.0.0+] GetVoiceDropParameter | ||
|} | |} | ||
=== GetSampleRate === | === GetSampleRate === | ||
− | Returns | + | No input. Returns an u32 '''SampleRate'''. |
=== GetSampleCount === | === GetSampleCount === | ||
− | Returns | + | No input. Returns an u32 '''SampleCount'''. |
=== GetMixBufferCount === | === GetMixBufferCount === | ||
− | Returns | + | No input. Returns an u32 '''MixBufferCount'''. |
− | === | + | === GetState === |
− | Returns an | + | No input. Returns an u32 '''State''' (0=Started, 1=Stopped). |
=== SetRenderingTimeLimit === | === SetRenderingTimeLimit === | ||
− | Takes | + | Takes an u32 '''RenderingTimeLimit'''. No output. |
=== GetRenderingTimeLimit === | === GetRenderingTimeLimit === | ||
− | Returns | + | No input. Returns an u32 '''RenderingTimeLimit'''. |
== IAudioDevice == | == IAudioDevice == | ||
Line 330: | Line 445: | ||
| 12 || [3.0.0+] QueryAudioDeviceOutputEvent | | 12 || [3.0.0+] QueryAudioDeviceOutputEvent | ||
|- | |- | ||
− | | 13 || [5.0.0+] | + | | 13 || [13.0.0+] [[#GetActiveAudioOutputDeviceName]] ([5.0.0-12.1.0] [[#GetAudioSystemMasterVolumeSetting]]) |
+ | |- | ||
+ | | 14 || [13.0.0+] ListAudioOutputDeviceName | ||
+ | |- | ||
+ | | 15 || [17.0.0+] AcquireAudioInputDeviceNotification | ||
+ | |- | ||
+ | | 16 || [17.0.0+] ReleaseAudioInputDeviceNotification | ||
+ | |- | ||
+ | | 17 || [17.0.0+] AcquireAudioOutputDeviceNotification | ||
+ | |- | ||
+ | | 18 || [17.0.0+] ReleaseAudioOutputDeviceNotification | ||
+ | |- | ||
+ | | 19 || [18.0.0+] SetAudioDeviceOutputVolumeAutoTuneEnabled | ||
+ | |- | ||
+ | | 20 || [18.0.0+] IsAudioDeviceOutputVolumeAutoTuneEnabled | ||
|} | |} | ||
=== ListAudioDeviceName === | === ListAudioDeviceName === | ||
− | Takes a type-0x6 output buffer containing an array of '''DeviceName''' | + | Takes a type-0x6 output buffer containing an array of '''DeviceName'''. Returns an output s32 for total number of output entries. |
=== SetAudioDeviceOutputVolume === | === SetAudioDeviceOutputVolume === | ||
Line 343: | Line 472: | ||
=== ListAudioDeviceNameAuto === | === ListAudioDeviceNameAuto === | ||
− | Takes a type-0x22 output buffer containing an array of '''DeviceName''' | + | Takes a type-0x22 output buffer containing an array of '''DeviceName'''. Returns an output s32 for total number of output entries. |
=== SetAudioDeviceOutputVolumeAuto === | === SetAudioDeviceOutputVolumeAuto === | ||
Line 350: | Line 479: | ||
=== GetAudioDeviceOutputVolumeAuto === | === GetAudioDeviceOutputVolumeAuto === | ||
Takes a type-0x21 input buffer containing the '''DeviceName'''. Returns an output float. | Takes a type-0x21 input buffer containing the '''DeviceName'''. Returns an output float. | ||
+ | |||
+ | === GetAudioSystemMasterVolumeSetting === | ||
+ | Takes a type-0x5 input buffer, returns 4-bytes of output. | ||
+ | |||
+ | === GetActiveAudioOutputDeviceName === | ||
+ | Takes a type-0x6 output buffer, returns no output. | ||
= audout:a = | = audout:a = | ||
This is "nn::audio::detail::IAudioOutManagerForApplet". | This is "nn::audio::detail::IAudioOutManagerForApplet". | ||
+ | |||
+ | This was removed with [11.0.0+]. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 358: | Line 495: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || | + | | 0 || RequestSuspend |
|- | |- | ||
− | | 1 || | + | | 1 || RequestResume |
|- | |- | ||
− | | 2 || | + | | 2 || GetProcessMasterVolume |
|- | |- | ||
− | | 3 || | + | | 3 || SetProcessMasterVolume |
|- | |- | ||
− | | 4 || [4.0.0+] | + | | 4 || [4.0.0+] GetProcessRecordVolume |
|- | |- | ||
− | | 5 || [4.0.0+] | + | | 5 || [4.0.0+] SetProcessRecordVolume |
|} | |} | ||
+ | |||
+ | [4.0.0+] RequestSuspend/RequestResume no longer returns an output handle. | ||
= audin:a = | = audin:a = | ||
This is "nn::audio::detail::IAudioInManagerForApplet". | This is "nn::audio::detail::IAudioInManagerForApplet". | ||
+ | |||
+ | This was removed with [11.0.0+]. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 378: | Line 519: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || | + | | 0 || RequestSuspend |
|- | |- | ||
− | | 1 || | + | | 1 || RequestResume |
|- | |- | ||
− | | 2 || | + | | 2 || GetProcessMasterVolume |
|- | |- | ||
− | | 3 || | + | | 3 || SetProcessMasterVolume |
|} | |} | ||
+ | |||
+ | [4.0.0+] RequestSuspend/RequestResume no longer returns an output handle. | ||
= audrec:a = | = audrec:a = | ||
Line 394: | Line 537: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || | + | | 0 || RequestSuspend |
|- | |- | ||
− | | 1 || | + | | 1 || RequestResume |
|} | |} | ||
+ | |||
+ | [4.0.0+] RequestSuspend/RequestResume no longer returns an output handle. | ||
= audren:a = | = audren:a = | ||
This is "nn::audio::detail::IAudioRendererManagerForApplet". | This is "nn::audio::detail::IAudioRendererManagerForApplet". | ||
+ | |||
+ | This was removed with [11.0.0+]. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 406: | Line 553: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || | + | | 0 || RequestSuspend |
|- | |- | ||
− | | 1 || | + | | 1 || RequestResume |
|- | |- | ||
− | | 2 || | + | | 2 || GetProcessMasterVolume |
|- | |- | ||
− | | 3 || | + | | 3 || SetProcessMasterVolume |
|- | |- | ||
| 4 || RegisterAppletResourceUserId | | 4 || RegisterAppletResourceUserId | ||
Line 418: | Line 565: | ||
| 5 || UnregisterAppletResourceUserId | | 5 || UnregisterAppletResourceUserId | ||
|- | |- | ||
− | | 6 || [4.0.0+] | + | | 6 || [4.0.0+] GetProcessRecordVolume |
|- | |- | ||
− | | 7 || [4.0.0+] | + | | 7 || [4.0.0+] SetProcessRecordVolume |
|} | |} | ||
+ | |||
+ | [4.0.0+] RequestSuspend/RequestResume no longer returns an output handle. | ||
= audout:d, audin:d, audrec:d, audren: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". | ||
+ | |||
+ | These were removed with [11.0.0+]. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 430: | Line 581: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || [[# | + | | 0 || [[#RequestSuspend]] |
|- | |- | ||
− | | 1 || [[# | + | | 1 || [[#RequestResume]] |
|} | |} | ||
− | == | + | == RequestSuspend == |
Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]]. | Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]]. | ||
− | == | + | == RequestResume == |
Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]]. | Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]]. | ||
Line 460: | Line 611: | ||
| 5 || SetTargetMute | | 5 || SetTargetMute | ||
|- | |- | ||
− | | 6 || IsTargetConnected | + | | 6 || [1.0.0-17.0.1] IsTargetConnected |
|- | |- | ||
| 7 || SetDefaultTarget | | 7 || SetDefaultTarget | ||
Line 470: | Line 621: | ||
| 10 || SetAudioOutputMode | | 10 || SetAudioOutputMode | ||
|- | |- | ||
− | | 11 || SetForceMutePolicy | + | | 11 || [1.0.0-13.2.1] SetForceMutePolicy |
|- | |- | ||
− | | 12 || GetForceMutePolicy | + | | 12 || [1.0.0-13.2.1] GetForceMutePolicy |
|- | |- | ||
| 13 || GetOutputModeSetting | | 13 || GetOutputModeSetting | ||
Line 486: | Line 637: | ||
| 18 || [3.0.0+] GetHeadphoneOutputLevelMode | | 18 || [3.0.0+] GetHeadphoneOutputLevelMode | ||
|- | |- | ||
− | | 19 || [3.0.0 | + | | 19 || [17.0.0+] SetForceMonauralOutputModeEnabled ([3.0.0-13.2.1] AcquireAudioVolumeUpdateEventForPlayReport) |
|- | |- | ||
− | | 20 || [3.0.0 | + | | 20 || [17.0.0+] IsForceMonauralOutputModeEnabled ([3.0.0-13.2.1] AcquireAudioOutputDeviceUpdateEventForPlayReport) |
|- | |- | ||
− | | 21 || [3.0.0 | + | | 21 || [3.0.0-13.2.1] GetAudioOutputTargetForPlayReport |
|- | |- | ||
| 22 || [3.0.0+] NotifyHeadphoneVolumeWarningDisplayedEvent | | 22 || [3.0.0+] NotifyHeadphoneVolumeWarningDisplayedEvent | ||
Line 498: | Line 649: | ||
| 24 || [4.0.0+] GetSystemOutputMasterVolume | | 24 || [4.0.0+] GetSystemOutputMasterVolume | ||
|- | |- | ||
− | | 25 || [4.0.0 | + | | 25 || [4.0.0-13.2.1] [[#GetAudioVolumeDataForPlayReport]] |
|- | |- | ||
− | | 26 || [4.0.0 | + | | 26 || [4.0.0-14.1.2] [[#UpdateHeadphoneSettings]] |
|- | |- | ||
− | | 27 || [7.0.0+] | + | | 27 || [7.0.0-16.1.0] SetVolumeMappingTableForDev |
+ | |- | ||
+ | | 28 || [10.0.0-13.2.1] GetAudioOutputChannelCountForPlayReport | ||
+ | |- | ||
+ | | 29 || [10.0.0-13.2.1] BindAudioOutputChannelCountUpdateEventForPlayReport | ||
+ | |- | ||
+ | | 30 || [13.0.0+] SetSpeakerAutoMuteEnabled | ||
+ | |- | ||
+ | | 31 || [13.0.0+] IsSpeakerAutoMuteEnabled | ||
+ | |- | ||
+ | | 32 || [13.0.0+] GetActiveOutputTarget | ||
+ | |- | ||
+ | | 33 || [13.0.0+] GetTargetDeviceInfo | ||
+ | |- | ||
+ | | 34 || [13.0.0+] AcquireTargetNotification | ||
+ | |- | ||
+ | | 35 || [14.0.0-14.1.2] SetHearingProtectionSafeguardTimerRemainingTimeForDebug | ||
+ | |- | ||
+ | | 36 || [14.0.0-14.1.2] GetHearingProtectionSafeguardTimerRemainingTimeForDebug | ||
+ | |- | ||
+ | | 37 || [14.0.0-14.1.2] SetHearingProtectionSafeguardEnabled | ||
+ | |- | ||
+ | | 38 || [14.0.0-14.1.2] IsHearingProtectionSafeguardEnabled | ||
+ | |- | ||
+ | | 39 || [14.0.0-14.1.2] IsHearingProtectionSafeguardMonitoringOutputForDebug | ||
+ | |- | ||
+ | | 40 || [14.0.0+] [[#GetSystemInformationForDebug]] | ||
+ | |- | ||
+ | | 41 || [15.0.0+] SetVolumeButtonLongPressTime | ||
+ | |- | ||
+ | | 42 || [15.0.0+] SetNativeVolumeForDebug | ||
+ | |- | ||
+ | | 5000 || [19.0.0+] | ||
+ | |- | ||
+ | | 10000 || [13.0.0+] NotifyAudioOutputTargetForPlayReport | ||
+ | |- | ||
+ | | 10001 || [13.0.0+] NotifyAudioOutputChannelCountForPlayReport | ||
+ | |- | ||
+ | | 10002 || [13.0.0+] NotifyUnsupportedUsbOutputDeviceAttachedForPlayReport | ||
+ | |- | ||
+ | | 10100 || [14.0.0+] GetAudioVolumeDataForPlayReport | ||
+ | |- | ||
+ | | 10101 || [14.0.0+] BindAudioVolumeUpdateEventForPlayReport | ||
+ | |- | ||
+ | | 10102 || [14.0.0+] BindAudioOutputTargetUpdateEventForPlayReport | ||
+ | |- | ||
+ | | 10103 || [14.0.0+] GetAudioOutputTargetForPlayReport | ||
+ | |- | ||
+ | | 10104 || [14.0.0+] GetAudioOutputChannelCountForPlayReport | ||
+ | |- | ||
+ | | 10105 || [14.0.0+] BindAudioOutputChannelCountUpdateEventForPlayReport | ||
+ | |- | ||
+ | | 10106 || [14.0.0+] GetDefaultAudioOutputTargetForPlayReport | ||
+ | |- | ||
+ | | 50000 || [15.0.0-18.1.0] SetAnalogInputBoostGainForPrototyping | ||
+ | |- | ||
+ | | 50001 || [19.0.0+] OverrideDefaultTargetForDebug | ||
+ | |- | ||
+ | | 50003 || [19.0.0+] SetForceOverrideExternalDeviceNameForDebug | ||
+ | |- | ||
+ | | 50004 || [19.0.0+] ClearForceOverrideExternalDeviceNameForDebug | ||
|} | |} | ||
+ | |||
+ | == GetAudioVolumeDataForPlayReport == | ||
+ | No input, returns a total of 7-bytes of output. | ||
+ | |||
+ | [13.0.0+] No input, returns a total of 9-bytes of output. | ||
+ | |||
+ | == UpdateHeadphoneSettings == | ||
+ | Takes one input bool. No output. | ||
+ | NS calls this with the result of [[Parental_Control_services#IParentalControlService|IParentalControlService::IsRestrictionEnabled]]. | ||
+ | |||
+ | == GetSystemInformationForDebug == | ||
+ | Takes a type-0x1A output buffer. | ||
+ | |||
+ | [15.0.0+] Now takes a type-0x16 output buffer. | ||
+ | |||
+ | [18.0.0+] Originally the output buffer was a binary structure, now it's just a string. | ||
= codecctl = | = codecctl = | ||
Line 514: | Line 741: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || [[# | + | | 0 || [[#Initialize]] |
|- | |- | ||
− | | 1 || [[# | + | | 1 || [[#Finalize]] |
|- | |- | ||
− | | 2 || [[# | + | | 2 || [[#Sleep]] |
|- | |- | ||
− | | 3 || [[# | + | | 3 || [[#Wake]] |
|- | |- | ||
− | | 4 || [[# | + | | 4 || [[#SetVolume]] |
|- | |- | ||
− | | 5 || [[# | + | | 5 || [[#GetVolumeMax]] |
|- | |- | ||
− | | 6 || [[# | + | | 6 || [[#GetVolumeMin]] |
|- | |- | ||
− | | 7 || [[# | + | | 7 || [[#SetActiveTarget]] |
|- | |- | ||
− | | 8 || [[# | + | | 8 || [[#GetActiveTarget]] |
|- | |- | ||
− | | 9 || [[# | + | | 9 || [[#BindHeadphoneMicJackInterrupt]] |
|- | |- | ||
− | | 10 || [[# | + | | 10 || [[#IsHeadphoneMicJackInserted]] |
|- | |- | ||
− | | 11 || [[# | + | | 11 || [[#ClearHeadphoneMicJackInterrupt]] |
|- | |- | ||
− | | 12 || [[# | + | | 12 || [[#IsRequested]] |
|} | |} | ||
− | == | + | == Initialize == |
− | + | No input/output. | |
− | == | + | == Finalize == |
− | + | No input/output. | |
− | == | + | == Sleep == |
− | + | No input/output. | |
− | == | + | == Wake == |
− | + | No input/output. | |
− | == | + | == SetVolume == |
− | Takes an u32 '''Volume'''. | + | Takes an u32 '''Volume'''. No output. |
− | == | + | == GetVolumeMax == |
− | Returns an u32 '''VolumeMax'''. | + | No input. Returns an u32 '''VolumeMax'''. |
− | == | + | == GetVolumeMin == |
− | Returns an u32 '''VolumeMin'''. | + | No input. Returns an u32 '''VolumeMin'''. |
− | == | + | == SetActiveTarget == |
− | Takes an u32 '''Target'''. | + | Takes an u32 '''Target'''. No output. |
− | == | + | == GetActiveTarget == |
− | Returns an u32 '''Target'''. | + | No input. Returns an u32 '''Target'''. |
− | == | + | == BindHeadphoneMicJackInterrupt == |
− | Returns an event handle. | + | No input. Returns an event handle. |
− | == | + | == IsHeadphoneMicJackInserted == |
− | Returns a bool. | + | No input. Returns a bool. |
− | == | + | == ClearHeadphoneMicJackInterrupt == |
− | + | No input/output. | |
− | == | + | == IsRequested == |
− | Returns a bool. | + | No input. Returns a bool. |
= hwopus = | = hwopus = | ||
Line 587: | Line 814: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || [[# | + | | 0 || [[#OpenHardwareOpusDecoder]] |
|- | |- | ||
| 1 || [[#GetWorkBufferSize]] | | 1 || [[#GetWorkBufferSize]] | ||
Line 594: | Line 821: | ||
|- | |- | ||
| 3 || [3.0.0+] [[#GetWorkBufferSizeForMultiStream]] | | 3 || [3.0.0+] [[#GetWorkBufferSizeForMultiStream]] | ||
+ | |- | ||
+ | | 4 || [12.0.0+] OpenHardwareOpusDecoderEx | ||
+ | |- | ||
+ | | 5 || [12.0.0+] GetWorkBufferSizeEx | ||
+ | |- | ||
+ | | 6 || [12.0.0+] OpenHardwareOpusDecoderForMultiStreamEx | ||
+ | |- | ||
+ | | 7 || [12.0.0+] GetWorkBufferSizeForMultiStreamEx | ||
+ | |- | ||
+ | | 8 || [16.0.0+] GetWorkBufferSizeExEx | ||
+ | |- | ||
+ | | 9 || [16.0.0+] GetWorkBufferSizeForMultiStreamExEx | ||
|} | |} | ||
− | Official sw can use either software libopus, or hwopus via "nn::codec::HardwareOpus*" (separate from the former). | + | Official sw can use either software libopus, or hwopus (libopus running on the ADSP) via "nn::codec::HardwareOpus*" (separate from the former). |
− | == | + | == OpenHardwareOpusDecoder == |
Takes two s32s '''SampleRate''' and '''ChannelCount''' packed as an u64, an u32 '''WorkBufferSize''' and a TransferMemory handle for '''WorkBuffer'''. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0. | Takes two s32s '''SampleRate''' and '''ChannelCount''' packed as an u64, an u32 '''WorkBufferSize''' and a TransferMemory handle for '''WorkBuffer'''. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0. | ||
− | == GetWorkBufferSize== | + | == GetWorkBufferSize == |
Takes two s32s '''SampleRate''' and '''ChannelCount''' packed as an u64. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment. | Takes two s32s '''SampleRate''' and '''ChannelCount''' packed as an u64. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment. | ||
Line 607: | Line 846: | ||
Takes a type-0x19 input buffer, an u32 '''WorkBufferSize''' and a TransferMemory handle for '''WorkBuffer'''. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0. | Takes a type-0x19 input buffer, an u32 '''WorkBufferSize''' and a TransferMemory handle for '''WorkBuffer'''. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0. | ||
− | The input buffer is a [[# | + | The input buffer is a [[#OpusMultiStreamParameters]] struct. The user-process initializes this struct the same way as [[#GetWorkBufferSizeForMultiStream]], except that an u8-array specified by the user is copied to +0x10 with size '''ChannelCount''', when '''ChannelCount''' above 0. |
== GetWorkBufferSizeForMultiStream == | == GetWorkBufferSizeForMultiStream == | ||
Takes a type-0x19 input buffer. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment. | Takes a type-0x19 input buffer. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment. | ||
− | The input buffer is a [[# | + | The input buffer is a [[#OpusMultiStreamParameters]] struct. |
+ | |||
+ | == OpenHardwareOpusDecoderEx == | ||
+ | Takes a struct [[#OpusParametersEx]] and a u32 '''WorkBufferSize''' and a TransferMemory handle for '''WorkBuffer'''. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0. | ||
− | == | + | When ''UseLargeFrameSize'' in the parameter struct is 1 a larger output buffer that can store 120ms opus frames is used vs the default of 40ms. |
− | + | ||
− | + | == GetWorkBufferSizeEx == | |
− | + | Takes a struct [[#OpusParametersEx]]. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment. | |
− | + | ||
− | + | == OpenHardwareOpusDecoderForMultiStreamEx == | |
− | + | Takes a type-0x19 input buffer, an u32 '''WorkBufferSize''' and a TransferMemory handle for '''WorkBuffer'''. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0. | |
− | + | ||
− | + | The input buffer is a [[#OpusMultiStreamParametersEx]] struct. When ''UseLargeFrameSize'' is 1 a larger output buffer that can store 120ms opus frames is used vs the default of 40ms. | |
− | + | ||
− | + | == GetWorkBufferSizeForMultiStreamEx == | |
− | + | Takes a type-0x19 input buffer. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment. | |
− | + | ||
− | + | The input buffer is a [[#OpusMultiStreamParametersEx]] struct. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== IHardwareOpusDecoder == | == IHardwareOpusDecoder == | ||
Line 649: | Line 878: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || [4.0.0+] [[#DecodeInterleavedOld]] ([1.0.0-3.0.2] | + | | 0 || [4.0.0+] [[#DecodeInterleavedOld]] ([1.0.0-3.0.2] DecodeInterleaved) |
|- | |- | ||
| 1 || [[#SetContext]] | | 1 || [[#SetContext]] | ||
Line 661: | Line 890: | ||
| 5 || [6.0.0+] [[#DecodeInterleavedForMultiStreamWithPerfOld]] ([4.0.0-5.1.0] DecodeInterleavedForMultiStreamWithPerf) | | 5 || [6.0.0+] [[#DecodeInterleavedForMultiStreamWithPerfOld]] ([4.0.0-5.1.0] DecodeInterleavedForMultiStreamWithPerf) | ||
|- | |- | ||
− | | 6 || [6.0.0+] [ | + | | 6 || [6.0.0+] DecodeInterleavedWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleaved) |
|- | |- | ||
− | | 7 || [6.0.0+] [ | + | | 7 || [6.0.0+] DecodeInterleavedForMultiStreamWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleavedForMultiStream) |
|- | |- | ||
− | | 8 || [7.0.0+] | + | | 8 || [7.0.0+] [[#DecodeInterleaved]] |
|- | |- | ||
− | | 9 || [7.0.0+] | + | | 9 || [7.0.0+] [[#DecodeInterleavedForMultiStream]] |
|} | |} | ||
=== DecodeInterleavedOld === | === DecodeInterleavedOld === | ||
− | Takes a type- | + | Takes a type-0x5 input buffer ('''OpusDataIn''') and a type-0x6 output buffer ('''PcmDataOut'''). Decodes the Opus source data to PCM and returns output s32 '''DecodedDataSize''' and s32 '''DecodedSampleCount'''. |
Calls the same func as [[#DecodeInterleaved]] internally with flag=0 and out_u64_ptr=NULL. | Calls the same func as [[#DecodeInterleaved]] internally with flag=0 and out_u64_ptr=NULL. | ||
=== SetContext === | === SetContext === | ||
− | Takes a type- | + | Takes a type-0x5 input buffer ('''DecoderContextIn'''). Sends the unknown context data to the hardware decoder. The input buffer is unused. |
=== DecodeInterleavedForMultiStreamOld === | === DecodeInterleavedForMultiStreamOld === | ||
− | Takes a type- | + | Takes a type-0x5 input buffer ('''OpusDataIn''') and a type-0x6 output buffer ('''PcmDataOut'''). Decodes the Opus source data to PCM and returns output s32 '''DecodedDataSize''' and s32 '''DecodedSampleCount'''. |
Calls the same func as [[#DecodeInterleavedForMultiStream]] internally with flag=0 and out_u64_ptr=NULL. | Calls the same func as [[#DecodeInterleavedForMultiStream]] internally with flag=0 and out_u64_ptr=NULL. | ||
=== SetContextForMultiStream === | === SetContextForMultiStream === | ||
− | Takes a type- | + | Takes a type-0x5 input buffer ('''DecoderContextIn'''). Sends the unknown context data to the hardware decoder. |
=== DecodeInterleavedWithPerfOld === | === DecodeInterleavedWithPerfOld === | ||
Line 719: | Line 948: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || | + | | 0 || ProfilerStart |
|- | |- | ||
− | | 1 || | + | | 1 || ProfilerStop |
|- | |- | ||
− | | 2 || | + | | 2 || CpuProfilerStart |
|- | |- | ||
− | | 3 || | + | | 3 || CpuProfilerStop |
|} | |} | ||
+ | |||
+ | = aud:a = | ||
+ | This is "nn::audio::detail::IAudioSystemManagerForApplet". | ||
+ | |||
+ | This was added with [11.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 0 || RegisterAppletResourceUserId | ||
+ | |- | ||
+ | | 1 || UnregisterAppletResourceUserId | ||
+ | |- | ||
+ | | 2 || RequestSuspendAudio | ||
+ | |- | ||
+ | | 3 || RequestResumeAudio | ||
+ | |- | ||
+ | | 4 || GetAudioOutputProcessMasterVolume | ||
+ | |- | ||
+ | | 5 || SetAudioOutputProcessMasterVolume | ||
+ | |- | ||
+ | | 6 || GetAudioInputProcessMasterVolume | ||
+ | |- | ||
+ | | 7 || SetAudioInputProcessMasterVolume | ||
+ | |- | ||
+ | | 8 || GetAudioOutputProcessRecordVolume | ||
+ | |- | ||
+ | | 9 || SetAudioOutputProcessRecordVolume | ||
+ | |- | ||
+ | | 10 || [18.0.0+] GetAppletStateSummaries | ||
+ | |} | ||
+ | |||
+ | = aud:d = | ||
+ | This is "nn::audio::detail::IAudioSystemManagerForDebugger". | ||
+ | |||
+ | This was added with [11.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 0 || RequestSuspendAudioForDebug | ||
+ | |- | ||
+ | | 1 || RequestResumeAudioForDebug | ||
+ | |} | ||
+ | |||
+ | = SampleFormat = | ||
+ | This is "nn::audio::SampleFormat". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Value || Name | ||
+ | |- | ||
+ | | 0 || Invalid | ||
+ | |- | ||
+ | | 1 || PcmInt8 | ||
+ | |- | ||
+ | | 2 || PcmInt16 | ||
+ | |- | ||
+ | | 3 || PcmInt24 | ||
+ | |- | ||
+ | | 4 || PcmInt32 | ||
+ | |- | ||
+ | | 5 || PcmFloat | ||
+ | |- | ||
+ | | 6 || Adpcm | ||
+ | |} | ||
+ | |||
+ | = AudioOutState = | ||
+ | This is "nn::audio::AudioOutState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Value || Name | ||
+ | |- | ||
+ | | 0 || Started | ||
+ | |- | ||
+ | | 1 || Stopped | ||
+ | |} | ||
+ | |||
+ | = AudioInState = | ||
+ | This is "nn::audio::AudioInState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Value || Name | ||
+ | |- | ||
+ | | 0 || Started | ||
+ | |- | ||
+ | | 1 || Stopped | ||
+ | |} | ||
+ | |||
+ | = FinalOutputRecorderState = | ||
+ | This is "nn::audio::FinalOutputRecorderState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Value || Name | ||
+ | |- | ||
+ | | 0 || Started | ||
+ | |- | ||
+ | | 1 || Stopped | ||
+ | |} | ||
+ | |||
+ | = AudioOutInfo = | ||
+ | This is "nn::audio::AudioOutInfo". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x100 | ||
+ | | Name | ||
+ | |} | ||
+ | |||
+ | = AudioInInfo = | ||
+ | This is "nn::audio::AudioInInfo". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x100 | ||
+ | | Name | ||
+ | |} | ||
+ | |||
+ | = AudioOutParameter = | ||
+ | This is "nn::audio::AudioOutParameter". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | SampleRate | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x2 | ||
+ | | ChannelCount | ||
+ | |- | ||
+ | | 0x6 | ||
+ | | 0x2 | ||
+ | | Reserved | ||
+ | |} | ||
+ | |||
+ | = AudioInParameter = | ||
+ | This is "nn::audio::AudioInParameter". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | SampleRate | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x2 | ||
+ | | ChannelCount | ||
+ | |- | ||
+ | | 0x6 | ||
+ | | 0x2 | ||
+ | | Reserved | ||
+ | |} | ||
+ | |||
+ | = AudioOutParameterInternal = | ||
+ | This is "nn::audio::detail::AudioOutParameterInternal". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | SampleRate | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | ChannelCount | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | SampleFormat | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | State | ||
+ | |} | ||
+ | |||
+ | = AudioInParameterInternal = | ||
+ | This is "nn::audio::detail::AudioInParameterInternal". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | SampleRate | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | ChannelCount | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | SampleFormat | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | State | ||
+ | |} | ||
+ | |||
+ | = AudioOutBuffer = | ||
+ | This is "nn::audio::AudioOutBuffer". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | Pointer to next buffer (unused) | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | Pointer to sample buffer | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Capacity of sample buffer | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Size of data in the sample buffer | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x8 | ||
+ | | Offset of data in the sample buffer (unused/ignored?) | ||
+ | |} | ||
+ | |||
+ | = AudioInBuffer = | ||
+ | This is "nn::audio::AudioInBuffer". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | Pointer to next buffer (unused) | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | Pointer to sample buffer | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Capacity of sample buffer | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Size of data in the sample buffer | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x8 | ||
+ | | Offset of data in the sample buffer (unused/ignored?) | ||
+ | |} | ||
+ | |||
+ | = FinalOutputRecorderBuffer = | ||
+ | This is "nn::audio::FinalOutputRecorderBuffer". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | Released | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | Pointer to next buffer (unused) | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Pointer to sample buffer | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Capacity of sample buffer | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x8 | ||
+ | | Size of data in the sample buffer | ||
+ | |- | ||
+ | | 0x28 | ||
+ | | 0x8 | ||
+ | | Offset of data in the sample buffer (unused/ignored?) | ||
+ | |} | ||
+ | |||
+ | = FinalOutputRecorderParameter = | ||
+ | This is "nn::audio::FinalOutputRecorderParameter". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | SampleRate | ||
+ | |} | ||
+ | |||
+ | = FinalOutputRecorderParameterInternal = | ||
+ | This is "nn::audio::detail::FinalOutputRecorderParameterInternal". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | SampleRate | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | ChannelCount | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | SampleFormat | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | State | ||
+ | |} | ||
+ | |||
+ | = FinalOutputRecorderWorkBufferParameterInternal = | ||
+ | This is "nn::audio::detail::FinalOutputRecorderWorkBufferParameterInternal". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | | ||
+ | |} | ||
+ | |||
+ | = OpusParametersEx = | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | SampleRate | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | ChannelCount | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | UseLargeFrameSize | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | Padding | ||
+ | |} | ||
+ | |||
+ | = OpusMultiStreamParameters = | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | SampleRate | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | ChannelCount | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | Number of streams | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | Number of stereo streams | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x100 | ||
+ | | u8 array of channel mappings | ||
+ | |} | ||
+ | |||
+ | = OpusMultiStreamParametersEx = | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | SampleRate | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | ChannelCount | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | Number of streams | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | Number of stereo streams | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x4 | ||
+ | | UseLargeFrameSize | ||
+ | |- | ||
+ | | 0x14 | ||
+ | | 0x4 | ||
+ | | Padding | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x100 | ||
+ | | u8 array of channel mappings | ||
+ | |} | ||
+ | |||
+ | = Notes = | ||
+ | Once nnMain finishes running, it calls a func which handles ADSP Aborts. This waits on an event, calls a func, then Aborts with Result 0xC0899. | ||
+ | |||
+ | That func just calls another func, which: | ||
+ | * Calls various AGIC funcs for this IRQ, etc. | ||
+ | * Copies data from devicemem+0x608C (the 0x7000-byte devicemem "shared memory segment") to a stack struct. | ||
+ | * A funcptr is called if set with the above struct, then this returns. | ||
+ | |||
+ | That funcptr, besides other func-calls, will log an [[Error_Report_services|erpt]] using the input struct when set with the "AdspException*" fields. | ||
+ | |||
+ | This is triggered by AGIC IRQ adsp_wdresetreq, "ADSP Watchdog Timer Reset Request". The ADSP updates the watchdog from a thread, so normally the watchdog only expires when the ADSP configures it to trigger immediately. | ||
+ | |||
+ | When handling an assert/exception, the ADSP: | ||
+ | * Logs exception info in text form into devicemem. | ||
+ | * Logs the binary form of the exception into devicemem (offset above). | ||
+ | * Eventually configures the watchdog to trigger immediately, prints "HALT: spinning forever...\n", then enters a loop using instruction "wfe". | ||
[[Category:Services]] | [[Category:Services]] |
Latest revision as of 21:13, 8 October 2024
audout:u
This is "nn::audio::detail::IAudioOutManager".
Cmd | Name |
---|---|
0 | ListAudioOuts |
1 | OpenAudioOut |
2 | [3.0.0+] ListAudioOutsAuto |
3 | [3.0.0+] OpenAudioOutAuto |
ListAudioOuts
Takes a type-0x6 output buffer containing an array of #AudioOutInfo. Returns an u32 Count.
OpenAudioOut
Takes a PID-descriptor, a type-0x5 input buffer NameIn, a type-0x6 output buffer NameOut, an input #AudioOutParameter, an input Process handle and an input AppletResourceUserId. Returns an #IAudioOut and an output #AudioOutParameterInternal.
ListAudioOutsAuto
Same as #ListAudioOuts, but takes a type-0x22 output buffer instead.
OpenAudioOutAuto
Same as #OpenAudioOut, but takes a type-0x21 input buffer and a type-0x22 output buffer instead.
IAudioOut
This is "nn::audio::detail::IAudioOut".
Cmd | Name |
---|---|
0 | GetAudioOutState |
1 | Start |
2 | Stop |
3 | AppendAudioOutBuffer |
4 | RegisterBufferEvent |
5 | GetReleasedAudioOutBuffers |
6 | ContainsAudioOutBuffer |
7 | [3.0.0+] AppendAudioOutBufferAuto |
8 | [3.0.0+] GetReleasedAudioOutBuffersAuto |
9 | [4.0.0+] GetAudioOutBufferCount |
10 | [4.0.0+] GetAudioOutPlayedSampleCount |
11 | [4.0.0+] FlushAudioOutBuffers |
12 | [6.0.0+] SetAudioOutVolume |
13 | [6.0.0+] GetAudioOutVolume |
GetAudioOutState
No input. Returns an output #AudioOutState.
Start
No input/output.
Starts audio playback using data from appended buffers.
Stop
No input/output.
Stops audio playback. This waits for audio playback to finish before returning.
AppendAudioOutBuffer
Takes a type-0x5 input buffer containing an #AudioOutBuffer and an input u64 BufferClientPtr. No output.
RegisterBufferEvent
No input. Returns an output Event handle.
The event is signalled when a buffer is released.
GetReleasedAudioOutBuffers
Takes a type-0x6 output buffer AudioBuffer. Returns an output u32 Count.
AudioBuffer will be filled with the identifiers from #AppendAudioOutBuffer of audio buffers that have been released.
ContainsAudioOutBuffer
Takes an input u64 AudioBufferPointer. Returns an output bool Contains.
AppendAudioOutBufferAuto
Same as #AppendAudioOutBuffer, but takes a type-0x21 buffer instead.
GetReleasedAudioOutBuffersAuto
Same as #GetReleasedAudioOutBuffer, but takes a type-0x22 buffer instead.
GetAudioOutBufferCount
No input. Returns an output u32 AudioOutBufferCount.
GetAudioOutPlayedSampleCount
No input. Returns an output u64 AudioOutPlayedSampleCount.
FlushAudioOutBuffers
No input. Returns an output bool Pending.
SetAudioOutVolume
Takes an input float AudioOutVolume. No output.
GetAudioOutVolume
No input. Returns an output float AudioOutVolume.
audin:u
This is "nn::audio::detail::IAudioInManager".
Cmd | Name |
---|---|
0 | ListAudioIns |
1 | OpenAudioIn |
2 | [3.0.0+] ListAudioInsAuto |
3 | [3.0.0+] OpenAudioInAuto |
4 | [3.0.0+] ListAudioInsAutoFiltered |
5 | [5.0.0+] OpenAudioInProtocolSpecified |
ListAudioIns
Takes a type-0x6 output buffer containing an array of #AudioInInfo. Returns an u32 Count.
OpenAudioIn
Takes a PID-descriptor, a type-0x5 input buffer NameIn, a type-0x6 output buffer NameOut, an input #AudioInParameter, an input Process handle and an input AppletResourceUserId. Returns an #IAudioIn and an an output #AudioInParameterInternal.
ListAudioInsAuto
Same as #ListAudioIns, but takes a type-0x22 output buffer instead.
OpenAudioInAuto
Same as #OpenAudioIn, but takes a type-0x21 input buffer and a type-0x22 output buffer instead.
ListAudioInsAutoFiltered
Same as #ListAudioInsAuto.
OpenAudioInProtocolSpecified
Same as #OpenAudioIn, but takes an additional input u64 Protocol.
IAudioIn
This is "nn::audio::detail::IAudioIn".
Cmd | Name |
---|---|
0 | GetAudioInState |
1 | Start |
2 | Stop |
3 | AppendAudioInBuffer |
4 | RegisterBufferEvent |
5 | GetReleasedAudioInBuffers |
6 | ContainsAudioInBuffer |
7 | [3.0.0+] AppendUacInBuffer |
8 | [3.0.0+] AppendAudioInBufferAuto |
9 | [3.0.0+] GetReleasedAudioInBuffersAuto |
10 | [3.0.0+] AppendUacInBufferAuto |
11 | [4.0.0+] GetAudioInBufferCount |
12 | [4.0.0+] SetDeviceGain |
13 | [4.0.0+] GetDeviceGain |
14 | [6.0.0+] FlushAudioInBuffers |
GetAudioInState
No input. Returns an output #AudioInState.
Start
No input/output.
Stop
No input/output.
AppendAudioInBuffer
Takes a type-0x5 input buffer containing an #AudioInBuffer and an input u64 BufferClientPtr. No output.
RegisterBufferEvent
No input. Returns an output Event handle.
The event is signalled when a buffer is released.
GetReleasedAudioInBuffers
Takes a type-0x6 output buffer AudioBuffer. Returns an output u32 Count.
AudioBuffer will be filled with the identifiers from #AppendAudioInBuffer of audio buffers that have been released.
ContainsAudioInBuffer
Takes an input u64 AudioBufferPointer. Returns an output bool Contains.
AppendUacInBuffer
Takes a type-0x5 input buffer containing an UacInBuffer, an input u64 BufferClientPtr and an input Event handle. No output.
AppendAudioInBufferAuto
Same as #AppendAudioInBuffer, but takes a type-0x21 buffer instead.
GetReleasedAudioInBuffersAuto
Same as #GetReleasedAudioInBuffer, but takes a type-0x22 buffer instead.
AppendUacInBufferAuto
Same as #AppendUacInBuffer, but takes a type-0x21 buffer instead.
GetAudioInBufferCount
No input. Returns an output u32 AudioInBufferCount.
SetDeviceGain
Takes an input float DeviceGain. No output.
GetDeviceGain
No input. Returns an output float DeviceGain.
FlushAudioInBuffers
No input. Returns an output bool Pending.
audrec:u
This is "nn::audio::detail::IFinalOutputRecorderManager".
Cmd | Name |
---|---|
0 | #OpenFinalOutputRecorder |
OpenFinalOutputRecorder
Takes an input #FinalOutputRecorderParameter, an input Process handle and an input AppletResourceUserId. Returns an #IFinalOutputRecorder and an output #FinalOutputRecorderParameterInternal.
IFinalOutputRecorder
This is "nn::audio::detail::IFinalOutputRecorder".
Cmd | Name |
---|---|
0 | GetFinalOutputRecorderState |
1 | Start |
2 | Stop |
3 | AppendFinalOutputRecorderBuffer |
4 | RegisterBufferEvent |
5 | GetReleasedFinalOutputRecorderBuffers |
6 | ContainsFinalOutputRecorderBuffer |
7 | GetFinalOutputRecorderBufferEndTime |
8 | [3.0.0+] AppendFinalOutputRecorderBufferAuto |
9 | [3.0.0+] GetReleasedFinalOutputRecorderBuffersAuto |
10 | [6.0.0+] FlushFinalOutputRecorderBuffers |
11 | [9.0.0+] AttachWorkBuffer |
GetFinalOutputRecorderState
No input. Returns an output #FinalOutputRecorderState.
Start
No input/output.
Stop
No input/output.
AppendFinalOutputRecorderBuffer
Takes a type-0x5 input buffer containing an #FinalOutputRecorderBuffer and an input u64 BufferClientPtr. No output.
RegisterBufferEvent
No input. Returns an output Event handle.
The event is signalled when a buffer is released.
GetReleasedFinalOutputRecorderBuffers
Takes a type-0x6 output buffer FinalOutputRecorderBuffer. Returns two output u64s Count and Released.
FinalOutputRecorderBuffer will be filled with the identifiers from #AppendFinalOutputRecorderBuffer of recorder buffers that have been released.
ContainsFinalOutputRecorderBuffer
Takes an input u64 FinalOutputRecorderBufferPointer. Returns an output bool Contains.
GetFinalOutputRecorderBufferEndTime
Takes an input u64 FinalOutputRecorderBufferPointer. Returns an output u64 Released.
AppendFinalOutputRecorderBufferAuto
Same as #AppendFinalOutputRecorderBuffer, but takes a type-0x21 buffer instead.
GetReleasedFinalOutputRecorderBuffersAuto
Same as #GetReleasedFinalOutputRecorderBuffers, but takes a type-0x22 buffer instead.
FlushFinalOutputRecorderBuffers
No input. Returns an output bool Pending.
AttachWorkBuffer
Takes an input #FinalOutputRecorderWorkBufferParameterInternal. No output.
auddev
This is "nn::audio::detail::IAudioSnoopManager".
This was added with [6.0.0+].
Cmd | Name |
---|---|
0 | [17.0.0+] GetDspStatistics ([6.0.0-16.1.0] EnableDspUsageMeasurement) |
1 | [6.0.0-16.1.0] DisableDspUsageMeasurement |
6 | [6.0.0-16.1.0] GetDspUsage |
audren:u
This is "nn::audio::detail::IAudioRendererManager".
Cmd | Name |
---|---|
0 | OpenAudioRenderer |
1 | GetWorkBufferSize |
2 | #GetAudioDeviceService |
3 | [3.0.0+] OpenAudioRendererForManualExecution |
4 | [4.0.0+] GetAudioDeviceServiceWithRevisionInfo |
GetAudioDeviceService
Takes an input u64 AppletResourceUserId, returns an output #IAudioDevice.
IAudioRenderer
This is "nn::audio::detail::IAudioRenderer".
Cmd | Name |
---|---|
0 | #GetSampleRate |
1 | #GetSampleCount |
2 | #GetMixBufferCount |
3 | #GetState |
4 | RequestUpdate |
5 | Start |
6 | Stop |
7 | QuerySystemEvent |
8 | #SetRenderingTimeLimit |
9 | #GetRenderingTimeLimit |
10 | [3.0.0+] RequestUpdateAuto |
11 | [3.0.0+] ExecuteAudioRendererRendering |
12 | [15.0.0+] SetVoiceDropParameter |
13 | [15.0.0+] GetVoiceDropParameter |
GetSampleRate
No input. Returns an u32 SampleRate.
GetSampleCount
No input. Returns an u32 SampleCount.
GetMixBufferCount
No input. Returns an u32 MixBufferCount.
GetState
No input. Returns an u32 State (0=Started, 1=Stopped).
SetRenderingTimeLimit
Takes an u32 RenderingTimeLimit. No output.
GetRenderingTimeLimit
No input. Returns an u32 RenderingTimeLimit.
IAudioDevice
This is "nn::audio::detail::IAudioDevice".
Cmd | Name |
---|---|
0 | #ListAudioDeviceName |
1 | #SetAudioDeviceOutputVolume |
2 | #GetAudioDeviceOutputVolume |
3 | GetActiveAudioDeviceName |
4 | QueryAudioDeviceSystemEvent |
5 | GetActiveChannelCount |
6 | [3.0.0+] #ListAudioDeviceNameAuto |
7 | [3.0.0+] #SetAudioDeviceOutputVolumeAuto |
8 | [3.0.0+] #GetAudioDeviceOutputVolumeAuto |
10 | [3.0.0+] GetActiveAudioDeviceNameAuto |
11 | [3.0.0+] QueryAudioDeviceInputEvent |
12 | [3.0.0+] QueryAudioDeviceOutputEvent |
13 | [13.0.0+] #GetActiveAudioOutputDeviceName ([5.0.0-12.1.0] #GetAudioSystemMasterVolumeSetting) |
14 | [13.0.0+] ListAudioOutputDeviceName |
15 | [17.0.0+] AcquireAudioInputDeviceNotification |
16 | [17.0.0+] ReleaseAudioInputDeviceNotification |
17 | [17.0.0+] AcquireAudioOutputDeviceNotification |
18 | [17.0.0+] ReleaseAudioOutputDeviceNotification |
19 | [18.0.0+] SetAudioDeviceOutputVolumeAutoTuneEnabled |
20 | [18.0.0+] IsAudioDeviceOutputVolumeAutoTuneEnabled |
ListAudioDeviceName
Takes a type-0x6 output buffer containing an array of DeviceName. Returns an output s32 for total number of output entries.
SetAudioDeviceOutputVolume
Takes a type-0x5 input buffer containing the DeviceName and a float. No output.
GetAudioDeviceOutputVolume
Takes a type-0x5 input buffer containing the DeviceName. Returns an output float.
ListAudioDeviceNameAuto
Takes a type-0x22 output buffer containing an array of DeviceName. Returns an output s32 for total number of output entries.
SetAudioDeviceOutputVolumeAuto
Takes a type-0x21 input buffer containing the DeviceName and a float. No output.
GetAudioDeviceOutputVolumeAuto
Takes a type-0x21 input buffer containing the DeviceName. Returns an output float.
GetAudioSystemMasterVolumeSetting
Takes a type-0x5 input buffer, returns 4-bytes of output.
GetActiveAudioOutputDeviceName
Takes a type-0x6 output buffer, returns no output.
audout:a
This is "nn::audio::detail::IAudioOutManagerForApplet".
This was removed with [11.0.0+].
Cmd | Name |
---|---|
0 | RequestSuspend |
1 | RequestResume |
2 | GetProcessMasterVolume |
3 | SetProcessMasterVolume |
4 | [4.0.0+] GetProcessRecordVolume |
5 | [4.0.0+] SetProcessRecordVolume |
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.
audin:a
This is "nn::audio::detail::IAudioInManagerForApplet".
This was removed with [11.0.0+].
Cmd | Name |
---|---|
0 | RequestSuspend |
1 | RequestResume |
2 | GetProcessMasterVolume |
3 | SetProcessMasterVolume |
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.
audrec:a
This is "nn::audio::detail::IFinalOutputRecorderManagerForApplet".
Cmd | Name |
---|---|
0 | RequestSuspend |
1 | RequestResume |
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.
audren:a
This is "nn::audio::detail::IAudioRendererManagerForApplet".
This was removed with [11.0.0+].
Cmd | Name |
---|---|
0 | RequestSuspend |
1 | RequestResume |
2 | GetProcessMasterVolume |
3 | SetProcessMasterVolume |
4 | RegisterAppletResourceUserId |
5 | UnregisterAppletResourceUserId |
6 | [4.0.0+] GetProcessRecordVolume |
7 | [4.0.0+] SetProcessRecordVolume |
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.
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".
These were removed with [11.0.0+].
Cmd | Name |
---|---|
0 | #RequestSuspend |
1 | #RequestResume |
RequestSuspend
Takes an u64 AppletResourceUserId.
RequestResume
Takes an u64 AppletResourceUserId.
audctl
This is "nn::audioctrl::detail::IAudioController".
Cmd | Name |
---|---|
0 | GetTargetVolume |
1 | SetTargetVolume |
2 | GetTargetVolumeMin |
3 | GetTargetVolumeMax |
4 | IsTargetMute |
5 | SetTargetMute |
6 | [1.0.0-17.0.1] IsTargetConnected |
7 | SetDefaultTarget |
8 | GetDefaultTarget |
9 | GetAudioOutputMode |
10 | SetAudioOutputMode |
11 | [1.0.0-13.2.1] SetForceMutePolicy |
12 | [1.0.0-13.2.1] GetForceMutePolicy |
13 | GetOutputModeSetting |
14 | SetOutputModeSetting |
15 | SetOutputTarget |
16 | SetInputTargetForceEnabled |
17 | [3.0.0+] SetHeadphoneOutputLevelMode |
18 | [3.0.0+] GetHeadphoneOutputLevelMode |
19 | [17.0.0+] SetForceMonauralOutputModeEnabled ([3.0.0-13.2.1] AcquireAudioVolumeUpdateEventForPlayReport) |
20 | [17.0.0+] IsForceMonauralOutputModeEnabled ([3.0.0-13.2.1] AcquireAudioOutputDeviceUpdateEventForPlayReport) |
21 | [3.0.0-13.2.1] GetAudioOutputTargetForPlayReport |
22 | [3.0.0+] NotifyHeadphoneVolumeWarningDisplayedEvent |
23 | [4.0.0+] SetSystemOutputMasterVolume |
24 | [4.0.0+] GetSystemOutputMasterVolume |
25 | [4.0.0-13.2.1] #GetAudioVolumeDataForPlayReport |
26 | [4.0.0-14.1.2] #UpdateHeadphoneSettings |
27 | [7.0.0-16.1.0] SetVolumeMappingTableForDev |
28 | [10.0.0-13.2.1] GetAudioOutputChannelCountForPlayReport |
29 | [10.0.0-13.2.1] BindAudioOutputChannelCountUpdateEventForPlayReport |
30 | [13.0.0+] SetSpeakerAutoMuteEnabled |
31 | [13.0.0+] IsSpeakerAutoMuteEnabled |
32 | [13.0.0+] GetActiveOutputTarget |
33 | [13.0.0+] GetTargetDeviceInfo |
34 | [13.0.0+] AcquireTargetNotification |
35 | [14.0.0-14.1.2] SetHearingProtectionSafeguardTimerRemainingTimeForDebug |
36 | [14.0.0-14.1.2] GetHearingProtectionSafeguardTimerRemainingTimeForDebug |
37 | [14.0.0-14.1.2] SetHearingProtectionSafeguardEnabled |
38 | [14.0.0-14.1.2] IsHearingProtectionSafeguardEnabled |
39 | [14.0.0-14.1.2] IsHearingProtectionSafeguardMonitoringOutputForDebug |
40 | [14.0.0+] #GetSystemInformationForDebug |
41 | [15.0.0+] SetVolumeButtonLongPressTime |
42 | [15.0.0+] SetNativeVolumeForDebug |
5000 | [19.0.0+] |
10000 | [13.0.0+] NotifyAudioOutputTargetForPlayReport |
10001 | [13.0.0+] NotifyAudioOutputChannelCountForPlayReport |
10002 | [13.0.0+] NotifyUnsupportedUsbOutputDeviceAttachedForPlayReport |
10100 | [14.0.0+] GetAudioVolumeDataForPlayReport |
10101 | [14.0.0+] BindAudioVolumeUpdateEventForPlayReport |
10102 | [14.0.0+] BindAudioOutputTargetUpdateEventForPlayReport |
10103 | [14.0.0+] GetAudioOutputTargetForPlayReport |
10104 | [14.0.0+] GetAudioOutputChannelCountForPlayReport |
10105 | [14.0.0+] BindAudioOutputChannelCountUpdateEventForPlayReport |
10106 | [14.0.0+] GetDefaultAudioOutputTargetForPlayReport |
50000 | [15.0.0-18.1.0] SetAnalogInputBoostGainForPrototyping |
50001 | [19.0.0+] OverrideDefaultTargetForDebug |
50003 | [19.0.0+] SetForceOverrideExternalDeviceNameForDebug |
50004 | [19.0.0+] ClearForceOverrideExternalDeviceNameForDebug |
GetAudioVolumeDataForPlayReport
No input, returns a total of 7-bytes of output.
[13.0.0+] No input, returns a total of 9-bytes of output.
UpdateHeadphoneSettings
Takes one input bool. No output. NS calls this with the result of IParentalControlService::IsRestrictionEnabled.
GetSystemInformationForDebug
Takes a type-0x1A output buffer.
[15.0.0+] Now takes a type-0x16 output buffer.
[18.0.0+] Originally the output buffer was a binary structure, now it's just a string.
codecctl
This is "nn::audio::detail::ICodecController".
This service no longer exists in [3.0.0+].
Cmd | Name |
---|---|
0 | #Initialize |
1 | #Finalize |
2 | #Sleep |
3 | #Wake |
4 | #SetVolume |
5 | #GetVolumeMax |
6 | #GetVolumeMin |
7 | #SetActiveTarget |
8 | #GetActiveTarget |
9 | #BindHeadphoneMicJackInterrupt |
10 | #IsHeadphoneMicJackInserted |
11 | #ClearHeadphoneMicJackInterrupt |
12 | #IsRequested |
Initialize
No input/output.
Finalize
No input/output.
Sleep
No input/output.
Wake
No input/output.
SetVolume
Takes an u32 Volume. No output.
GetVolumeMax
No input. Returns an u32 VolumeMax.
GetVolumeMin
No input. Returns an u32 VolumeMin.
SetActiveTarget
Takes an u32 Target. No output.
GetActiveTarget
No input. Returns an u32 Target.
BindHeadphoneMicJackInterrupt
No input. Returns an event handle.
IsHeadphoneMicJackInserted
No input. Returns a bool.
ClearHeadphoneMicJackInterrupt
No input/output.
IsRequested
No input. Returns a bool.
hwopus
This is "nn::codec::detail::IHardwareOpusDecoderManager".
Cmd | Name |
---|---|
0 | #OpenHardwareOpusDecoder |
1 | #GetWorkBufferSize |
2 | [3.0.0+] #OpenHardwareOpusDecoderForMultiStream |
3 | [3.0.0+] #GetWorkBufferSizeForMultiStream |
4 | [12.0.0+] OpenHardwareOpusDecoderEx |
5 | [12.0.0+] GetWorkBufferSizeEx |
6 | [12.0.0+] OpenHardwareOpusDecoderForMultiStreamEx |
7 | [12.0.0+] GetWorkBufferSizeForMultiStreamEx |
8 | [16.0.0+] GetWorkBufferSizeExEx |
9 | [16.0.0+] GetWorkBufferSizeForMultiStreamExEx |
Official sw can use either software libopus, or hwopus (libopus running on the ADSP) via "nn::codec::HardwareOpus*" (separate from the former).
OpenHardwareOpusDecoder
Takes two s32s SampleRate and ChannelCount packed as an u64, an u32 WorkBufferSize and a TransferMemory handle for WorkBuffer. Returns an #IHardwareOpusDecoder object. The TransferMemory is created by the user-process with permissions=0.
GetWorkBufferSize
Takes two s32s SampleRate and ChannelCount packed as an u64. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment.
OpenHardwareOpusDecoderForMultiStream
Takes a type-0x19 input buffer, an u32 WorkBufferSize and a TransferMemory handle for WorkBuffer. Returns an #IHardwareOpusDecoder object. The TransferMemory is created by the user-process with permissions=0.
The input buffer is a #OpusMultiStreamParameters struct. The user-process initializes this struct the same way as #GetWorkBufferSizeForMultiStream, except that an u8-array specified by the user is copied to +0x10 with size ChannelCount, when ChannelCount above 0.
GetWorkBufferSizeForMultiStream
Takes a type-0x19 input buffer. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment.
The input buffer is a #OpusMultiStreamParameters struct.
OpenHardwareOpusDecoderEx
Takes a struct #OpusParametersEx and a u32 WorkBufferSize and a TransferMemory handle for WorkBuffer. Returns an #IHardwareOpusDecoder object. The TransferMemory is created by the user-process with permissions=0.
When UseLargeFrameSize in the parameter struct is 1 a larger output buffer that can store 120ms opus frames is used vs the default of 40ms.
GetWorkBufferSizeEx
Takes a struct #OpusParametersEx. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment.
OpenHardwareOpusDecoderForMultiStreamEx
Takes a type-0x19 input buffer, an u32 WorkBufferSize and a TransferMemory handle for WorkBuffer. Returns an #IHardwareOpusDecoder object. The TransferMemory is created by the user-process with permissions=0.
The input buffer is a #OpusMultiStreamParametersEx struct. When UseLargeFrameSize is 1 a larger output buffer that can store 120ms opus frames is used vs the default of 40ms.
GetWorkBufferSizeForMultiStreamEx
Takes a type-0x19 input buffer. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment.
The input buffer is a #OpusMultiStreamParametersEx struct.
IHardwareOpusDecoder
This is "nn::codec::detail::IHardwareOpusDecoder".
Cmd | Name |
---|---|
0 | [4.0.0+] #DecodeInterleavedOld ([1.0.0-3.0.2] DecodeInterleaved) |
1 | #SetContext |
2 | [4.0.0+] #DecodeInterleavedForMultiStreamOld ([3.0.0-3.0.2] DecodeInterleavedForMultiStream) |
3 | [3.0.0+] #SetContextForMultiStream |
4 | [6.0.0+] #DecodeInterleavedWithPerfOld ([4.0.0-5.1.0] DecodeInterleavedWithPerf) |
5 | [6.0.0+] #DecodeInterleavedForMultiStreamWithPerfOld ([4.0.0-5.1.0] DecodeInterleavedForMultiStreamWithPerf) |
6 | [6.0.0+] DecodeInterleavedWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleaved) |
7 | [6.0.0+] DecodeInterleavedForMultiStreamWithPerfAndResetOld ([6.0.0-6.2.0] DecodeInterleavedForMultiStream) |
8 | [7.0.0+] #DecodeInterleaved |
9 | [7.0.0+] #DecodeInterleavedForMultiStream |
DecodeInterleavedOld
Takes a type-0x5 input buffer (OpusDataIn) and a type-0x6 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize and s32 DecodedSampleCount.
Calls the same func as #DecodeInterleaved internally with flag=0 and out_u64_ptr=NULL.
SetContext
Takes a type-0x5 input buffer (DecoderContextIn). Sends the unknown context data to the hardware decoder. The input buffer is unused.
DecodeInterleavedForMultiStreamOld
Takes a type-0x5 input buffer (OpusDataIn) and a type-0x6 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize and s32 DecodedSampleCount.
Calls the same func as #DecodeInterleavedForMultiStream internally with flag=0 and out_u64_ptr=NULL.
SetContextForMultiStream
Takes a type-0x5 input buffer (DecoderContextIn). Sends the unknown context data to the hardware decoder.
DecodeInterleavedWithPerfOld
Takes a type-0x5 input buffer (OpusDataIn) and a type-0x46 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize, s32 DecodedSampleCount, and an u64.
The output u64 is ignored by official user-processes.
Calls the same func as #DecodeInterleaved internally with flag=0.
DecodeInterleavedForMultiStreamWithPerfOld
Takes a type-0x5 input buffer (OpusDataIn) and a type-0x46 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize, s32 DecodedSampleCount, and an u64.
The output u64 is ignored by official user-processes.
Calls the same func as #DecodeInterleavedForMultiStream internally with flag=0.
DecodeInterleaved
Takes an input u8 bool flag, a type-0x5 input buffer (OpusDataIn) and a type-0x46 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize, s32 DecodedSampleCount, and an u64.
The bool flag indicates whether or not a reset of the decoder context is being requested.
DecodeInterleavedForMultiStream
Takes an input u8 bool flag, a type-0x5 input buffer (OpusDataIn) and a type-0x46 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns output s32 DecodedDataSize, s32 DecodedSampleCount, and an u64.
The bool flag indicates whether or not a reset of the decoder context is being requested.
auddebug
This is "nn::audio::detail::IAudioDebugManager".
This service doesn't exist in retail units.
Cmd | Name |
---|---|
0 | ProfilerStart |
1 | ProfilerStop |
2 | CpuProfilerStart |
3 | CpuProfilerStop |
aud:a
This is "nn::audio::detail::IAudioSystemManagerForApplet".
This was added with [11.0.0+].
Cmd | Name |
---|---|
0 | RegisterAppletResourceUserId |
1 | UnregisterAppletResourceUserId |
2 | RequestSuspendAudio |
3 | RequestResumeAudio |
4 | GetAudioOutputProcessMasterVolume |
5 | SetAudioOutputProcessMasterVolume |
6 | GetAudioInputProcessMasterVolume |
7 | SetAudioInputProcessMasterVolume |
8 | GetAudioOutputProcessRecordVolume |
9 | SetAudioOutputProcessRecordVolume |
10 | [18.0.0+] GetAppletStateSummaries |
aud:d
This is "nn::audio::detail::IAudioSystemManagerForDebugger".
This was added with [11.0.0+].
Cmd | Name |
---|---|
0 | RequestSuspendAudioForDebug |
1 | RequestResumeAudioForDebug |
SampleFormat
This is "nn::audio::SampleFormat".
Value | Name |
---|---|
0 | Invalid |
1 | PcmInt8 |
2 | PcmInt16 |
3 | PcmInt24 |
4 | PcmInt32 |
5 | PcmFloat |
6 | Adpcm |
AudioOutState
This is "nn::audio::AudioOutState".
Value | Name |
---|---|
0 | Started |
1 | Stopped |
AudioInState
This is "nn::audio::AudioInState".
Value | Name |
---|---|
0 | Started |
1 | Stopped |
FinalOutputRecorderState
This is "nn::audio::FinalOutputRecorderState".
Value | Name |
---|---|
0 | Started |
1 | Stopped |
AudioOutInfo
This is "nn::audio::AudioOutInfo".
Offset | Size | Description |
---|---|---|
0x0 | 0x100 | Name |
AudioInInfo
This is "nn::audio::AudioInInfo".
Offset | Size | Description |
---|---|---|
0x0 | 0x100 | Name |
AudioOutParameter
This is "nn::audio::AudioOutParameter".
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | SampleRate |
0x4 | 0x2 | ChannelCount |
0x6 | 0x2 | Reserved |
AudioInParameter
This is "nn::audio::AudioInParameter".
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | SampleRate |
0x4 | 0x2 | ChannelCount |
0x6 | 0x2 | Reserved |
AudioOutParameterInternal
This is "nn::audio::detail::AudioOutParameterInternal".
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | SampleRate |
0x4 | 0x4 | ChannelCount |
0x8 | 0x4 | SampleFormat |
0xC | 0x4 | State |
AudioInParameterInternal
This is "nn::audio::detail::AudioInParameterInternal".
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | SampleRate |
0x4 | 0x4 | ChannelCount |
0x8 | 0x4 | SampleFormat |
0xC | 0x4 | State |
AudioOutBuffer
This is "nn::audio::AudioOutBuffer".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | Pointer to next buffer (unused) |
0x8 | 0x8 | Pointer to sample buffer |
0x10 | 0x8 | Capacity of sample buffer |
0x18 | 0x8 | Size of data in the sample buffer |
0x20 | 0x8 | Offset of data in the sample buffer (unused/ignored?) |
AudioInBuffer
This is "nn::audio::AudioInBuffer".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | Pointer to next buffer (unused) |
0x8 | 0x8 | Pointer to sample buffer |
0x10 | 0x8 | Capacity of sample buffer |
0x18 | 0x8 | Size of data in the sample buffer |
0x20 | 0x8 | Offset of data in the sample buffer (unused/ignored?) |
FinalOutputRecorderBuffer
This is "nn::audio::FinalOutputRecorderBuffer".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | Released |
0x8 | 0x8 | Pointer to next buffer (unused) |
0x10 | 0x8 | Pointer to sample buffer |
0x18 | 0x8 | Capacity of sample buffer |
0x20 | 0x8 | Size of data in the sample buffer |
0x28 | 0x8 | Offset of data in the sample buffer (unused/ignored?) |
FinalOutputRecorderParameter
This is "nn::audio::FinalOutputRecorderParameter".
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | SampleRate |
FinalOutputRecorderParameterInternal
This is "nn::audio::detail::FinalOutputRecorderParameterInternal".
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | SampleRate |
0x4 | 0x4 | ChannelCount |
0x8 | 0x4 | SampleFormat |
0xC | 0x4 | State |
FinalOutputRecorderWorkBufferParameterInternal
This is "nn::audio::detail::FinalOutputRecorderWorkBufferParameterInternal".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | |
0x8 | 0x8 | |
0x10 | 0x8 |
OpusParametersEx
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | SampleRate |
0x4 | 0x4 | ChannelCount |
0x8 | 0x4 | UseLargeFrameSize |
0xC | 0x4 | Padding |
OpusMultiStreamParameters
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | SampleRate |
0x4 | 0x4 | ChannelCount |
0x8 | 0x4 | Number of streams |
0xC | 0x4 | Number of stereo streams |
0x10 | 0x100 | u8 array of channel mappings |
OpusMultiStreamParametersEx
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | SampleRate |
0x4 | 0x4 | ChannelCount |
0x8 | 0x4 | Number of streams |
0xC | 0x4 | Number of stereo streams |
0x10 | 0x4 | UseLargeFrameSize |
0x14 | 0x4 | Padding |
0x18 | 0x100 | u8 array of channel mappings |
Notes
Once nnMain finishes running, it calls a func which handles ADSP Aborts. This waits on an event, calls a func, then Aborts with Result 0xC0899.
That func just calls another func, which:
- Calls various AGIC funcs for this IRQ, etc.
- Copies data from devicemem+0x608C (the 0x7000-byte devicemem "shared memory segment") to a stack struct.
- A funcptr is called if set with the above struct, then this returns.
That funcptr, besides other func-calls, will log an erpt using the input struct when set with the "AdspException*" fields.
This is triggered by AGIC IRQ adsp_wdresetreq, "ADSP Watchdog Timer Reset Request". The ADSP updates the watchdog from a thread, so normally the watchdog only expires when the ADSP configures it to trigger immediately.
When handling an assert/exception, the ADSP:
- Logs exception info in text form into devicemem.
- Logs the binary form of the exception into devicemem (offset above).
- Eventually configures the watchdog to trigger immediately, prints "HALT: spinning forever...\n", then enters a loop using instruction "wfe".