#pragma once enum SceVoicePortType : s32 { SCEVOICE_PORTTYPE_NULL = -1, SCEVOICE_PORTTYPE_IN_DEVICE = 0, SCEVOICE_PORTTYPE_IN_PCMAUDIO = 1, SCEVOICE_PORTTYPE_IN_VOICE = 2, SCEVOICE_PORTTYPE_OUT_PCMAUDIO = 3, SCEVOICE_PORTTYPE_OUT_VOICE = 4, SCEVOICE_PORTTYPE_OUT_DEVICE = 5 }; enum SceVoicePortState : s32 { SCEVOICE_PORTSTATE_NULL = -1, SCEVOICE_PORTSTATE_IDLE = 0, SCEVOICE_PORTSTATE_READY = 1, SCEVOICE_PORTSTATE_BUFFERING = 2, SCEVOICE_PORTSTATE_RUNNING = 3 }; enum SceVoiceBitRate : s32 { SCEVOICE_BITRATE_NULL = -1, SCEVOICE_BITRATE_3850 = 3850, SCEVOICE_BITRATE_4650 = 4650, SCEVOICE_BITRATE_5700 = 5700, SCEVOICE_BITRATE_7300 = 7300 }; enum SceVoiceSamplingRate : s32 { SCEVOICE_SAMPLINGRATE_NULL = -1, SCEVOICE_SAMPLINGRATE_16000 = 16000 }; enum SceVoicePcmDataType : s32 { SCEVOICE_PCM_NULL = -1, SCEVOICE_PCM_SHORT_LITTLE_ENDIAN = 0 }; enum SceVoiceVersion : s32 { SCEVOICE_VERSION_100 = 100 }; enum SceVoiceAppType : s32 { SCEVOICE_APPTYPE_GAME = 1 << 29 }; struct SceVoicePCMFormat { le_t dataType; // SceVoicePcmDataType le_t sampleRate; // SceVoiceSamplingRate }; struct SceVoiceResourceInfo { le_t maxInVoicePort; le_t maxOutVoicePort; le_t maxInDevicePort; le_t maxOutDevicePort; le_t maxTotalPort; }; struct SceVoiceBasePortInfo { le_t portType; // SceVoicePortType le_t state; // SceVoicePortState vm::lptr pEdge; le_t numByte; le_t frameSize; le_t numEdge; le_t reserved; }; struct SceVoicePortParam { // aux structs struct _voice_t { le_t bitrate; // SceVoiceBitRate }; struct _pcmaudio_t { using _format_t = SceVoicePCMFormat; le_t bufSize; _format_t format; }; struct _device_t { le_t playerId; }; // struct members le_t portType; // SceVoicePortType le_t threshold; le_t bMute; le_t volume; union { _pcmaudio_t pcmaudio; _device_t device; _voice_t voice; }; }; using SceVoiceEventCallback = void(vm::ptr event); struct SceVoiceInitParam { le_t appType; vm::lptr onEvent; u8 reserved[24]; }; struct SceVoiceStartParam { le_t container; u8 reserved[28]; };