RomanDillerNsk
@RomanDillerNsk
JavaScript

Как из audioBuffer сделать mp3?

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

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

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

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

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

Начав разбираться в этой теме, я спокойно получаю буффер файла:
const reader = new FileReader();

    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.

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

Почему-то не могу найти никаких либ для таких манипуляций. если кто-то даст разумный совет или покажет куда смотреть, буду очень благодарен. Заранее спасибо.
  • Вопрос задан
  • 363 просмотра
Пригласить эксперта
Ответы на вопрос 1
kellas
@kellas
веб-разработчик
Примерно вот так https://stackoverflow.com/questions/61264581/how-t...
По сути это копия кода из либы lamejs

Пример который вам нравится, отправляет файл на сервер
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы