Собираем LAME прямо из исходников
Возможно, вы уже слышали про то, как некоторые энтузиасты собирают кодеки из исходных кодов сами и таким образом имеют доступ к новейшим кодекам.
Эта несложная задача для меня когда-то казалась неподъемной. Порой очень хотелось протестировать последние разработки кодека, несмотря на то, что они были нестабильны. По себе знаю, что нестабильность для энтузиастов — все равно, что масло в огонь, лишь разжигает интерес. Овладев умением сборки из исходных кодов, я хотел бы поделиться им с вами. Речь пойдет о сборке кодеков под Windows 7.
Репозиторий, CVS и зачем все это надо
Самые свежие исходные коды LAME (грубо говоря, текст программы) лежат в репозиториях на SourceForge.net. Репозиторий находится под довольно старой системой контроля версий: CVS. Для нее проще всего воспользоваться специальным клиентом, заточенным под Windows — TortoiseCVS (ссылка для скачивания).
Зачем вообще эта система контроля? Проще всего можно сказать, что это хранилище исходных текстов, которое позволяет легко разрабатывать один проект нескольким людям.
Устанавливаем TortoiseCVS, таким образом у вас появляется возможность скачать себе самые последние исходные коды кодека.
Исходные тексты в EXE
Итак, предположим, что есть у нас на руках текст программы. А дальше что? Просто так текст сам по себе ничего не делает. Нам нужно создать из него исполняемый файл или, в простонародии, "экзешник". Для разных языков программирования путь этого преобразования разный. Но большинство кодеков пишутся на языке Си из-за того, что кодекам очень важна производительность. Как известно, программы, написанные на Си, в большинстве случаев оказываются быстрее своих собратьев, написанных на других языках. Остановимся на том, как же преобразовать текст программы, написанный на языке Си в исполняемый файл (этот процесс также называется компиляцией и сборкой).
Но тут вступает в свою силу следующий нюанс: в основном многие кодеки по идейным соображениям имеют открытый исходный код (как у LAME). Потому и разрабатываются они не на Windows, а на Linux, опять же из соображений, что Linux бесплатен и тоже имеет открытые исходные коды. Так что изначально кодеки написаны для Linux и, как правило, с большим трудом компилируются Windows-средствами от Microsoft (Visual C++). Возникает задача: скомпилировать программу, изначально написанную в Linux для работы в Windows. И тут есть решение: MinGW. Этот набор утилит, который, если не вдаваться в дебри, специально создан для таких задач.
Нам потребуется скачать MinGW и установить его. Располагается он также на SourceForge.net.
MinGW
Итак, установка MinGW.
Соглашаемся с условиями GPL.
Я буду устанавливать на диск F:\ Вы же можете выбрать любое более подходящее для вас место.
Компилятор для языка Си уже выбран по умолчанию. Нам еще понадобится MSYS (набор утилит Linux, скомпилированных под Windows).
Установка занимает длительное время, так как при установке MinGW выкачивает большое количество необходимых библиотек, тем самым делая за нас очень большую и рутинную часть работы.
В конце на ваше усмотрение можно проконтролировать логи установки MinGW. Я же поверю ему на слово.
TortoiseCVS
Как только вы закончите с MinGW, можно будет приступить к загрузке последней версии исходников LAME на ваш компьютер. Что для этого нужно? Как я уже говорил выше, TortoiseCVS - это удобный клиент для работы с CVS. Я буду скачивать исходники в корень диска F:\ в папку lame. Папку lame создавать не нужно, об этом позаботится клиент. Итак, через проводник заходим на диск F:\ и нажимаем правой кнопкой в пустом месте.
Выставляем следующие настройки и выполняем действия последовательно
По завершении, если вы все сделали правильно, вы увидите примерно следующее
Итак, теперь у нас в F:\lame лежит последняя версия исходников.
Конфигурация, компиляция, сборка
Все эти три действия придется делать из консоли. Точнее сказать 2 действия, т.к. компиляция и сборка заключены в одно.
MSYS
MSYS - это, грубо говоря, эмулятор консоли Linux. Итак, запускаем его. В моем случае файл для запуска располагался здесь:
F:\MinGW\msys\1.0\msys.bat
Итак, перед вами должно появиться окно следующего вида:
Набираем в нем
cd /F/lame
Таким образом, мы попадем в папку с исходниками LAME, откуда и будем производить все действия. В данном случае F — имя диска, на который вы скачали исходники. Командой ls можно удостовериться, что мы там, где нужно, она выведет список файлов в текущей директории.
Конфигурация
Этот процесс подготавливает проект к текущему окружению (в нашем случае MinGW). Он также проверяет, все ли необходимые библиотеки и утилиты у вас установлены и возможна ли компиляция вообще. Конфигурация запускается как правило командой:
./configure
Не игнорируйте ./ Без них у вас ничего не получится. Если вы все сделали правильно и звезды были к вам благосклонны, то через некоторое время вы увидите, что конфигурация завершилась успешно.
Компиляция и сборка
Итак, настало время скомпилировать проект, за это отвечает команда make. Вводим ее, нажимаем Enter и видим...
Что ж, мое шоу потерпело фиаско. Я столкнулся с ошибкой компиляции. Мой опыт не позволил мне разобраться, что же было не так в исходных кодах, да и не в этом заключается цель статьи. Просто это яркий пример того, как порой нестабильные версии могут наотрез отказываться собираться. Да, такое происходит и сегодня нам не повезло, но с этим надо смириться, возможно, один из разработчиков проекта в ближайшее время исправит этот недочет.
Но чтобы не оставлять читателя ни с чем, я попытаюсь продемонстрировать метод до конца, для этого я возьму исходный код LAME стабильной версии и сделаю несколько шагов назад.
Повторяем со стабильной версией
Скачать стабильную версию можно с главной страницы проекта LAME:
Удаляем сущестувующую папку F:\lame и распаковываем туда скачанный архив.
Переходим в MSYS в папку F:\lame командой
cd /F/lame
И снова запускаем конфигурирование командой
./configure
Запускаем копиляцю и сборку командой
make
В этот раз все происходит довольно долго и это потому, что компилируется кодек. Если все пройдет успешно, вы увидите в итоге следующее:
Теперь, перейдя в папку
cd /F/lame/frontend
Мы можем увидеть, что наш исполняемый файл лежит там, просто запустив его:
lame
Попробуем на тестовом файле (в моем случае a.wav), как же поведет себя только что скомпилированный кодек LAME, запустив команду
lame a.wav
В итоге был создан файл a.mp3 128 kbit/s, который прекрасно воспроизвелся в моем foobar2000.
Заключение
На этом я считаю, что можно заканчивать статью. Тема сборки LAME из исходников раскрыта, несмотря на то, что у нас не получилось собрать его из самых свежих исходников. Хоть нам и не пригодился TortoiseCVS, тем не менее, опыт его использования в нашем деле очень полезен.
Также хочется отметить, что все эти действия можно обобщить и применять их не только для кодека LAME. В следующий раз я попробую рассказать вам о задаче несколько посложнее: сборке кодека CELT.