const APPID = "6a744d1b"; const APIKEY = "27d1b3d2f5d1bd93e7c94330b1675ee2"; const PARAM = { auth_id: "f8948af1d2d6547eaf09bc2f20ebfcc6", data_type: "audio", scene: "main_box", aue: "raw", sample_rate: "16000", }; /** * 计算握手参数 * @returns {string} WebSocket 连接参数字符串 */ function getHandshakeParams() { const paramBase64 = btoa(JSON.stringify(PARAM)); // 将参数转换为 Base64 const curTime = Math.floor(Date.now() / 1000); // 当前时间戳(秒) const originStr = APIKEY + curTime + paramBase64; // 拼接字符串 const checksum = CryptoJS.MD5(originStr).toString(); // MD5 哈希计算 return `?appid=${APPID}&checksum=${checksum}&curtime=${curTime}¶m=${paramBase64}`; } /** * 将 Int16Array 转换为 Base64 编码字符串 * @param {Int16Array} buffer PCM 数据 * @returns {string} Base64 字符串 */ function pcmToBase64(buffer) { let binary = ""; buffer.forEach((val) => { binary += String.fromCharCode(val & 0xff, (val >> 8) & 0xff); }); return btoa(binary); } /** * 录音 + WebSocket 发送的完整流程 */ async function startMicrophoneStreaming() { const wsUtil = new WebSocketUtil(Constant.INTERACT_SOCKET_URL + getHandshakeParams()); const audioProcessor = new WebRTCAudioProcessor(); // 启动音频处理 audioProcessor.start((pcmData)=>{ wsUtil.send(buildAudioPayload(transcode(pcmData),"","","cn")) }) .then(() => { console.log('Audio processor started successfully.'); }) .catch((error) => { console.error('Failed to start audio processor:', error); }); // 连接 WebSocket wsUtil.onOpen(() => { console.log("✅ WebSocket 连接成功"); /*mic.startRecording((pcmData) =>{ console.log("📤 发送音频数据..."); console.log(pcmData) })*/ }); wsUtil.onMessage((event) =>{}); wsUtil.onError((event) => console.error("❌ WebSocket 错误:", event)); wsUtil.onClose(() => console.log("🔴 WebSocket 连接已关闭")); wsUtil.connect(); } // 启动录音流媒体传输 startMicrophoneStreaming();