Javascript 电子保存的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

我可以把我的声音录成一个水滴,我可以用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 += '<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”文件将写入磁盘,但不会播放!我认为这是编码问题。。。我怎样才能解决这个问题