javascript - 使用lamejs将blob编码为mp3
问题描述
我使用一个简单的脚本从麦克风录制音频,此代码为演示目的而简化。
navigator.mediaDevices.getUserMedia({audio: true}).then(function(stream) {
const mediaRecorder = new window.MediaRecorder(stream);
mediaRecorder.ondataavailable = function(e) {
const chunk = e.data;
const fileReader = new FileReader();
fileReader.onload = function (event) {
const mp3Data = [];
const mp3encoder = new lamejs.Mp3Encoder(1, 44100, 128);
const samples = new Int16Array(event.target.result); // <- Some times this arrayBuffer contains Int16Array sometimes it doesn't
var mp3Tmp = mp3encoder.encodeBuffer(samples);
mp3Data.push(mp3Tmp);
mp3Tmp = mp3encoder.flush();
mp3Data.push(mp3Tmp);
const blob = new Blob(mp3Data, {type: 'audio/mp3'});
const file = new File([blob], 'audio-recording.mp3', {type: 'audio/mp3'});
}
}
});
如果 arrayBuffer 包含 Int16Array 它的长度很小,这看起来很奇怪。所以我有点猜测那部分工作不正常。
当我下载 blob 时它太短而且只有噪音。
我一直试图让这个片段整天工作,但没有成功。
任何帮助表示赞赏,
解决方案
推荐阅读
- c# - 数据网格视图的滚动条可见但在 C# 中不起作用
- javascript - 如何从数据属性执行功能
- spring - 具有自定义响应标头的反应式文件控制器
- template-literals - 模板文字在 atom.io 中不起作用
- django-views - 将 html 参数传递给我的视图,然后在我的 object.get() 中使用它
- google-chrome - 为什么在 Azure CDN 的 https 下提供 mp3 文件时会跳过,但在 Chrome 中从 http 提供时却不会?
- powerbi - 在 PowerBI 中将持续时间从天转换为时间
- javascript - 想用昨天日期的过去日期更新日期列中的日期
- android - 无法使用 android 中的 facebook 登录将 facebook 电子邮件的值发送到服务器
- internet-explorer - 当我们尝试使用 wix 构建 .msi 时如何省略组件