Я делаю игру, используя только HTML5 и Javascript. Я хочу взять MP3-файл, выбранный пользователем, и разбить его на несколько секунд. Возможно ли это сделать в Javascript, и если да, то как?
Если вам нужно решение на стороне клиента, но вы не связаны с Javascript, вы можете попробовать Flash. Существует множество отличных решений для редактирования во Flex / Actionscript. Вот один урок, с которым я столкнулся после быстрого поиска в Google: http://scriptplayground.com/tutorials/as/Play-Sound-Samples-From-One-File-Using-ActionScript-3/
Однако, если вы не используете Javascript, попробуйте выполнить следующие действия:
Проверьте эту скрипку: http://jsfiddle.net/andrewodri/PKPD6/. Он использует аудиоэлемент HTML5 для воспроизведения звука, но интересно то, что эти данные кодируются как URI данных. Какие бы закодированные данные мы ни выбросили у источника, он сможет воспроизводиться.
Ознакомьтесь со спецификацией W3C File API и особенно с интерфейсом FileReader . Это поддержка, по крайней мере, в Chrome и Firefox , хотя я не слишком уверен, насколько он исчерпывающий. Вы заметите, что вы можете считывать двоичные данные в URI данных , который вы можете 1) манипулировать в виде строки и 2) отправлять атрибуту src элемента audio.
Это будет самая сложная часть ... Вы можете начать с ознакомления со структурой файла MP3; то есть. понимание размера тега ID3 и того, как его идентифицировать, насколько большие кадры и где их можно отрубить, и как файл закрывается . Это поможет вам извлечь соответствующую информацию, а также выяснить, где вы можете начать рубить. Я положил некоторые ссылки внизу. Для этого в ActionScript было создано много аналогичного кода, который может быть хорошим справочным материалом.
Если у вас достаточно терпения, вы можете сделать следующее:
В заключение я бы сказал, что гораздо проще сделать это во Flash или даже отправить его на сервер, как упоминалось в других комментариях. Но если у вас есть основания делать все это в Javascript, это определенно возможно в большинстве современных браузеров.
Дополнительные ссылки: