Конвертация звуковых файлов средствами PHP является не совсем тривиальной задачей, если говорить точнее - это вообще не предусмотрено, в связи с тем, что это занимало бы много времени из-за специфики работы самого языка PHP. Но данную задачу можно решить сторонними средствами управляя ими через вызов внешних программ из кода PHP.
Если вы работаете в среде Linux, то для начала вам стоит установить себе на сервер 2 программы (из исходников). За основу взят дистрибутив Ubuntu. Для этого выполним 2 команды в консоле linux'а.
# sudo apt-get install sox
# sudo apt-get install lame
Для windows стоит скачать 2 скомпилированные приложения.
Приложил к статье, на всякий случай.
Вкратце о программах. SOX (http://sox.sourceforge.net/) - это программа которая может применять различные эффекты, фильтры к аудио записям, а так же используется для конвертации аудио файлов в другие типы аудио файлов. Но для некоторых расширений нужны дополнительные кодеки, как в нашем случае и здесь на сцене появляется LAME (http://lame.sourceforge.net/). Данный набор кодеков как раз и предоставит нам возможность работы с mp3 файлами.
Вопрос конвертации WAV файлов в MP3 можно решить использованием лишь только набора кодеков LAME и выполнив команду из PHP использовав функцию запуска внешних программ.
<?php
exec("/path/to/lame /path/to/source/file.wav /path/to/save/file.mp3");
?>
Тоже самое только с опцией смены битрейта.
<?php
exec("/path/to/lame -b 16 -m m /path/to/source/file.wav /path/to/save/file.mp3");
?>
Где "-b" опция которая указывает, что будет установленный новый битрейт а цифра следующая после ключа "16" говорит о новом битрейте 16КБ.
Ключ "-m" говорит какой канал звука будет на выходе, например "-m m" говорит о том, что звук будет моноканальным.
Подробнее о ключах и опциях к ним прочитать можно здесь (http://lame.cvs.sourceforge.net/viewvc/lame/lame/USAGE).
Но вы спросите для чего нам тогда SOX. А вот тут то и исходная проблема и задача которая возникла у меня, формат файлов WAV которые поступали ко мне на сервер был специфичен и при стараниях его конвертировать я получал ошибки.
# Unsupported data format: 0x0006
# Unsupported data format: 0x0031
В итоге выяснилось, что WAV файлы просто имели низкое качество звука (так как это была запись телефонных разговоров) и отпускались с форматом "CCITT A-Law", данный формат является не совсем тривиальным для использования кодеком LAME. Потому функционал SOX был в самый раз. И при выполнение следующей команды из PHP все отлично конвертировалось.
<?php
exec("/path/to/sox -t wav /path/to/source/file.wav -t wav -e signed-integer – | lame -b 16 -m mono – /path/to/save/file.mp3");
?>
Надеюсь данная статья кому-то поможет сократить время поиска решения задачи.
Комментарии