Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.08.2021, 16:04
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

Как из audioBuffer сделать mp3?
Доброго времени суток, прошу прощения, но данная тема меня ставит в тупик уже второй день, имхо никогда не касался web audio api и спать уже перестал. Может найдутся сдесь люди, которые помогут решить проблему.

Вобщем суть следующая:

Пишу приложение на react. все ок. до того момента, пока мне не стало надо, загружать аудио файлы. они беруться из разных мест и в разном формате. Это может быть wave, wav. mp3, acc и так далее, в общем все, у чего есть mime type - audio/*. С загрузкой проблем нет. input file, form data и все ок. НО!!!!!!!

Для того, что бы не расходовать трафик и не грузить сервер излишними данными, нужно на стороне клиента сжимать ( конвертировать/перекодировать ) файл в формат mp3 и сжать его до определенного размера.

Пример, который мне нравиться (админы это не реклама, а пример): вот тут.

Начав разбираться в этой теме, я спокойно получаю буффер файла:

const reader = new FileReader();lve(resultBuffer);

    reader.readAsArrayBuffer(input.files[0]);

    reader.addEventListener('load', ({ target }) => {
        if (!target.result) {
            return;
        }

        this.audioCtx.decodeAudioData(buffer)
            .then(audioBuffer => {

            // собсна audioBuffer это и есть нужный буффер
        });

    }, false);


После получения буффера, нужно как то конвертировать/перекодировать этот буффер в mp3, вот с такими параметрами:

Код:
     ffmpeg -i sound.mp3 -ar 32000 -ac 2 -b:a 64K -f mp3 result.mp3
Это пример запуска ffmpeg на сервере, он все делает правильно, но на сервере. В примере выше, можно увидеть, что все выполняется в браузере. Задача стоит ровно такая же, т.е. взять буффер, его преобразовать и отправить его на сервер с form data.

С отправкой проблемы нет. А вот как конвертировать его?

Почему-то не могу найти никаких либ для таких манипуляций. если кто-то даст разумный совет или покажет куда смотреть, буду очень благодарен. Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 20.08.2021, 12:21
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

https://stackoverflow.com/questions/...-in-javascript
Ответить с цитированием
  #3 (permalink)  
Старый 20.08.2021, 16:17
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

SuperZen, lamejs конверирует только из wav. если переводить буфер в формат wav а потом конвертировать в mp3 браузер тухнет на несколько 10-15 секунд. Спасибо за ссылку. но не помогло. пытаюсь найти способ все таки конвертировать буфер в мп3.
Ответить с цитированием
  #4 (permalink)  
Старый 20.08.2021, 17:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,576

То что он тухнет - это нормально, кодирование - тяжёлый процесс, который занимает время, а javascript - однопоточен.
Решение: вынести кодирование в web-worker или посмотреть не предлагает ли библиотека асинхронного варианта.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы меню в зависимости от разрешения экрана выполняло свои функции? miha2020 Мобильный JavaScript 2 05.06.2022 09:02
Как сделать что бы запускался mp3 несколько раз Dapy Общие вопросы Javascript 0 01.03.2021 12:31
Как сделать сделать смену картинки по щелчку мыши? PavelGR Javascript под браузер 0 09.08.2020 09:28
Как сделать калькулятор и с чего начать? A.P. Yellowman Общие вопросы Javascript 3 15.11.2013 21:32
Вопрос как сделать эту панельку Определённых размеров и свойств. jei jQuery 3 09.06.2009 19:14