Changes

Jump to navigation Jump to search
m
Line 6: Line 6:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#ListAudioOuts]]
+
| 0 || [[#ListAudioOuts|ListAudioOuts]]
 
|-
 
|-
| 1 || [[#OpenAudioOut]]
+
| 1 || [[#OpenAudioOut|OpenAudioOut]]
 
|-
 
|-
| 2 || [3.0.0+] [[#ListAudioOutsEx]]
+
| 2 || [3.0.0+] [[#ListAudioOutsAuto|ListAudioOutsAuto]]
 
|-
 
|-
| 3 || [3.0.0+] [[#OpenAudioOutEx]]
+
| 3 || [3.0.0+] [[#OpenAudioOutAuto|OpenAudioOutAuto]]
 
|}
 
|}
    
== ListAudioOuts ==
 
== ListAudioOuts ==
Takes a type-6 output buffer.
+
Takes a type-0x6 output buffer containing an array of [[#AudioOutInfo]]. Returns an u32 '''Count'''.
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 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.
+
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]] object and four u32s: the sample rate, channel count, [[#PCM_format|PCM format]], and the initial AudioOutState.
     −
=== PCM format ===
+
== ListAudioOutsAuto ==
{| class="wikitable" border="1"
  −
|-
  −
! Value || Name
  −
|-
  −
| 0 || Invalid
  −
|-
  −
| 1 || INT8
  −
|-
  −
| 2 || INT16
  −
|-
  −
| 3 || INT24
  −
|-
  −
| 4 || INT32
  −
|-
  −
| 5 || PCM Float
  −
|-
  −
| 6 || ADPCM
  −
|}
  −
 
  −
== ListAudioOutsEx ==
   
Same as [[#ListAudioOuts]], but takes a type-0x22 output buffer instead.
 
Same as [[#ListAudioOuts]], but takes a type-0x22 output buffer instead.
   −
== OpenAudioOutEx ==
+
== 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 || [[#Start|Start]]
 +
|-
 +
| 2 || [[#Stop|Stop]]
 +
|-
 +
| 3 || [[#AppendAudioOutBuffer|AppendAudioOutBuffer]]
 
|-
 
|-
| 1 || [[#StartAudioOut]]
+
| 4 || [[#RegisterBufferEvent|RegisterBufferEvent]]
 
|-
 
|-
| 2 || [[#StopAudioOut]]
+
| 5 || [[#GetReleasedAudioOutBuffers|GetReleasedAudioOutBuffers]]
 
|-
 
|-
| 3 || [[#AppendAudioOutBuffer]]
+
| 6 || [[#ContainsAudioOutBuffer|ContainsAudioOutBuffer]]
 
|-
 
|-
| 4 || [[#RegisterBufferEvent]]
+
| 7 || [3.0.0+] [[#AppendAudioOutBufferAuto|AppendAudioOutBufferAuto]]
 
|-
 
|-
| 5 || [[#GetReleasedAudioOutBuffer]]
+
| 8 || [3.0.0+] [[#GetReleasedAudioOutBuffersAuto|GetReleasedAudioOutBuffersAuto]]
 
|-
 
|-
| 6 || [[#ContainsAudioOutBuffer]]
+
| 9 || [4.0.0+] [[#GetAudioOutBufferCount|GetAudioOutBufferCount]]
 
|-
 
|-
| 7 || [3.0.0+] [[#AppendAudioOutBufferEx]]
+
| 10 || [4.0.0+] [[#GetAudioOutPlayedSampleCount|GetAudioOutPlayedSampleCount]]
 
|-
 
|-
| 8 || [3.0.0+] [[#GetReleasedAudioOutBufferEx]]
+
| 11 || [4.0.0+] [[#FlushAudioOutBuffers|FlushAudioOutBuffers]]
 +
|-
 +
| 12 || [6.0.0+] [[#SetAudioOutVolume|SetAudioOutVolume]]
 +
|-
 +
| 13 || [6.0.0+] [[#GetAudioOutVolume|GetAudioOutVolume]]
 
|}
 
|}
    
=== GetAudioOutState ===
 
=== GetAudioOutState ===
Returns an u32 '''AudioOutState''' (0x00=Started, 0x01=Stopped).
+
No input. Returns an output [[#AudioOutState]].
 +
 
 +
=== Start ===
 +
No input/output.  
   −
=== StartAudioOut ===
   
Starts audio playback using data from appended buffers.
 
Starts audio playback using data from appended buffers.
   −
=== StopAudioOut ===
+
=== Stop ===
Stops audio playback.
+
No input/output.
 +
 
 +
Stops audio playback. This waits for audio playback to finish before returning.
    
=== 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).
+
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 format of the input buffer is as follows:
+
The event is signalled when a buffer is released.
{| class="wikitable" border="1"
  −
|-
  −
! 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 ===
+
=== GetReleasedAudioOutBuffers ===
Returns an event handle that is signalled when a buffer is released.
+
Takes a type-0x6 output buffer '''AudioBuffer'''. Returns an output u32 '''Count'''.
   −
=== GetReleasedAudioOutBuffer ===
+
'''AudioBuffer''' will be filled with the identifiers from [[#AppendAudioOutBuffer]] of audio buffers that have been released.
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 ===
 
=== ContainsAudioOutBuffer ===
Takes an u64 '''tag''' for the desired buffer. Returns 1 if the buffer was appended and not yet released.
+
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'''.
   −
=== AppendAudioOutBufferEx ===
+
=== GetAudioOutPlayedSampleCount ===
Same as [[#AppendAudioOutBuffer]] but takes a type-0x21 buffer instead.
+
No input. Returns an output u64 '''AudioOutPlayedSampleCount'''.
   −
=== GetReleasedAudioOutBufferEx ===
+
=== FlushAudioOutBuffers ===
Same as [[#GetReleasedAudioOutBuffer]] but takes a type-0x22 buffer instead.
+
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 =
This is "nn::audio::detail::IAudioInManagerForDebugger".
+
This is "nn::audio::detail::IAudioInManager".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 126: Line 120:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || ListAudioIns
+
| 0 || [[#ListAudioIns|ListAudioIns]]
 
|-
 
|-
| 1 || OpenAudioIn
+
| 1 || [[#OpenAudioIn|OpenAudioIn]]
 
|-
 
|-
| 2 || [3.0.0+] ListAudioInsEx
+
| 2 || [3.0.0+] [[#ListAudioInsAuto|ListAudioInsAuto]]
 
|-
 
|-
| 3 || [3.0.0+] OpenAudioInEx
+
| 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 142: Line 158:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetAudioInState]]
+
| 0 || [[#GetAudioInState|GetAudioInState]]
 +
|-
 +
| 1 || [[#Start_2|Start]]
 +
|-
 +
| 2 || [[#Stop_2|Stop]]
 +
|-
 +
| 3 || [[#AppendAudioInBuffer|AppendAudioInBuffer]]
 +
|-
 +
| 4 || [[#RegisterBufferEvent_2|RegisterBufferEvent]]
 
|-
 
|-
| 1 || StartAudioIn
+
| 5 || [[#GetReleasedAudioInBuffers|GetReleasedAudioInBuffers]]
 
|-
 
|-
| 2 || StopAudioIn
+
| 6 || [[#ContainsAudioInBuffer|ContainsAudioInBuffer]]
 
|-
 
|-
| 3 || AppendAudioInBuffer
+
| 7 || [3.0.0+] [[#AppendUacInBuffer|AppendUacInBuffer]]
 
|-
 
|-
| 4 || RegisterBufferEvent
+
| 8 || [3.0.0+] [[#AppendAudioInBufferAuto|AppendAudioInBufferAuto]]
 
|-
 
|-
| 5 || GetReleasedAudioInBuffer
+
| 9 || [3.0.0+] [[#GetReleasedAudioInBuffersAuto|GetReleasedAudioInBuffersAuto]]
 
|-
 
|-
| 6 || ContainsAudioInBuffer
+
| 10 || [3.0.0+] [[#AppendUacInBufferAuto|AppendUacInBufferAuto]]
 
|-
 
|-
| 7 ||  
+
| 11 || [4.0.0+] [[#GetAudioInBufferCount|GetAudioInBufferCount]]
 
|-
 
|-
| 8 || [3.0.0+] AppendAudioInBufferEx
+
| 12 || [4.0.0+] [[#SetDeviceGain|SetDeviceGain]]
 
|-
 
|-
| 9 || [3.0.0+] GetReleasedAudioInBufferEx
+
| 13 || [4.0.0+] [[#GetDeviceGain|GetDeviceGain]]
 
|-
 
|-
| 10 || [3.0.0+]
+
| 14 || [6.0.0+] [[#FlushAudioInBuffers|FlushAudioInBuffers]]
 
|}
 
|}
    
=== GetAudioInState ===
 
=== GetAudioInState ===
 +
No input. Returns an output [[#AudioInState]].
 +
 +
=== Start ===
 +
No input/output.
   −
Returns an AudioInState, 0x00=Started 0x01=Stopped (u32)
+
=== 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 176: 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 186: Line 258:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || GetFinalOutputRecorderState
+
| 0 || [[#GetFinalOutputRecorderState|GetFinalOutputRecorderState]]
 +
|-
 +
| 1 || [[#Start_3|Start]]
 +
|-
 +
| 2 || [[#Stop_3|Stop]]
 
|-
 
|-
| 1 || StartFinalOutputRecorder
+
| 3 || [[#AppendFinalOutputRecorderBuffer|AppendFinalOutputRecorderBuffer]]
 
|-
 
|-
| 2 || StopFinalOutputRecorder
+
| 4 || [[#RegisterBufferEvent_3|RegisterBufferEvent]]
 
|-
 
|-
| 3 || AppendFinalOutputRecorderBuffer
+
| 5 || [[#GetReleasedFinalOutputRecorderBuffers|GetReleasedFinalOutputRecorderBuffers]]
 
|-
 
|-
| 4 || RegisterBufferEvent
+
| 6 || [[#ContainsFinalOutputRecorderBuffer|ContainsFinalOutputRecorderBuffer]]
 
|-
 
|-
| 5 || GetReleasedFinalOutputRecorderBuffer
+
| 7 || [[#GetFinalOutputRecorderBufferEndTime|GetFinalOutputRecorderBufferEndTime]]
 
|-
 
|-
| 6 || ContainsFinalOutputRecorderBuffer
+
| 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 210: Line 348:  
| 0 || OpenAudioRenderer
 
| 0 || OpenAudioRenderer
 
|-
 
|-
| 1 || GetAudioRendererWorkBufferSize
+
| 1 || GetWorkBufferSize
 +
|-
 +
| 2 || [[#GetAudioDeviceService]]
 
|-
 
|-
| 2 || GetAudioRenderersProcessMasterVolume
+
| 3 || [3.0.0+] OpenAudioRendererForManualExecution
 
|-
 
|-
| 3 || SetAudioRenderersProcessMasterVolume
+
| 4 || [4.0.0+] GetAudioDeviceServiceWithRevisionInfo
 
|}
 
|}
 +
 +
=== GetAudioDeviceService ===
 +
Takes an input u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]], returns an output [[#IAudioDevice]].
    
== IAudioRenderer ==
 
== IAudioRenderer ==
Line 224: Line 367:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetAudioRendererSampleRate]]
+
| 0 || [[#GetSampleRate]]
 
|-
 
|-
| 1 || [[#GetAudioRendererSampleCount]]
+
| 1 || [[#GetSampleCount]]
 
|-
 
|-
| 2 || [[#GetAudioRendererMixBufferCount]]
+
| 2 || [[#GetMixBufferCount]]
 
|-
 
|-
| 3 || [[#GetAudioRendererState]]
+
| 3 || [[#GetState]]
 
|-
 
|-
| 4 || RequestUpdateAudioRenderer
+
| 4 || RequestUpdate
 
|-
 
|-
| 5 || StartAudioRenderer
+
| 5 || Start
 
|-
 
|-
| 6 || StopAudioRenderer
+
| 6 || Stop
 
|-
 
|-
 
| 7 || QuerySystemEvent
 
| 7 || QuerySystemEvent
 
|-
 
|-
| 8 || [[#SetAudioRendererRenderingTimeLimit]]
+
| 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".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! 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
 
|-
 
|-
| 9 || [[#GetAudioRendererRenderingTimeLimit]]
+
| 20 || [18.0.0+] IsAudioDeviceOutputVolumeAutoTuneEnabled
 
|}
 
|}
   −
=== GetAudioRendererSampleRate ===
+
=== ListAudioDeviceName ===
Returns the Sample Rate. (u32)
+
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+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! 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+].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || RequestSuspend
 +
|-
 +
| 1 || RequestResume
 +
|-
 +
| 2 || GetProcessMasterVolume
 +
|-
 +
| 3 || SetProcessMasterVolume
 +
|}
   −
=== GetAudioRendererSampleCount ===
+
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.
Returns the Sample Count. (u32)
     −
=== GetAudioRendererMixBufferCount ===
+
= audrec:a =
Returns the number of Mix Buffers. (u32)
+
This is "nn::audio::detail::IFinalOutputRecorderManagerForApplet".
   −
=== GetAudioRendererState ===
+
{| class="wikitable" border="1"
Returns an AudioRenderState, 0x00=Started 0x01=Stopped (u32)
+
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || RequestSuspend
 +
|-
 +
| 1 || RequestResume
 +
|}
   −
=== SetAudioRendererRenderingTimeLimit ===
+
[4.0.0+] RequestSuspend/RequestResume no longer returns an output handle.
Takes a upper limit of the rendering time in percent. (u32)
     −
=== GetAudioRendererRenderingTimeLimit ===
+
= audren:a =
Returns the upper limit of the rendering time in percent. (u32)
+
This is "nn::audio::detail::IAudioRendererManagerForApplet".
   −
= audout:a, audin:a, audrec:a, audren:a =
+
This was removed with [11.0.0+].
This is "nn::audio::detail::IAudioOutManagerForApplet", "nn::audio::detail::IAudioInManagerForApplet", "nn::audio::detail::IFinalOutputRecorderManagerForApplet", "nn::audio::detail::IAudioRendererManagerForApplet".
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 273: Line 556:  
|-
 
|-
 
| 1 || RequestResume
 
| 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 =
 
= 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"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#RequestSuspend]]
 +
|-
 +
| 1 || [[#RequestResume]]
 +
|}
 +
 +
== RequestSuspend ==
 +
Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]].
 +
 +
== RequestResume ==
 +
Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]].
 +
 +
= audctl =
 +
This is "nn::audioctrl::detail::IAudioController".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 282: Line 599:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#RequestSuspendForDebug]]
+
| 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
 
|-
 
|-
| 1 || [[#RequestResumeForDebug]]
+
| 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
 +
|-
 +
| 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+] SetAnalogInputBoostGainForPrototyping
 
|}
 
|}
   −
== RequestSuspendForDebug ==
+
== GetAudioVolumeDataForPlayReport ==
 +
No input, returns a total of 7-bytes of output.
   −
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)
+
[13.0.0+] No input, returns a total of 9-bytes of output.
   −
== RequestResumeForDebug ==
+
== UpdateHeadphoneSettings ==
 +
Takes one input bool. No output.
 +
NS calls this with the result of [[Parental_Control_services#IParentalControlService|IParentalControlService::IsRestrictionEnabled]].
   −
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)
+
== 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 =
 
This is "nn::audio::detail::ICodecController".
 
This is "nn::audio::detail::ICodecController".
 +
 +
This service no longer exists in [3.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 302: Line 733:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || InitializeCodecController
+
| 0 || [[#Initialize]]
 
|-
 
|-
| 1 || FinalizeCodecController
+
| 1 || [[#Finalize]]
 
|-
 
|-
| 2 || SleepCodecController
+
| 2 || [[#Sleep]]
 
|-
 
|-
| 3 || WakeCodecController
+
| 3 || [[#Wake]]
 
|-
 
|-
| 4 || [[#SetCodecVolume]]
+
| 4 || [[#SetVolume]]
 
|-
 
|-
| 5 || GetCodecVolumeMax
+
| 5 || [[#GetVolumeMax]]
 
|-
 
|-
| 6 || GetCodecVolumeMin
+
| 6 || [[#GetVolumeMin]]
 
|-
 
|-
| 7 || SetCodecActiveTarget
+
| 7 || [[#SetActiveTarget]]
 
|-
 
|-
| 8 || Unknown
+
| 8 || [[#GetActiveTarget]]
 
|-
 
|-
| 9 || BindCodecHeadphoneMicJackInterrupt
+
| 9 || [[#BindHeadphoneMicJackInterrupt]]
 
|-
 
|-
| 10 || IsCodecHeadphoneMicJackInserted
+
| 10 || [[#IsHeadphoneMicJackInserted]]
 
|-
 
|-
| 11 || ClearCodecHeadphoneMicJackInterrupt
+
| 11 || [[#ClearHeadphoneMicJackInterrupt]]
 
|-
 
|-
| 12 || IsCodecDeviceRequested
+
| 12 || [[#IsRequested]]
 
|}
 
|}
   −
== SetCodecVolume ==
+
== 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".
   −
Takes a Volume (uint32)
+
{| class="wikitable" border="1"
 +
|-
 +
! 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".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! 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.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! 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+].
 +
 
 +
{| 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+]
 +
|}
 +
 
 +
= 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
 +
|}
    
[[Category:Services]]
 
[[Category:Services]]

Navigation menu