如何解决Electron 保存的 mp3 无法播放
我可以将我的声音录制到一个 blob 中,我可以使用电子将它以 wav 格式保存到磁盘。
但由于 wav 文件很大,我想保存 mp3 文件,所以到目前为止我有这个:
const Buffer = require('Buffer');
const fs = require('fs');
const lamejs = require("lamejs");
let blob
let audioChunks = [];
let rec;
document.head.innerHTML += '<audio id="recordedAudio" crossorigin="anonymous"></audio>';
let recordedAudio = document.getElementById('recordedAudio');
navigator.mediaDevices.getUserMedia({audio:true}).then(stream => {
rec = new MediaRecorder(stream);
rec.ondataavailable = e => {
if(rec.state == "inactive") {
audioChunks.push(e.data);
blob = new Blob(audioChunks,{type:'audio/mpeg-3'});
recordedAudio.src = URL.createObjectURL(blob);
}
}
}).catch(e=>console.log(e));
setTimeout(() => {
console.log('start record');
rec.start();
},2000);
setTimeout(() => {
console.log('stop record');
rec.stop();
setTimeout(() => {
encodeMono();
},2500)
},8000);
function encodeMono() {
channels = 1; //1 for mono or 2 for stereo
sampleRate = 44100; //44.1khz (normal mp3 samplerate)
kbps = 128; //encode 128kbps mp3
mp3encoder = new lamejs.Mp3Encoder(channels,sampleRate,kbps);
var mp3Data = [];
samples = new Int16Array(blob); // (get your data from the source you have)
sampleBlockSize = 1152; //can be anything but make it a multiple of 576 to make encoders life easier
var mp3Data = [];
for (var i = 0; i < samples.length; i += sampleBlockSize) {
sampleChunk = samples.subarray(i,i + sampleBlockSize);
var mp3buf = mp3encoder.encodeBuffer(sampleChunk);
if (mp3buf.length > 0) {
mp3Data.push(mp3buf);
}
}
var mp3buf = mp3encoder.flush(); //finish writing mp3
if (mp3buf.length > 0) {
mp3Data.push(new Int8Array(mp3buf));
}
const mp3blob = new Blob(mp3Data,{type: 'audio/mp3'});
saveFile();
async function saveFile() {
const buffer = Buffer.from( await mp3blob.arrayBuffer() );
fs.writeFile('./sources/audio.mp3',buffer,() => {
console.log('audio is saved!');
});
}
}
'./sources/audio.mp3' 文件将被写入磁盘但无法播放!我认为这是编码问题...我该如何解决这个问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。