Запись звука с помощью lamejs.js
Есть такая библиотека https://github.com/zhuker/lamejs
Следуя примерам из репозитория я переписал код example.html (и почему он там был не полным?) В итоге выходит, что в mp3Data не совсем то, что нужно, а при преобразовании в Uint8Array вообще остаются только нули liblame = new lamejs(); var mp3Data = []; function encodeMono(channels, sampleRate, samples) { mp3enc = new liblame.Mp3Encoder(channels, sampleRate, 128); var remaining = samples.length; var maxSamples = 1152; for (var i = 0; remaining >= maxSamples; i += maxSamples) { var mono = samples.subarray(i, i + maxSamples); var mp3buf = mp3enc.encodeBuffer(mono); if (mp3buf.length > 0) { mp3Data.push(mp3buf); } remaining -= maxSamples; } var mp3buf = mp3enc.flush(); //finish writing mp3 if (mp3buf.length > 0) { mp3Data.push(mp3buf); } // ====== Тестируем ============================== console.log("mp3Data ", mp3Data); console.log("new Uint8Array(mp3Data) ", new Uint8Array(mp3Data)); var mp3Blob = new Blob([Uint8Array(mp3Data)], { // Не уверен, что правильно преобразовываю в blob type : 'audio/mp3' }); console.log("mp3Blob ", mp3Blob); // =============================================== console.log('done encoding'); } var wavFile = "testdata/Left44100.wav"; var request = new XMLHttpRequest(); request.open("GET", wavFile, true); request.responseType = "arraybuffer"; // Our asynchronous callback request.onload = function () { audioData = request.response; wav = liblame.WavHeader.readHeader(new DataView(audioData)); samples = new Uint16Array(audioData, wav.dataOffset, wav.dataLen / 2); encodeMono(wav.channels, wav.sampleRate, samples); }; request.send(); |
блин, кто способен 16 тысч строк кода писать (я про библиотеку) ?
|
Тут все-таки адаптация, судя по словам автора
Да и у libmp3lame.js вообще 78 тысяч строк, так что бывает и по жестче |
Часовой пояс GMT +3, время: 08:20. |