speech-to-text - 缺少 getUserMedia MediaRecorder 数据
问题描述
我正在尝试在我的 Angular 项目中录制音频。为此,我正在使用 MediaStream Recording API ( https://developer.mozilla.org/en-US/docs/Web/API/MediaStream_Recording_API )。
它确实记录了我的音频输入,我可以根据我提供的类型下载音频文件。为此,我正在使用这段代码。
navigator.mediaDevices.getUserMedia({audio: true, video: false})
.then(stream => {
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
mediaRecorder.ondataavailable = event => {
audioChunks.push(event.data);
this.translate(audioChunks);
};
this.stopRecording = setTimeout(async() => {
await mediaRecorder.stop();
}, 5000);
});
blob = new Blob(audio, { 'type' : 'audio/x-flac; rate=44100; codecs=opus' });
url = window.URL.createObjectURL(blob);
之后,我将数据作为 byteArray 发送到我的 REST API 并使用(https://www.google.com/speech-api/v2/recognize?)将其发送到 Google Speech API v2
现在这在我自己创建音频文件时有效,但是当我使用 MediaRecorder 时,我得到的响应是空的。现在我检查了音频文件的属性,发现缺少一些属性(音频长度和比特率)。除了属性之外,我确实听到了这些文件的音频。
有什么方法可以添加这些属性,还是有更好的 API 可以用于此?
解决方案
处理类似的案例,并从语音 API 获得相同的空响应
你能验证你在你创建的 blob 对象中有什么东西吗?我使用onstop
来创建 blob,然后将其转换为 base64 并传递给请求。(拆分并省略作为标题的第一部分)
mediaRecorder.onstop = (e) => {
const blob = chunks[0];//new Blob(chunks, { 'type': 'audio/webm;codec=opus' });
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = () => {
const base64data = reader.result;
console.info('sending request to gcloud');
expect(base64data).to.exist;
gCloudRequest(base64data.split(',')[1])
推荐阅读
- wordpress - 为什么小计/运费/总计显示两次?
- python - 如何在 python 模块中安装目录?
- c# - 使用 AutoFac 解决 IRepository 的依赖关系
- python - 如何从收集的数据集中删除转推
- c - pthread_join 是否释放终止线程持有的堆?
- c# - 用于计算时区公司处理 DST 的位置和日期时间策略
- java - Datastax Java 驱动程序 4.6.1 无法使用 application.conf 覆盖配置
- r - 如果一组不同的列匹配,则用另一列填充一列中的空白
- javascript - React 没有双向绑定,那么为什么用户更改不会对不受控制的输入的 `value` 属性进行更改
- arrays - 多维数组的排序和显示值