2013-06-02 7 views
15

Я спрашиваю, потому что я не мог найти ответ нигде. Я успешно применил RecorderJS, чтобы записать вход микрофона в JS. Тем не менее, записанный файл WAV, который приводит к большим файлам. Я ищу способ записи с помощью JS непосредственно в MP3 или кодирование бит каким-то образом в MP3 вместо WAV.Web Audio API - запись в MP3?

Как это сделать? Есть ли функция веб-аудио API, которая может это сделать или JS MP3-кодировщик какой-то?

+0

Я знаю только об обратном декодировании, что означает переход от MP3 к WAV - https://github.com/audiocogs/mp3.js. Вам, вероятно, придется копать в https://github.com/kripken/emscripten, чтобы получить wav-mp3-кодер в JS. – Stasik

+0

Спасибо, я изучаю Emscripten, но я до сих пор не вижу, как это может помочь. – Light

+0

Ну, вам нужно получить C-Written wav-mp3-декодер, а не расшифровать wav в mp3 в браузере :) – Stasik

ответ

10

Единственный Javascript MP3-кодировщик, который я видел, это https://github.com/akrennmair/libmp3lame-js, который является портом, использующим emscripten. Он должен быть медленным, и я никогда не использовал его.

Я не знаю ни одного изначально написанных Javascript MP3-кодеров, а кодировка не распространяется на API веб-аудио.

1

Кодирование в меньшие форматы в настоящее время поддерживается только Firefox:

Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit) Not supported 25.0 (25.0) Not supported Not supported Not supported

AFAIK поддерживается только OGG. Но лучше OGG, чем WAV.

1

Запись mp3 с помощью JavaScript без каких-либо других рамок с помощью веб-работника, вы можете использовать этот проект: https://github.com/nusofthq/Recordmp3js, который также очень хорошо объяснено здесь:

https://nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/

С этим, это также можно написать в файл .mp3 и сделать его загружаемым.

5

Существует библиотека, написанная в чистом javascript, называемом lamejs. Чтобы кодировать mp3 из необработанного звука. Это намного быстрее, чем emscripten компиляции libmp3lame.https://github.com/zhuker/lamejs

Пример использования:

lib = new lamejs(); 
mp3encoder = new lib.Mp3Encoder(1, 44100, 128); //mono 44.1khz encode to 128kbps 
samples = new Int16Array(44100); //one second of silence 
var mp3 = mp3encoder.encodeBuffer(samples); //encode mp3 
+0

lamejs хорошо работал для меня. Кажется, что нет проблем с поддержанием реального времени, устраняя необходимость в рабочих потоках. Я создал тестовую страницу на [моем сайте] (https://aws.nlited.org/mp3.htm) с подробным объяснением. – TeasingDart

2

Я был расстроен с этой проблемой, и существующие решения, так что я придумал что-нибудь попроще:

https://github.com/sb2702/audioRecord.js

Использование

Создайте объект рекордера (async, потому что для него требуется разрешение пользователя п)

Recorder.new(function(recorder){ 

    }); 

Начало записи

  recorder.start();   

Останавливает запись

  recorder.stop();  

Экспорт в mp3

  recorder.exportMP3(function(mp3Blob){ 

      console.log("Here is your blob: " + URL.createObjectURL(mp3Blob)); 

      }); 

В основном основаны на RecorderJS, но изменил некоторые вещи вокруг, чтобы экспортировать mp3-файлов и до n ВЗ должны слоняться вокруг с AudioContext/navigator.getUs

2

Я нашел хорошую библиотеку с живыми демок: MediaStreamRecorder

Один из демоса здесь: Audio Recording

RecordRTC также может быть полезным, но MSR его кажется, легче начать.

Смежные вопросы