Столкнувшись с форматом Raw GSM 6.10 audio stream (.gsm) первый раз я решил пойти по пути наименьшего сопротивления и найти готовое решение для проигрывания таких файлов онлайн.
Наткнувшись на github на единственный вменяемый плеер под названием WavPlayer, поддерживающий формат Raw GSM 6.10 Audio Stream, я ужаснулся от его интерфейса да и написан он был на языке haXe. К счастью есть такой замечательный проект audio.js который представляет из себя симпатичный frontend JS плеер с backend кодеком на Flash.
Довольно быстро возникло желание совместить эти два проекта. Бегло осмотрев архитектуру плеера и api кодека, я отбросил всякое желание менять JS код плеера для совместимости с WavPlayer. Остался вариант переписать кодек, этим я и занялся.
До знакомства с WavPlayer я и понятия не имел о языке haXe на котором он написан. Посмотрев исходники кодека и почитав пару заметок на сайте языка haXe я довольно быстро освоил синтаксис который сильно напоминает ActionScript. Посидев несколько вечеров я закончил переписывание api, попутно исправив пару багов на которые автор явно забил, а может они проявляются только при проигрывании файлов gsm. Результатом всех усилий стал форкнутый проект, который можно посмотреть на github.
Сборка
Для самостоятельной сборки кодека необходимо установить haXe, скачать исходники кодека с github и скомпилировать командой:
haxe audiojs.hxml
В результате получится файл с названием audiojs.swf реализующий полный набор api методов которые необходимы для совместной работы с audio.js.
Готовый файл можно сказу скачать по ссылке.
Установка
- Устанавливаем скрипт audio.js
- Заменяем оригинальный файл audiojs.swf на новый
- А также в при инициализации скрипта необходимо указать в настройках useFlash: true.
Это необходимо чтобы флеш кодек использовался даже тогда когда браузер поддерживает формат audio тегов.
audiojs.events.ready(function() {
audiojs.createAll({
'useFlash': true // всегда использовать флеш
});
});
Теперь для прослушивания online любой записи в формате .gsm достаточно вставить тег указывающий на файл. Например:
<audio src="test.gsm" />