Javascript 电子保存的mp3不播放
我可以把我的声音录成一个水滴,我可以用electron把它保存成wav格式的磁盘 但是由于wav文件的大小很大,我想保存mp3文件,所以我到目前为止有以下内容:Javascript 电子保存的mp3不播放,javascript,electron,lamejs,Javascript,Electron,Lamejs,我可以把我的声音录成一个水滴,我可以用electron把它保存成wav格式的磁盘 但是由于wav文件的大小很大,我想保存mp3文件,所以我到目前为止有以下内容: const Buffer = require('Buffer'); const fs = require('fs'); const lamejs = require("lamejs"); let blob let audioChunks = []; let rec; document.head.innerHTML
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!');
});
}
}
const Buffer=require('Buffer');
常数fs=要求('fs');
const lamejs=要求(“lamejs”);
让水滴
设audiochunk=[];
让rec;
document.head.innerHTML+='';
让recordedAudio=document.getElementById('recordedAudio');
navigator.mediaDevices.getUserMedia({audio:true})。然后(流=>{
rec=新媒体记录器(流);
rec.ondataavailable=e=>{
如果(记录状态==“非活动”){
音频块。推送(如数据);
blob=新blob(audiochunk,{type:'audio/mpeg-3'});
recordedAudio.src=URL.createObjectURL(blob);
}
}
}).catch(e=>console.log(e));
设置超时(()=>{
console.log('start record');
rec.start();
}, 2000);
设置超时(()=>{
console.log(“停止记录”);
建议停止();
设置超时(()=>{
encodeMono();
}, 2500)
}, 8000);
函数encodeMono(){
通道=1;//单声道为1,立体声为2
sampleRate=44100;//44.1khz(正常mp3 sampleRate)
kbps=128;//编码128kbps mp3
mp3encoder=新的lamejs.mp3encoder(通道、采样器、kbps);
var mp3Data=[];
samples=new Int16Array(blob);//(从现有源获取数据)
sampleBlockSize=1152;//可以是任意值,但要使编码器更容易使用,请将其设置为576的倍数
var mp3Data=[];
对于(变量i=0;i0){
mp3Data.push(mp3buf);
}
}
var mp3buf=mp3encoder.flush();//完成写入mp3
如果(mp3buf.length>0){
mp3Data.push(新的Int8Array(mp3buf));
}
const mp3blob=新Blob(mp3Data,{type:'audio/mp3'});
saveFile();
异步函数saveFile(){
const buffer=buffer.from(等待mp3blob.arrayBuffer());
fs.writeFile('./sources/audio.mp3',buffer,()=>{
log('音频已保存!');
});
}
}
“/sources/audio.mp3”文件将写入磁盘,但不会播放!我认为这是编码问题。。。我怎样才能解决这个问题