Могу ли я использовать Javascript для разделения MP3-файлов на более мелкие MP3-файлы? - PullRequest
8 голосов
/ 24 декабря 2011

Я делаю игру, используя только HTML5 и Javascript. Я хочу взять MP3-файл, выбранный пользователем, и разбить его на несколько секунд. Возможно ли это сделать в Javascript, и если да, то как?

1 Ответ

10 голосов
/ 28 декабря 2011

Если вам нужно решение на стороне клиента, но вы не связаны с Javascript, вы можете попробовать Flash. Существует множество отличных решений для редактирования во Flex / Actionscript. Вот один урок, с которым я столкнулся после быстрого поиска в Google: http://scriptplayground.com/tutorials/as/Play-Sound-Samples-From-One-File-Using-ActionScript-3/

Однако, если вы не используете Javascript, попробуйте выполнить следующие действия:

  1. Проверьте эту скрипку: http://jsfiddle.net/andrewodri/PKPD6/. Он использует аудиоэлемент HTML5 для воспроизведения звука, но интересно то, что эти данные кодируются как URI данных. Какие бы закодированные данные мы ни выбросили у источника, он сможет воспроизводиться.

  2. Ознакомьтесь со спецификацией W3C File API и особенно с интерфейсом FileReader . Это поддержка, по крайней мере, в Chrome и Firefox , хотя я не слишком уверен, насколько он исчерпывающий. Вы заметите, что вы можете считывать двоичные данные в URI данных , который вы можете 1) манипулировать в виде строки и 2) отправлять атрибуту src элемента audio.

  3. Это будет самая сложная часть ... Вы можете начать с ознакомления со структурой файла MP3; то есть. понимание размера тега ID3 и того, как его идентифицировать, насколько большие кадры и где их можно отрубить, и как файл закрывается . Это поможет вам извлечь соответствующую информацию, а также выяснить, где вы можете начать рубить. Я положил некоторые ссылки внизу. Для этого в ActionScript было создано много аналогичного кода, который может быть хорошим справочным материалом.

Если у вас достаточно терпения, вы можете сделать следующее:

  1. Получить двоичные данные загруженного файла и преобразовать их в URI данных
  2. Определите, насколько велик тег ID3 при кодировании в base64 (base64 представляет 6 битов с 1 символом), и сохраните этот код в переменной
  3. Определите размер каждого аудиокадра и создайте массив всех аудиокадров
  4. Определите, как файл закрыт, и сохраните этот код в переменной
  5. Сшивайте все вместе, как хотите, с ID3 спереди, выбранными кадрами посередине и кодом закрытия файла
  6. Отправьте его в атрибут src аудиоэлемента

В заключение я бы сказал, что гораздо проще сделать это во Flash или даже отправить его на сервер, как упоминалось в других комментариях. Но если у вас есть основания делать все это в Javascript, это определенно возможно в большинстве современных браузеров.

Дополнительные ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...