#pragma once struct SceNgsVoiceDefinition; using SceNgsHVoice = vm::ptr; using SceNgsHPatch = vm::ptr; using SceNgsHSynSystem = vm::ptr; using SceNgsHRack = vm::ptr; struct SceNgsModuleParamHeader { le_t moduleId; le_t chan; }; struct SceNgsParamsDescriptor { le_t id; le_t size; }; struct SceNgsBufferInfo { vm::lptr data; le_t size; }; struct SceNgsVoicePreset { le_t nNameOffset; le_t uNameLength; le_t nPresetDataOffset; le_t uSizePresetData; le_t nBypassFlagsOffset; le_t uNumBypassFlags; }; struct SceNgsSystemInitParams { le_t nMaxRacks; le_t nMaxVoices; le_t nGranularity; le_t nSampleRate; le_t nMaxModules; }; struct SceNgsRackDescription { vm::lcptr pVoiceDefn; le_t nVoices; le_t nChannelsPerVoice; le_t nMaxPatchesPerInput; le_t nPatchesPerOutput; vm::lptr pUserReleaseData; }; struct SceNgsPatchSetupInfo { SceNgsHVoice hVoiceSource; le_t nSourceOutputIndex; le_t nSourceOutputSubIndex; SceNgsHVoice hVoiceDestination; le_t nTargetInputIndex; }; struct SceNgsVolumeMatrix { le_t m[2][2]; }; struct SceNgsPatchRouteInfo { le_t nOutputChannels; le_t nInputChannels; SceNgsVolumeMatrix vols; }; struct SceNgsVoiceInfo { le_t uVoiceState; le_t uNumModules; le_t uNumInputs; le_t uNumOutputs; le_t uNumPatchesPerOutput; }; struct SceNgsCallbackInfo { SceNgsHVoice hVoiceHandle; SceNgsHRack hRackHandle; le_t uModuleID; le_t nCallbackData; le_t nCallbackData2; vm::lptr pCallbackPtr; vm::lptr pUserData; }; using SceNgsCallbackFunc = void(vm::cptr pCallbackInfo); struct SceSulphaNgsConfig { le_t maxNamedObjects; le_t maxTraceBufferBytes; };