我正在尝试捕获用户上载的音频,将其转换为Blob,然后使用Wavesurfer.js显示波形。
我在这里https://bl.ocks.org/nolanlawson/62e747cea7af01542479
遵循此说明这是代码
// Convert audio to Blob
$('#audioFileInput').on('change', function () {
var file = $('#audioFileInput')[0].files[0];
var fileName = file.name;
var fileType = file.type;
var fileReader = new FileReader();
fileReader.onloadend = function (e) {
var arrayBuffer = e.target.result;
blobUtil.arrayBufferToBlob(arrayBuffer, fileType).then(function (blob) {
console.log('here is a blob', blob);
console.log('its size is', blob.size);
console.log('its type is', blob.type);
surfTheBlob(blob);
}).catch(console.log.bind(console));
};
fileReader.readAsArrayBuffer(file);
});
但是它说
blobUtil.arrayBufferToBlob(...).then is not a function
另一个问题是,由于用户可能自己上载了音频,因此音频类型可能会有所不同,预期来自本地设备的音频记录器。有人可以帮忙吗?谢谢。
答案 0 :(得分:0)
已经找到答案了。
// Convert audio to Blob
$('#audioFileInput').on('change', function () {
var file = $('#audioFileInput')[0].files[0];
var fileName = file.name;
var fileType = file.type;
var url = URL.createObjectURL(file);
fetch(url).then(function(response) {
if(response.ok) {
return response.blob();
}
throw new Error('Network response was not ok.');
}).then(function(blob) {
surfTheBlob(blob);
}).catch(function(error) {
console.log('There has been a problem with your fetch operation: ', error.message);
});
});
干杯!
答案 1 :(得分:0)
File
对象,就像您在input.files
FileList中获得的对象一样,已经是Blob:
inp.onchange = e =>
console.log(inp.files[0] instanceof Blob) // true
<input type="file" id="inp">
因此,您真正需要的就是直接将此文件传递给您的库:
$('#audioFileInput').on('change', function () {
var file = this.files[0];
surfTheBlob(file);
});