Хотел бы поделиться одним из способов внедрения проигрывателя аудиофайлов для сайтов, использующих jQuery. А именно — плеером в стиле популярного сервиса Soundcloud, сделанном на HTML+CSS+JS. В догонку к недавней статье об интересном плеере jPlayer.
Сам плеер состоит из jPlayer'а, некоторого количества нехитрой верстки, и главного компонента — картинки с waveform проигрываемого файла (это наглядная картинка, на которой изображены амплитуды сигнала, отложенные по шкале времени).

С результатами этого допиливания можно ознакомиться, скачав архив со всем необходимым: http://test.dis.dj/wave/ (там же есть демка интерфейса плеера и архив с ним).
Найдя в гугле скрипт по адресу http://andrewfreiday.com/2010/04/29/generating-mp3-waveforms-with-php/, и убедившись, что он работает исправно, я решил немного допилить его под свои нужды. А именно добавить в него консольный режим, а также сделать картинку прозрачной в середине, где находится waveform, и непрозрачной по краям, чтобы можно было отображать прогресс проигрывания прямо в плеере, как это сделано у Soundcloud.
Скрипт работает так: перекодирует файл в wave формат с помощью вызова lame encoder'а, затем разбирает полученный файл и генерирует амплитуды, заполняя ими массив. После чего по этим амплитудам генерируется картинка, которая затем сжимается и отдается как результат работы.
Использовать полученный скрипт можно следующим образом:
Верстка совершенно простая — абсолютный слой с waveform в качестве фона или картинки, как удобнее, под ним еще два абсолютных слоя, которым JS задает ширину (прогрессбар проигрывания и закачки). Все это добро обернуто в еще один слой с
Готовый результат можно наблюдать по адресу http://dis.dj/music/seamless.html.
Плеер рендерится в любой контейнер, для этого надо вызвать его как любой другой jQuery плагин:
Данные о длине и времени нужны для красивого отображения до загрузки трека, будем считать, что эта информация уже где-то кешируется.
С «внешним миром» плеер взаимодействует с помощью вызовов:
Сам плеер состоит из jPlayer'а, некоторого количества нехитрой верстки, и главного компонента — картинки с waveform проигрываемого файла (это наглядная картинка, на которой изображены амплитуды сигнала, отложенные по шкале времени).

С результатами этого допиливания можно ознакомиться, скачав архив со всем необходимым: http://test.dis.dj/wave/ (там же есть демка интерфейса плеера и архив с ним).
Теперь поподробнее о процессе
Найдя в гугле скрипт по адресу http://andrewfreiday.com/2010/04/29/generating-mp3-waveforms-with-php/, и убедившись, что он работает исправно, я решил немного допилить его под свои нужды. А именно добавить в него консольный режим, а также сделать картинку прозрачной в середине, где находится waveform, и непрозрачной по краям, чтобы можно было отображать прогресс проигрывания прямо в плеере, как это сделано у Soundcloud.
Скрипт работает так: перекодирует файл в wave формат с помощью вызова lame encoder'а, затем разбирает полученный файл и генерирует амплитуды, заполняя ими массив. После чего по этим амплитудам генерируется картинка, которая затем сжимается и отдается как результат работы.
Использовать полученный скрипт можно следующим образом:
- Убедиться, что PHP указан в переменной PATH в системе
- >
wave file.mp3— генерирует изображение для конкретного файла - >
wave-all— генерирует изображения для всех файлов в папке - Опционально можно использовать файл
index.php, обращаясь к нему через браузер
Верстка совершенно простая — абсолютный слой с waveform в качестве фона или картинки, как удобнее, под ним еще два абсолютных слоя, которым JS задает ширину (прогрессбар проигрывания и закачки). Все это добро обернуто в еще один слой с
position: relative, дабы избежать воздействий на окружающие элементы верстки. Остальное — органы управления, навеска и украшательства. Демка доступна на странице скачивания.Готовый результат можно наблюдать по адресу http://dis.dj/music/seamless.html.
Использование плеера
Плеер рендерится в любой контейнер, для этого надо вызвать его как любой другой jQuery плагин:
$(function(){ $('#waveform').waveform({ media: { oga: "http://dis.dj/files/tracks/DiS - Seamless.oga", m4a: "http://dis.dj/files/tracks/DiS - Seamless.m4a", mp3: "http://dis.dj/files/tracks/DiS - Seamless.mp3" }, image: "http://dis.dj/files/tracks/DiS - Seamless.png", title: "DiS - Seamless", duration: 186, size: 7442977, durationFormatted: "3:06", sizeFormatted: "7.10MB", createDate: "5 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 2010 03:32:20", path: "jplayer/" }); });
Данные о длине и времени нужны для красивого отображения до загрузки трека, будем считать, что эта информация уже где-то кешируется.
С «внешним миром» плеер взаимодействует с помощью вызовов:
$(function(){ $("#waveform").waveform("play"); $("#waveform").waveform("pause"); $("#waveform").waveform("stop"); $("#waveform").waveform("getTrack"); // возвращает объект с инфо о треке (в формате, описанном выше) $("#waveform").waveform("setTrack", {…}); // ставит в плеер новый трек $("#waveform").waveform("getPlayer"); // возвращает инстанс jPlayer'а, с которым можно производить любые манипуляции (см. доку jPlayer) });
