Blob to MP3
nal-ws-001 opened this issue · 1 comments
nal-ws-001 commented
Can i change blob to mp3?
Spodnet commented
FileReader can do this, I do it to convert a blob mono wav to mp3
var audioBuffer;
var fileReader = new FileReader();
fileReader.onload = function(event) {
audioBuffer = event.target.result;
var wav = lamejs.WavHeader.readHeader(new DataView(audioBuffer));
var samples = new Int16Array(audioBuffer, wav.dataOffset, wav.dataLen / 2);
var channels = wav.channels;
var sampleRate = wav.sampleRate;
var kbps = 128;
var mp3encoder = new lamejs.Mp3Encoder(channels, sampleRate, kbps);
sampleBlockSize = 1152;
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);
}
}
// see if there's any data left
var mp3buf = mp3encoder.flush();
if (mp3buf.length > 0) {
mp3Data.push(mp3buf);
}
// blob now contains an mp3 file
var blob = new Blob(mp3Data, {type: 'audio/mp3'});
};
// take the blob from audioTrack
fileReader.readAsArrayBuffer(audioTrack.blob);
There is also blob.arrayBuffer but it's not fully supported:
https://developer.mozilla.org/en-US/docs/Web/API/Blob/arrayBuffer
This would give you the audioBuffer without using FileReader.