微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Electron 保存的 mp3 无法播放

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?