Audio services: Difference between revisions
| (8 intermediate revisions by the same user not shown) | |||
| Line 343: | Line 343: | ||
|} | |} | ||
= | = (S2) auddev:s = | ||
This is "nn::audio:: | This is "nn::audio::sysdev::ISessionManager". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 350: | Line 350: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || | ||
|- | |- | ||
| 1 || | | 1 || | ||
|} | |} | ||
== | == Cmd0 == | ||
No input, returns an [[#IAdspShellSession|IAdspShellSession]]. | |||
== Cmd1 == | |||
No input, returns an [[#IClientManager|IClientManager]]. | |||
== | == IAdspShellSession == | ||
This is "nn::audio:: | This is "nn::audio::adspshell::IAdspShellSession". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 371: | Line 368: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || SendKernelDebugCommand | ||
|- | |- | ||
| 1 || | | 1 || SendFatalErrorCommand | ||
|- | |- | ||
| 2 || | | 2 || SendReadMemoryCommand | ||
|- | |- | ||
| 3 || | | 3 || SendStressTestCommand | ||
|} | |||
== IClientManager == | |||
This is "nn::audio::dpm::IClientManager". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || | ||
| | |} | ||
| | |||
=== Cmd0 === | |||
No input, returns an [[#IClientSession|IClientSession]]. | |||
=== IClientSession === | |||
This is "nn::audio::dpm::IClientSession". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |||
| 0 || CreateProcess | |||
|- | |||
| 1 || WaitProcess | |||
|- | |||
| 2 || TerminateProcess | |||
|} | |||
= audren:u = | |||
This is "nn::audio::detail::IAudioRendererManager". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || OpenAudioRenderer | ||
|- | |- | ||
| | | 1 || GetWorkBufferSize | ||
|- | |- | ||
| | | 2 || [[#GetAudioDeviceService]] | ||
|- | |- | ||
| | | 3 || [3.0.0+] OpenAudioRendererForManualExecution | ||
|- | |- | ||
| | | 4 || [4.0.0+] GetAudioDeviceServiceWithRevisionInfo | ||
|} | |} | ||
=== | === GetAudioDeviceService === | ||
Takes an input u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]], returns an output [[#IAudioDevice]]. | |||
== | == IAudioRenderer == | ||
This is "nn::audio::detail::IAudioRenderer". | |||
This is "nn::audio::detail:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 425: | Line 432: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || [[# | | 0 || [[#GetSampleRate|GetSampleRate]] | ||
|- | |- | ||
| 1 || [[# | | 1 || [[#GetSampleCount|GetSampleCount]] | ||
|- | |- | ||
| 2 || [[# | | 2 || [[#GetMixBufferCount|GetMixBufferCount]] | ||
|- | |- | ||
| 3 || | | 3 || [[#GetState|GetState]] | ||
|- | |- | ||
| 4 || | | 4 || [[#RequestUpdate|RequestUpdate]] | ||
|- | |- | ||
| 5 || | | 5 || [[#Start|Start]] | ||
|- | |- | ||
| 6 || | | 6 || [[#Stop|Stop]] | ||
|- | |- | ||
| 7 || | | 7 || [[#QuerySystemEvent|QuerySystemEvent]] | ||
|- | |- | ||
| 8 || | | 8 || [[#SetRenderingTimeLimit|SetRenderingTimeLimit]] | ||
|- | |- | ||
| | | 9 || [[#GetRenderingTimeLimit|GetRenderingTimeLimit]] | ||
|- | |- | ||
| | | 10 || [3.0.0+] [[#RequestUpdateAuto|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). | |||
The output is determined using the flag updated by [[#Start|Start]]/[[#Stop|Stop]]. | |||
=== | === RequestUpdate === | ||
Takes a type- | Takes two type-0x6 output buffers and a type-0x5 input buffer. | ||
=== | === Start === | ||
No input/output. | |||
Besides logging, this calls a func which essentially clears a state field and sets a flag, and also calls a func. | |||
The thread which handles generating/sending ADSP commands will only do so when the above flag indicates the state is Started. | |||
= | === Stop === | ||
No input/output. | |||
After logging, this calls a func which essentially returns when the flag from [[#Start|Start]] is not set. Various funcs are called, then the flag is cleared. If needed, this waits on an event, then this returns. | |||
{| class="wikitable" border="1" | === QuerySystemEvent === | ||
No input, returns an output Event handle. | |||
=== SetRenderingTimeLimit === | |||
Takes an u32 '''RenderingTimeLimit'''. No output. | |||
=== GetRenderingTimeLimit === | |||
No input. Returns an u32 '''RenderingTimeLimit'''. | |||
=== RequestUpdateAuto === | |||
Takes two type-0x22 output buffers and a type-0x21 input buffer. | |||
This is identical to [[#RequestUpdate|RequestUpdate]] besides the buffer-types. | |||
== IAudioDevice == | |||
This is "nn::audio::detail::IAudioDevice". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 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|AcquireAudioInputDeviceNotification]] | |||
[ | |- | ||
| 16 || [17.0.0+] [[#ReleaseAudioInputDeviceNotification|ReleaseAudioInputDeviceNotification]] | |||
|- | |||
| 17 || [17.0.0+] [[#AcquireAudioOutputDeviceNotification|AcquireAudioOutputDeviceNotification]] | |||
|- | |||
| 18 || [17.0.0+] [[#ReleaseAudioOutputDeviceNotification|ReleaseAudioOutputDeviceNotification]] | |||
|- | |- | ||
| 19 || [18.0.0+] SetAudioDeviceOutputVolumeAutoTuneEnabled | |||
|- | |- | ||
| | | 20 || [18.0.0+] IsAudioDeviceOutputVolumeAutoTuneEnabled | ||
|- | |- | ||
| | | 21 || [21.0.0+] [[#IsActiveOutputDeviceEstimatedLowLatency|IsActiveOutputDeviceEstimatedLowLatency]] | ||
|} | |} | ||
=== 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 === | ||
This is "nn::audio::detail:: | 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. | |||
=== AcquireAudioInputDeviceNotification === | |||
Takes an input u64, returns an output handle. | |||
On NX this just returns an error. | |||
=== ReleaseAudioInputDeviceNotification === | |||
Takes an input u64, no output. | |||
On NX this just returns an error. | |||
=== AcquireAudioOutputDeviceNotification === | |||
Takes an input u64, returns an output handle. | |||
On NX this just returns an error. | |||
=== ReleaseAudioOutputDeviceNotification === | |||
Takes an input u64, no output. | |||
On NX this just returns an error. | |||
=== IsActiveOutputDeviceEstimatedLowLatency === | |||
No input, returns an output bool. | |||
The output bool is set to global_state_field == 0x4. | |||
= audout:a = | |||
This is "nn::audio::detail::IAudioOutManagerForApplet". | |||
This was removed with [11.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 587: | Line 612: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || RequestSuspend | ||
|- | |- | ||
| 1 || [[ | | 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+]. | |||
This | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 605: | Line 636: | ||
! 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 = | |||
This is "nn::audio::detail::IFinalOutputRecorderManagerForApplet". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! 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+]. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! 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+]. | |||
{| 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" | |||
|- | |- | ||
| | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || GetTargetVolume | ||
|- | |- | ||
| | | 1 || SetTargetVolume | ||
|- | |- | ||
| | | 2 || GetTargetVolumeMin | ||
|- | |- | ||
| | | 3 || GetTargetVolumeMax | ||
|- | |- | ||
| | | 4 || IsTargetMute | ||
|- | |- | ||
| | | 5 || SetTargetMute | ||
|- | |- | ||
| | | 6 || [20.0.0+] ([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 || [20.0.0+] ([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-19.0.1] SetVolumeButtonLongPressTime | ||
|- | |||
| 42 || [15.0.0+] SetNativeVolumeForDebug | |||
|- | |||
| 43 || [21.0.0+] | |||
|- | |||
| 5000 || [19.0.0+] | |||
[ | |||
[15.0.0 | |||
[ | |||
[ | |||
|- | |- | ||
| 10000 || [13.0.0-19.0.1] NotifyAudioOutputTargetForPlayReport | |||
|- | |- | ||
| 0 || [ | | 10001 || [13.0.0-19.0.1] NotifyAudioOutputChannelCountForPlayReport | ||
|- | |||
| 10002 || [13.0.0-19.0.1] NotifyUnsupportedUsbOutputDeviceAttachedForPlayReport | |||
|- | |- | ||
| | | 10100 || [14.0.0+] [[#GetAudioVolumeDataForPlayReport]] | ||
|- | |- | ||
| | | 10101 || [14.0.0+] BindAudioVolumeUpdateEventForPlayReport | ||
|- | |- | ||
| | | 10102 || [14.0.0-19.0.1] BindAudioOutputTargetUpdateEventForPlayReport | ||
|- | |- | ||
| | | 10103 || [14.0.0-19.0.1] GetAudioOutputTargetForPlayReport | ||
|- | |- | ||
| | | 10104 || [14.0.0-19.0.1] GetAudioOutputChannelCountForPlayReport | ||
|- | |- | ||
| | | 10105 || [14.0.0-19.0.1] BindAudioOutputChannelCountUpdateEventForPlayReport | ||
|- | |- | ||
| | | 10106 || [14.0.0-19.0.1] GetDefaultAudioOutputTargetForPlayReport | ||
|- | |- | ||
| | | 10200 || [20.0.0+] | ||
|- | |- | ||
| | | 50000 || [15.0.0-18.1.0] SetAnalogInputBoostGainForPrototyping | ||
|- | |- | ||
| | | 50001 || [19.0.0-19.0.1] OverrideDefaultTargetForDebug | ||
|- | |- | ||
| | | 50003 || [19.0.0+] SetForceOverrideExternalDeviceNameForDebug | ||
|- | |- | ||
| | | 50004 || [19.0.0+] ClearForceOverrideExternalDeviceNameForDebug | ||
|} | |} | ||
== | == SetSystemOutputMasterVolume == | ||
No | Takes an input float '''SystemOutputMasterVolume'''. No output. | ||
[20.0.0+] Originally any input was accepted, now input must be in range 0.0-1.0 otherwise it's replaced by nearest accepted value. | |||
== | == GetSystemOutputMasterVolume == | ||
No input | No input. Returns an output float '''SystemOutputMasterVolume'''. | ||
== | == GetAudioVolumeDataForPlayReport == | ||
No input | No input, returns a total of 7-bytes of output. | ||
[13.0.0+] No input, returns a total of 9-bytes of output. | |||
[20.0.0+] Now takes a 0x400-bytes type-0x16 output buffer and no longer returns any output. | |||
== | == UpdateHeadphoneSettings == | ||
Takes one input bool. No output. | |||
NS calls this with the result of [[Parental_Control_services#IParentalControlService|IParentalControlService::IsRestrictionEnabled]]. | |||
== | == GetSystemInformationForDebug == | ||
No | Takes a type-0x1A output buffer. No output. | ||
[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. | |||
[20.0.0+] Now takes a total of 0x40-bytes of input and the type-0x16 output buffer is now 0x2000-bytes instead of 0x1000-bytes. | |||
= | = codecctl = | ||
This is "nn::audio::detail::ICodecController". | |||
This service no longer exists in [3.0.0+]. | |||
This | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 837: | Line 875: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || [[# | | 0 || [[#Initialize]] | ||
|- | |- | ||
| 1 || [[# | | 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 | 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". | |||
This is "nn::codec::detail:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 901: | Line 948: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || [[#OpenHardwareOpusDecoder]] | ||
|- | |- | ||
| 1 || [[# | | 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 | ||
|- | |- | ||
| | | 100 || [S2] | ||
|} | |} | ||
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 | 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- | 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- | 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. | |||
The | == 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 | 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. | ||
The | == 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 | 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 | The input buffer is a [[#OpusMultiStreamParametersEx]] struct. | ||
== | == Cmd100 == | ||
No input, returns an [[#IClientSession_2|IClientSession]]. | |||
== IHardwareOpusDecoder == | |||
This is "nn::codec::detail::IHardwareOpusDecoder". | |||
= | |||
This is "nn:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 971: | Line 1,017: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || [4.0.0+] [[#DecodeInterleavedOld]] ([1.0.0-3.0.2] DecodeInterleaved) | ||
|- | |- | ||
| 1 || | | 1 || [[#SetContext]] | ||
|- | |- | ||
| 2 || | | 2 || [4.0.0+] [[#DecodeInterleavedForMultiStreamOld]] ([3.0.0-3.0.2] DecodeInterleavedForMultiStream) | ||
|- | |- | ||
| 3 || | | 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. | |||
== | == IClientSession == | ||
This is "nn:: | This is "nn::codec::hwacod::IClientSession". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 1,062: | Line 1,086: | ||
|- | |- | ||
| 0 || | | 0 || | ||
|} | |- | ||
| 1 || | |||
|- | |||
| 10 || | |||
|} | |||
=== | === Cmd10 === | ||
Takes | Takes {...}, returns an [[#IHardwareAudioCodecManagerSession|IHardwareAudioCodecManagerSession]]. | ||
= | === IHardwareAudioCodecManagerSession === | ||
This is "nn:: | This is "nn::codec::hwacod::IHardwareAudioCodecManagerSession". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 1,075: | Line 1,103: | ||
|- | |- | ||
| 0 || | | 0 || | ||
|- | |||
| 1 || | |||
|- | |||
| 10 || | |||
|} | |} | ||
= | = auddebug = | ||
This is "nn::audio::detail::IAudioDebugManager". | |||
This service doesn't exist in retail units. | |||
This | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 1,087: | Line 1,118: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 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-19.0.1] 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 | ||
|} | |} | ||
= (S2) | = (S2) aud:u = | ||
This is "nn::audio:: | This is "nn::audio::IUserClientSession". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 1,132: | Line 1,181: | ||
|- | |- | ||
| 0 || | | 0 || | ||
|- | |- | ||
| 1 || | | 1 || | ||
| Line 1,151: | Line 1,189: | ||
|} | |} | ||
== | == Cmd0 == | ||
No input, returns an output [[#audin:u|IAudioInManager]]. | |||
== | == Cmd1 == | ||
No input, returns an output [[#audout:u|IAudioOutManager]]. | |||
== | == Cmd2 == | ||
No input, returns an output [[#audren:u|IAudioRendererManager]]. | |||
==== | == Cmd3 == | ||
This is "nn::audio:: | No input, returns an output [[#ISpatialDownmixOutputModeManager|ISpatialDownmixOutputModeManager]]. | ||
=== ISpatialDownmixOutputModeManager === | |||
This is "nn::audio::detail::ISpatialDownmixOutputModeManager". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| Line 1,168: | Line 1,209: | ||
|- | |- | ||
| 0 || | | 0 || | ||
|} | |||
==== Cmd0 ==== | |||
Takes a PID, an u32, u64, no output. | |||
= (S2) auddmg:u = | |||
This is "nn::audio::devmgr::IUserSessionManager". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || | ||
|} | |||
== Cmd0 == | |||
Takes a PID, an u32, an u64 pid_reserved, returns an output [[#IUserSession|IUserSession]]. | |||
=== IUserSession === | |||
This is "nn::audio::devmgr::IUserSession". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Cmd || Name | |||
|- | |- | ||
| | | 0 || | ||
|- | |- | ||
| | | 100 || | ||
|- | |- | ||
| | | 200 || | ||
|- | |- | ||
| | | 300 || | ||
|- | |- | ||
| | | 401 || | ||
|- | |- | ||
| | | 500 || | ||
|- | |- | ||
| | | 600 || | ||
|- | |- | ||
| | | 700 || | ||
|- | |- | ||
| | | 800 || | ||
|- | |- | ||
| 900 || | |||
|- | |||
| 1000 || | |||
|- | |- | ||
| | | 1500 || | ||
|- | |- | ||
| | | 1550 || | ||
|- | |- | ||
| | | 1600 || | ||
|- | |- | ||
| | | 2000 || | ||
|- | |- | ||
| | | 2100 || | ||
|- | |- | ||
| | | 2200 || | ||
|- | |- | ||
| | | 2301 || | ||
|} | |} | ||
= | = (S2) auddmg:s = | ||
This is "nn::audio:: | This is "nn::audio::devmgr::ISystemSessionManager". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || | ||
|} | |} | ||
= | == Cmd0 == | ||
This is "nn::audio:: | Takes a PID, an u32, an u64 pid_reserved, returns an output [[#ISystemSession|ISystemSession]]. | ||
== ISystemSession == | |||
This is "nn::audio::devmgr::ISystemSession". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |||
| 0 || ListPhysicalDeviceNames | |||
|- | |- | ||
| | | 1 || EnableSoundDriver | ||
|- | |- | ||
| | | 2 || DisableSoundDriver | ||
|- | |- | ||
| 3 || IsSoundDriverEnabled | |||
|- | |- | ||
| | | 4 || ListPhysicalDeviceIds | ||
|- | |- | ||
| | | 5 || GetPhysicalDeviceId | ||
|- | |- | ||
| 6 || GetPhysicalDeviceProfile | |||
|- | |- | ||
| | | 7 || MapRawInputDevice | ||
| | |- | ||
| | | 8 || MapAndBindPhysicalDevice | ||
| | |||
|- | |- | ||
| 9 || UnmapPhysicalDevice | |||
|- | |- | ||
| | | 10 || GetBoundPhysicalDeviceProfile | ||
| | |||
| | |||
|- | |- | ||
| 11 || GetRawInputPhysicalDeviceProfile | |||
|- | |- | ||
| | | 12 || SetVirtualDeviceGain | ||
| | |- | ||
| | | 13 || GetVirtualDeviceGain | ||
|- | |||
| 14 || SetAppletVirtualDeviceGain | |||
|- | |- | ||
| | | 15 || GetAppletVirtualDeviceGain | ||
| | |||
| | |||
|- | |- | ||
| | | 16 || SetAppletCaptureDeviceGain | ||
| | |||
| | |||
|- | |- | ||
| 17 || GetAppletCaptureDeviceGain | |||
|- | |- | ||
| | | 18 || SetAppletBiquadFilterMode | ||
| | |||
| | |||
|- | |- | ||
| | | 19 || SetAppletBiquadFilterParameters | ||
| | |||
| | |||
|- | |- | ||
| | | 20 || GetAppletBiquadFilterParameters | ||
| | |- | ||
| | | 21 || SuspendAppletVirtualDevice | ||
| | |- | ||
| 22 || ResumeAppletVirtualDevice | |||
|- | |||
| 23 || SetPhysicalDeviceGain | |||
|- | |- | ||
| 24 || GetPhysicalDeviceGain | |||
|- | |- | ||
| | | 25 || SetPhysicalDeviceFeature | ||
| | |||
| | |||
|- | |- | ||
| | | 26 || GetPhysicalDeviceFeature | ||
| | |||
| | |||
|- | |- | ||
| | | 27 || SetGlobalPhysicalDeviceFeature | ||
| | |||
| | |||
|- | |- | ||
| | | 28 || GetGlobalPhysicalDeviceFeature | ||
| | |- | ||
| | | 29 || AcquireGlobalPhysicalDeviceEvent | ||
|- | |||
| 30 || ReleaseGlobalPhysicalDeviceEvent | |||
|- | |||
| 31 || BindPhysicalDevice | |||
|- | |||
| 32 || SetMonauralDownmixMode | |||
|- | |||
| 33 || SetControl | |||
|- | |||
| 34 || GetMonauralDownmixMode | |||
|- | |||
| 35 || GetControl | |||
|- | |||
| 36 || ShellCommand | |||
|- | |||
| 37 || SetAppletVirtualDeviceLoudnessNormalization | |||
|- | |||
| 38 || GetAppletVirtualDeviceLoudnessNormalization | |||
|- | |||
| 39 || SetLoudnessNormalizationParameters | |||
|- | |||
| 40 || GetLoudnessNormalizationParameters | |||
|- | |||
| 41 || GetLoudnessNormalizationStatistics | |||
|- | |||
| 42 || SetAppletVirtualDeviceLoudnessNormalizationBiasParameters | |||
|- | |||
| 43 || GetAppletVirtualDeviceLoudnessNormalizationBiasParameters | |||
|- | |||
| 44 || SetAppletVirtualDevicePostGain | |||
|- | |||
| 45 || GetAppletVirtualDevicePostGain | |||
|- | |||
| 46 || UnbindVirtualDevice | |||
|} | |} | ||
= | = (S2) audsmx:u = | ||
This is "nn::audio:: | This is "nn::audio::sysmix::IUserSessionManager". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || | ||
| | |||
| | |||
|} | |} | ||
= | == Cmd0 == | ||
This is "nn::audio:: | Takes a PID, a Process handle, an u32, an u64 pid_reserved, returns an output [[#IUserSession_2|IUserSession]]. | ||
Official sw uses hard-coded value 0x1 for the u32. | |||
An error is returned when there's already an [[#IUserSession|IUserSession]] open with the same PID. | |||
=== IUserSession === | |||
This is "nn::audio::sysmix::IUserSession". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |- | ||
| | | 1 || | ||
| | |||
| | |||
|- | |- | ||
| | | 2 || | ||
| | |||
| | |||
|- | |- | ||
| | | 3 || | ||
| | |||
| | |||
|} | |} | ||
= | ==== Cmd1 ==== | ||
This is "nn::audio:: | Takes a type-0x5 input buffer, two input u32s, 3 u64s, returns an output [[#IExternalStreamSession|IExternalStreamSession]]. | ||
==== Cmd2 ==== | |||
Takes a type-0x5 input buffer, no output. | |||
==== Cmd3 ==== | |||
Takes a type-0x5 input buffer, no output. | |||
==== IExternalStreamSession ==== | |||
This is "nn::audio::sysmix::IExternalStreamSession". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Cmd || Name | ||
|- | |- | ||
| | | 0 || | ||
| | |||
| | |||
|- | |- | ||
| | | 1 || | ||
| | |||
| | |||
|- | |- | ||
| | | 2 || | ||
| | |||
| | |||
|- | |- | ||
| | | 3 || | ||
| | |||
| | |||
|- | |- | ||
| | | 4 || | ||
| | |||
| | |||
|- | |- | ||
| 5 || | |||
|- | |- | ||
| | | 6 || | ||
| | |||
| | |||
|- | |- | ||
| | | 7 || | ||
| | |||
| | |||
|- | |- | ||
| | | 8 || | ||
| | |- | ||
| | | 9 || | ||
|- | |- | ||
| | | 10 || | ||
| | |||
| | |||
|- | |- | ||
| | | 11 || | ||
| | |||
| | |||
|- | |- | ||
| | | 12 || | ||
| | |||
| | |||
|} | |} | ||
= | = SampleFormat = | ||
This is "nn::audio:: | This is "nn::audio::SampleFormat". | ||
{| class="wikitable" border="1" | {| 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:: | This is "nn::audio::AudioOutState". | ||
{| class="wikitable" border="1" | {| 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:: | This is "nn::audio::FinalOutputRecorderState". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Value || Name | ||
|- | |- | ||
| | | 0 || Started | ||
| | |||
| | |||
|- | |- | ||
| | | 1 || Stopped | ||
| | |||
| | |||
|} | |} | ||
= | = AudioOutInfo = | ||
This is "nn::audio::AudioOutInfo". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 1,540: | Line 1,528: | ||
|- | |- | ||
| 0x0 | | 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" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 1,568: | Line 1,560: | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| | | 0x2 | ||
| ChannelCount | | ChannelCount | ||
|- | |- | ||
| | | 0x6 | ||
| | | 0x2 | ||
| | | Reserved | ||
|} | |} | ||
= | = AudioInParameter = | ||
This is "nn::audio::AudioInParameter". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 1,596: | Line 1,582: | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| | | 0x2 | ||
| ChannelCount | | ChannelCount | ||
|- | |- | ||
| | | 0x6 | ||
| | | 0x2 | ||
| | | Reserved | ||
|} | |||
= AudioOutParameterInternal = | |||
This is "nn::audio::detail::AudioOutParameterInternal". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Offset | ||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x4 | | 0x4 | ||
| | | SampleRate | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| | | 0x4 | ||
| ChannelCount | |||
|- | |- | ||
| | | 0x8 | ||
| 0x4 | | 0x4 | ||
| | | SampleFormat | ||
|- | |- | ||
| | | 0xC | ||
| | | 0x4 | ||
| | | State | ||
|} | |} | ||
= | = AudioInParameterInternal = | ||
This is | This is "nn::audio::detail::AudioInParameterInternal". | ||
{| class="wikitable" border="1" | {| 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 | |||
|} | |||
= BehaviorInfo Revision = | |||
This is the revision field used with audren. This controls which format is used for the data used with [[#IAudioRenderer|IAudioRenderer]] RequestUpdate*, etc. | |||
Bitmask 0xFFFFFF == 0x564552 (REV) is used for determining whether the user-process is using NX-platform. On Ounce, the revision value is identical except that bitmask 0xFFFFFF is 0x764552 (REv). The latter is only supported on S2. | |||
GetWorkBufferSize/OpenAudioRenderer validate the revision, with an error being thrown if invalid (unrecognized top-byte / low-bitmask is unrecognized). | |||
{| class="wikitable" border="1" | |||
|- | |||
! System Version | |||
! Value | |||
! Required by | |||
|- | |||
| [1.0.0+] | |||
| 0x31564552 (REV1) | |||
| IsAudioRenererProcessingTimeLimit70PercentSupported | |||
|- | |||
| [2.0.0+] | |||
| 0x32564552 (REV2) | |||
| IsAdpcmLoopContextBugFixed, IsSplitterSupported | |||
|- | |||
| [3.0.0+] | |||
| 0x33564552 (REV3) | |||
| IsLongSizePreDelaySupported | |||
|- | |||
| [4.0.0+] | |||
| 0x34564552 (REV4) | |||
| IsAudioRenererProcessingTimeLimit75PercentSupported | |||
|- | |||
| [6.0.0+] | |||
| 0x35564552 (REV5) | |||
| | | | ||
* UseMultiTapBiquadFilterProcessing | * IsAudioRenererProcessingTimeLimit80PercentSupported | ||
* IsCommandProcessingTimeEstimatorVersion4Supported | * IsCommandProcessingTimeEstimatorVersion2Supported | ||
* IsDeviceApiVersion2Supported | * IsVariadicCommandBufferSizeSupported | ||
|- | * IsFlushVoiceWaveBuffersSupported | ||
| [14.0.0+] | * IsSplitterBugFixed | ||
| 0x3B564552 | * IsElapsedFrameCountSupported | ||
| | * IsPerformanceMetricsDataFormatVersion2Supported | ||
* IsDelayChannelMappingChanged | * GetPerformanceMetricsDataFormat | ||
* IsReverbChannelMappingChanged | * IsVoicePitchAndSrcSkippedSupported | ||
* IsI3dl2ReverbChannelMappingChanged | * IsVoicePlayedSampleCountResetAtLoopPointSupported | ||
* IsCommandProcessingTimeEstimatorVersion5Supported | |- | ||
|- | | [6.1.0+] | ||
| [17.0.0+] | | 0x36564552 (REV6) | ||
| 0x3C564552 | | IsBiquadFilterEffectStateClaerBugFixed | ||
| IsBiquadFilterParameterForSplitterEnabled | |- | ||
| [7.0.0+] | |||
| 0x37564552 (REV7) | |||
| | |||
* IsVolumeMixParameterPrecisionQ23Supported | |||
* UseBiquadFilterFloatProcessing | |||
* IsMixInParameterDirtyOnlyUpdateSupported | |||
|- | |||
| [9.0.0+] | |||
| 0x38564552 (REV8) | |||
| | |||
* IsWaveBufferVer2Supported | |||
* IsCommandProcessingTimeEstimatorVersion3Supported | |||
|- | |||
| [12.0.0+] | |||
| 0x39564552 (REV9) | |||
| IsEffectInfoVersion2Supported | |||
|- | |||
| [13.0.0+] | |||
| 0x3A564552 | |||
| | |||
* UseMultiTapBiquadFilterProcessing | |||
* IsCommandProcessingTimeEstimatorVersion4Supported | |||
* IsDeviceApiVersion2Supported | |||
|- | |||
| [14.0.0+] | |||
| 0x3B564552 | |||
| | |||
* IsDelayChannelMappingChanged | |||
* IsReverbChannelMappingChanged | |||
* IsI3dl2ReverbChannelMappingChanged | |||
* IsCommandProcessingTimeEstimatorVersion5Supported | |||
|- | |||
| [17.0.0+] | |||
| 0x3C564552 | |||
| IsBiquadFilterParameterForSplitterEnabled | |||
|- | |||
| [18.0.0+] | |||
| 0x3D564552 | |||
| IsSplitterPrevVolumeResetSupported | |||
|- | |||
| | |||
| 0x3E564552 | |||
| IsSplitterDepopBugFixEnabled | |||
|- | |||
| [19.0.0+] | |||
| 0x3F564552 | |||
| IsBiquadFilterParameterFloatSupported | |||
|- | |- | ||
| [ | | [22.0.0+] | ||
| | | 0x40564552 | ||
| | | IsVoiceBiquadFilterCrossFadeCurveEnabled | ||
|} | |} | ||