I have a WAV file in Blob and in order to convert it to MP3 I need to convert it to Int16Array first (to follow the example from here: https://github.com/zhuker/lamejs).
E.g.
var mp3encoder = new lamejs.Mp3Encoder(2, 44100, 128);
// instead of `var samples = new Int16Array(44100);` I want something like `var samples = new Int16Array(blob);`
var mp3Tmp = mp3encoder.encodeBuffer(samples);
Is this possible?
Provided you know the data is actually a blob of 16-bit int
s, then yes, it's possible:
Read the Blob
into an ArrayBuffer
via its arrayBuffer
method (the original answer had to use FileReader
, but now Blob
has an arrayBuffer
method; see the edit history if for some reason you have to support old environments without it):
samples.arrayBuffer()
.then(buffer => {
// ...
})
.catch(error => {
// ...handle/report error...
});
View the ArrayBuffer
as an Int16Array
via the Int16Array
constructor:
const data = new Int16Array(buffer);
Now data
is the array buffer from the blob viewed as an Int16Array
.
Something along these lines:
samples.arrayBuffer()
.then(buffer => {
const data = new Int16Array(buffer);
// ...use `data` here...
})
.catch(error => {
// ...handle/report error...
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With