Uniapp移动端要进行websoket语音转文字,但是用AudioContext会报错Cannot read property 'AudioContext' of undefined",是不是Uniapp不能使用AudioContext函数,不能的话=怎么把Uniapp的录音实时转化为Blob类型发送呢?急求!
Uniapp移动端要进行websoket语音转文字,但是用AudioContext会报错Cannot read property 'AudioContext' of undefined"
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
CodeBytes 2023-02-20 19:26关注该回答引用ChatGPT
Uniapp 支持使用 AudioContext 函数,但需要注意几点:
需要在页面的 script 标签中导入 webAudio.js ,然后在方法中调用。
需要在 manifest.json 文件中声明需要使用录音权限:
{ "app-plus": { "permissions": { "record": { "desc": "用于录制音频" } } } }对于将录音实时转换为 Blob 类型发送的问题,可以将录音数据进行分段处理,每一段处理后合并成一个 Blob 对象,然后发送给后端进行语音转文字处理。具体实现可参考以下代码:
function startRecord() { uni.getRecorderManager().start({ format: 'mp3', sampleRate: 16000, numberOfChannels: 1, encodeBitRate: 16000, frameSize: 2048 }) this.recording = true // 开始录音时初始化录音数据和 AudioContext 对象 this.recorderData = [] this.audioContext = new (window.AudioContext || window.webkitAudioContext)() // 获取麦克风输入流 navigator.mediaDevices.getUserMedia({ audio: true }).then(stream => { this.audioInput = this.audioContext.createMediaStreamSource(stream) this.recorder = this.audioContext.createScriptProcessor(2048, 1, 1) // 处理录音数据并合并为 Blob 对象 this.recorder.onaudioprocess = e => { if (!this.recording) return const buffer = e.inputBuffer.getChannelData(0) this.recorderData.push(new Float32Array(buffer)) if (this.recorderData.length === 10) { const audioBlob = new Blob(this.recorderData, { type: 'audio/mp3' }) this.recorderData = [] // 发送语音数据到后端进行语音转文字处理 this.sendAudioData(audioBlob) } } // 连接 AudioContext 对象 this.audioInput.connect(this.recorder) this.recorder.connect(this.audioContext.destination) }) } function stopRecord() { this.recording = false uni.getRecorderManager().stop() }以上代码中,startRecord 方法在开始录音时初始化录音数据和 AudioContext 对象,然后获取麦克风输入流,并将录音数据分段处理后合并成 Blob 对象发送给后端。stopRecord 方法则停止录音,并结束语音数据的处理。
解决 无用评论 打赏 举报