2013-07-03 1 views
28

Я записываю аудио с getUserMedia({audio:true}); в браузере, используя Recorder.js, а затем экспортирую его как WAV-файл, потому что это единственный вариант, который предоставляет библиотека.Преобразование WAV в любой сжатый аудиоформат на стороне клиента JavaScript

1 мин. 20-секундный файл имеет размер 14.1 МБ. Мне нужно загрузить аудио на сервер, и мне нужно сделать это быстро. Как преобразовать WAV-аудио в любой другой сжатый формат, чтобы уменьшить размер файла?

Я не против того, чтобы преобразовать:

  • MP3
  • Opus
  • WebM
  • Ogg
  • FLAC
  • любого другого формата, вы знаете

Если нет ва y на данный момент для преобразования в любой из этих форматов, как я могу сжать WAV-файл на клиенте?

PS: Я сделал много поисков, чтобы найти что-нибудь, что преобразует WAV в JS, но ничего не нашел. libmp3lame.js не работает в Chrome.

Спасибо!

+0

У меня есть аналогичный пост на http://stackoverflow.com/questions/17507799/convert-wav-to-ogg-on-app-engine-or-in- javascript - У меня проблема по существу такая же, и я действительно надеюсь, что кто-то ответит на ваш вопрос. – Adrian

+0

Вчера я видел ваш вопрос. Для меня размер файла слишком велик, поэтому загрузка его на сервер и преобразование его там не является жизнеспособным вариантом. Для вашего случая, если вы хотите загрузить и преобразовать, использование виртуальной машины - лучший вариант. –

ответ

27

Я ве сделал аудио-рекордер, который записывает в mp3 прямо из браузера, сочетающей RecorderJS и libmp3lame.js

Вы можете найти проект GitHub здесь: https://github.com/nusofthq/Recordmp3js

и более подробное объяснение реализации: http://nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/

+0

СПАСИБО, СПАСИБО, СПАСИБО. Хотелось бы, чтобы я мог увеличить это 1000 раз. – Knights

+1

+1 Я перешел к использованию 'libmp3lame.js' тоже. – CodingIntrigue

+1

@Remus Negrota, Это работает на Chrome, но висит на Firefox. Мои исследования показали, что что-то идет бесконечным циклом в ** libmp3lame.min.js ** в Firefox. Вы используете модифицированную версию libmp3lame.min.js? – Dewsworld

4

Что вы действительно хотите, это медиа-поток «Recording API», который в настоящее время работает. Пока это не доступно, я советую использовать emscriptem на источнике C/C++ и подумать о том, чтобы запустить его в веб-обозревателе, чтобы избежать блокировки пользовательского интерфейса и других вкладок.

3

Я столкнулся с той же проблемой и придумали довольно быстро и грязного раствора:

  • заархивировать Wav-файл с zip.js (работает с Chrome, Firefox, Safari 6 и Интернет Проводник 10)

Далее Intel см Documentation zip.js

По крайней мере, это уменьшает размер много, файл около> 75% меньше, так 1: 4 сжатия

UPDATE: Может быть, посмотрите на это: https://webrtc.github.io/samples/

Это чат приложений для Chrome и Firefox, разработанный Google, я предполагаю, что с виду CC-лицензии

+0

Спасибо! Я попробую! :) –

2

У меня была аналогичная проблема (также с использованием recorder.js) и удалось решить, используя превосходный проект videoconverter.js, который включает в себя порт ffmpeg для Javascript с использованием emscripen. Недостатком этого является файл ffmpeg.js около 25 Мб.

Я изменил существующую функцию exportWAV в рекордере.JS вернуться как в WAV (для HTML5 <audio> воспроизведения) и Blob, содержащий закодированную MP2 файл:

function encodeWAV(samples) { 

    var buffer = new ArrayBuffer(44 + samples.length * 2); 
    var view = new DataView(buffer); 

    /* ... various writing methods */ 

    return { wavdata: new Blob([buffer], { type: "audio/wav" }), mp2data: ffmpeg_convert(buffer) }; 
} 

function ffmpeg_convert(buffer) { 
    console.log("starting mp2 conversion"); 
    var args = "-i input -f mp2 output.mp2"; 
    var results = ffmpeg_run({ 
     arguments: args.split(" "), 
     files: [ 
      { 
       data: new Uint8Array(buffer), 
       "name": "input" 
      } 
     ] 
    }); 
    if (results) { 
     var file = results[0]; 
     console.log("File recieved", file.name, file.data); 
     return new Blob([file.data], { type: "audio/mpeg" }); 
    } 
    return null; 
} 

Этот метод может быть использован для кодирования WAV в любой кодек suppored по FFmpeg, libavcodec

1

я смог достичь сжатия с использованием opus.js,

вы можете найти свою реализацию здесь: recordOpus, но есть подвох, шахта соединяется с Сервер- сторона, и я использую сервер node.js ....

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

  • Нет связанных вопросов^_^