From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/PS3/Network/SonyVoiceChat.h | 157 +++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 Minecraft.Client/PS3/Network/SonyVoiceChat.h (limited to 'Minecraft.Client/PS3/Network/SonyVoiceChat.h') diff --git a/Minecraft.Client/PS3/Network/SonyVoiceChat.h b/Minecraft.Client/PS3/Network/SonyVoiceChat.h new file mode 100644 index 00000000..ae68b55d --- /dev/null +++ b/Minecraft.Client/PS3/Network/SonyVoiceChat.h @@ -0,0 +1,157 @@ +#pragma once + +#include +#include +#include +#include +#include +#include /* for using AV Chat2 Utility */ +#include /* for using NP Matching */ +#include +#include +#include + + +#define AVC2_PARAM_DEFAULT_MAX_PLAYERS (8) +#define AVC2_PARAM_DEFAULT_MAX_SPEAKERS (4) + +/* state list */ +enum EAVCState +{ + AVC_STATE_IDLE = 0, + + AVC_STATE_CHAT_INIT, + AVC_STATE_CHAT_LOAD, + AVC_STATE_CHAT_JOIN, + AVC_STATE_CHAT_SESSION_PROCESSING, + AVC_STATE_CHAT_LEAVE, + AVC_STATE_CHAT_RESET, + AVC_STATE_CHAT_UNLOAD, + + AVC_STATE_EXIT, +}; +/* event list */ +enum EAVCEvent +{ + AVC_EVENT_NON = AVC_STATE_EXIT + 1, + + AVC_EVENT_EPSILON, + AVC_EVENT_LAN_DISCONNECT, + AVC_EVENT_ONLINE, + AVC_EVENT_OFFLINE, + AVC_EVENT_EXIT_GAME, + AVC_EVENT_ROOM_CREATE, + AVC_EVENT_ROOM_SEARCH, + AVC_EVENT_ERROR, + AVC_EVENT_FATAL_ERROR, + AVC_EVENT_NETDIALOG_FINISHED, + AVC_EVENT_NETDIALOG_UNLOADED, + AVC_EVENT_NP2_INIT_SUCCEEDED, + AVC_EVENT_NP2_FINALIZE_SUCCEEDED, + AVC_EVENT_NP2_START_CONTEXT_SUCCEEDED, + AVC_EVENT_NP2_STOP_CONTEXT_SUCCEEDED, + AVC_EVENT_NP2_ROOM_DESTROY_OR_KICKEDOUT, + AVC_EVENT_NP2_ROOM_MEMBER_LEFT, + AVC_EVENT_NP2_ROOM_MEMBER_JOINED, + AVC_EVENT_CHAT_LOAD_SUCCEEDED, + AVC_EVENT_CHAT_LOAD_FAILED, + AVC_EVENT_CHAT_JOIN_SUCCEEDED, + AVC_EVENT_CHAT_JOIN_FAILED, + AVC_EVENT_CHAT_LEAVE_SUCCEEDED, + AVC_EVENT_CHAT_LEAVE_FAILED, + AVC_EVENT_CHAT_UNLOAD_SUCCEEDED, + AVC_EVENT_CHAT_UNLOAD_FAILED, + AVC_EVENT_CHAT_INIT_SUCCEEDED, + AVC_EVENT_CHAT_FINALIZE_SUCCEEDED, + AVC_EVENT_CHAT_SESSION_STOPPED, + AVC_EVENT_CREATE_JOIN_ROOM_SUCCEEDED, + AVC_EVENT_SEARCH_ROOM_SUCCEEDED, + AVC_EVENT_JOIN_ROOM_SUCCEEDED, + AVC_EVENT_LEAVE_ROOM_SUCCEEDED, + AVC_EVENT_SIGNALING_ESTABLISHED, + AVC_EVENT_SIGNALING_DEAD, + AVC_EVENT_UI_CLOSE_SUCCEEDED, +}; + + +typedef struct +{ + int state; + int event; + int (*func)(void); + EAVCState new_state; +} state_transition_table; + + +class SonyVoiceChat +{ +public: + + static void init(SQRNetworkManager_PS3* pNetMan); + static void shutdown(); + static void tick(); + static void setEnabled(bool bEnabled); + static bool hasMicConnected(const SceNpMatching2RoomMemberId *players_id); + static bool isTalking(SceNpMatching2RoomMemberId* players_id); + static void mute(bool bMute); //Turn chat audio on or off + static void mutePlayer(const SceNpMatching2RoomMemberId member_id, bool bMute); //Turn chat audio from a specified player on or off; + static void muteLocalPlayer(bool bMute); //Turn microphone input on or off; + + static bool isMuted(); + static bool isMutedPlayer(const SceNpMatching2RoomMemberId member_id); + static bool isMutedLocalPlayer(); //Turn microphone input on or off; + + static void setVolume(float vol); // 0.0f - 1.0f range + static float getVolume(); // 0.0f - 1.0f range + + static bool isShuttingDown() { return (sm_state == AVC_STATE_CHAT_LEAVE || sm_state == AVC_STATE_CHAT_UNLOAD || AVC_STATE_CHAT_RESET); } + static void signalRoomDestroyed() { if(!isShuttingDown()) sm_event = AVC_EVENT_NP2_ROOM_DESTROY_OR_KICKEDOUT;} + static void signalRoomKickedOut() { if(!isShuttingDown()) sm_event = AVC_EVENT_NP2_ROOM_DESTROY_OR_KICKEDOUT;} + static void signalDisconnected() { if(!isShuttingDown()) sm_event = AVC_EVENT_LAN_DISCONNECT;} +private: +// static np2_matching2_info sm_matchingInfo; + static EAVCEvent sm_event; + static EAVCState sm_state; + static SQRNetworkManager_PS3* sm_pNetworkManager; + static bool sm_bEnabled; + static uint8_t sm_micStatus; + static bool sm_bLoaded; + static bool sm_bUnloading; + static unordered_map sm_bTalkingMap; + static bool sm_bCanStart; // set to true on init, false on disconnect, used to see if we should start after a re-enable + static bool sm_isChatRestricted; // true if the parental controls have been set on the main users account + static int sm_currentBitrate; + static int eventcb_load(CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata); + static int eventcb_join(CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata); + static int eventcb_leave( CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata); + static int eventcb_unload(CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata); + static int eventcb_voiceDetected(CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata); + static void eventcb( CellSysutilAvc2EventId event_id, CellSysutilAvc2EventParam event_param, void *userdata); + + static int initialize(); + static int finalize(); + + static int load(); + static int unload(); + + static int join(); + static int leave(); + + static int start(); + static int stop(); + + static int startStream(); + static int stopStream(); +// static int update_target(); + + static void do_state_transition( state_transition_table *tbl, int tbl_size); + static int invoke_epsilon_event(); + + static void setBitRate(); + + static void setEvent(EAVCEvent event); + static void setState(EAVCState state); + static void printStateAndEvent(); + + +}; \ No newline at end of file -- cgit v1.2.3