Uniapp移动端要进行websoket语音转文字,但是用AudioContext会报错Cannot read property 'AudioContext' of undefined",是不是Uniapp不能使用AudioContext函数,不能的话=怎么把Uniapp的录音实时转化为Blob类型发送呢?急求!
![](https://profile-avatar.csdnimg.cn/83acfad79c8c49ec8a5ead5d3c3a0ab8_justinst.jpg!4)
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 方法则停止录音,并结束语音数据的处理。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 grbl为何无法移动到比复位坐标更小的坐标?
- ¥60 怎样隐藏win7系统进程?
- ¥15 CBF预处理数据归一化的时候报错了如下图
- ¥15 qt 转 msvc 后 Opencv 始终打不开视频!
- ¥15 yolo v5中labelimg的作用
- ¥15 国赛c题2021,没有理解这一串代码的意思,这样报错该怎么解决(语言-matlab)
- ¥15 一、执行完中断程序后如何继续运行,二、中断结束后如何跳过中断触发前的点位(LOW点不要继续运行,可以运行UP点)(关键词-程序运行)
- ¥15 if为什么跳过if 直接执行else 中文
- ¥200 解决登录微信老版本限制封号问题
- ¥15 mysql中时间处理问题