feat: 完成大部分功能开发
This commit is contained in:
@@ -11,8 +11,8 @@ export const useAsrStore = defineStore("asr", () => {
|
||||
let mediaStreamSource: MediaStreamAudioSourceNode | null = null;
|
||||
let workletNode: AudioWorkletNode | null = null;
|
||||
|
||||
// 获取 WebSocket store 实例
|
||||
const webSocketStore = useWebSocketStore();
|
||||
const router = useRouter();
|
||||
|
||||
/**
|
||||
* 发送消息到 WebSocket
|
||||
@@ -81,16 +81,19 @@ export const useAsrStore = defineStore("asr", () => {
|
||||
const processorUrl = URL.createObjectURL(blob);
|
||||
// 加载AudioWorklet模块
|
||||
await audioContext.audioWorklet.addModule(processorUrl);
|
||||
// 释放URL对象(防止内存泄漏)
|
||||
// 释放URL对象防止内存泄漏
|
||||
URL.revokeObjectURL(processorUrl);
|
||||
|
||||
// 创建音频源节点
|
||||
mediaStreamSource = audioContext.createMediaStreamSource(stream);
|
||||
|
||||
// 创建AudioWorkletNode
|
||||
workletNode = new AudioWorkletNode(audioContext, "audio-processor", {
|
||||
numberOfInputs: 1,
|
||||
numberOfOutputs: 1,
|
||||
channelCount: 1
|
||||
});
|
||||
|
||||
// 监听来自AudioWorklet的音频数据
|
||||
workletNode.port.onmessage = (event) => {
|
||||
if (event.data.type === "audiodata") {
|
||||
@@ -116,8 +119,14 @@ export const useAsrStore = defineStore("asr", () => {
|
||||
const stopRecording = () => {
|
||||
if (!isRecording.value) return;
|
||||
|
||||
const messageId = `voice_${Date.now()}`;
|
||||
// 通知后端录音结束
|
||||
sendMessage(JSON.stringify({ type: "asr_end" }));
|
||||
const msg: Record<string, any> = { type: "asr_end" };
|
||||
if (router.currentRoute.value.path === "/voice") {
|
||||
msg.messageId = messageId;
|
||||
msg.voiceConversation = true;
|
||||
}
|
||||
sendMessage(JSON.stringify(msg));
|
||||
|
||||
// 停止所有音轨
|
||||
if (mediaStreamSource?.mediaStream) {
|
||||
|
||||
Reference in New Issue
Block a user