如何解决从javascript录制和上传音频
我正在尝试录制并从javascript上传音频。我可以从Blob
成功录制音频MediaRecorder
。我的理解是,在将多个块记录到Blob中之后,我会将它们串联为new Blob(audioBlobs)
并上传。不幸的是,服务器端的结果或多或少变得乱七八糟。我当前正在运行localhost连接,因此转换为未压缩的WAV并不是问题(可能稍后再发布,但这是一个单独的问题)。这是我到目前为止所拥有的
navigator.mediaDevices.getUserMedia({audio: true,video: false})
.then(stream => {
const mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start(1000);
const audioChunks = [];
mediaRecorder.addEventListener("dataavailable",event => {
audioChunks.push(event.data);
});
function sendData () {
const audioBlob = new Blob(audioChunks);
session.call('my.app.method',[XXXXXX see below XXXXXX])
}
})
这里的session
对象是到Python服务器的autobahn.js
Websockets连接(使用soundfile
。我在由XXXXX
标记的位置尝试了许多参数在代码中。
- 只需传递
audioBlob
。在这种情况下,python端只会收到一个空字典。 - 在这种情况下,通过
audioBlob.text()
,我得到的东西看上去有些二进制(以OggS开头),但是无法解码。 - 通过
audioBlob.arrayBuffer()
。在这种情况下,Python端会收到一个空字典。
一个可能的解决方案是在服务器端将数据转换为WAV(仅更改blob上的mime类型不起作用)或找到一种方法来解释服务器端的.text()
输出
解决方法
解决方案是使用recorder.js,然后在其中使用getBuffer
方法将波浪数据作为Float32Array
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。