CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Как обозвать эмпешку

Сергей ЯРЕМЧУК grinder@fm.ua

Однажды зимним вечером я пришел домой от друга с пачкой заполненных эмпешками компактов. Перегнать их на свой жесткий диск не составило большого труда. После первых часов эйфории наступила пора систематизировать все ЭТО, но тут меня ждало разочарование: все файлы назывались каким-то странным цифровым кодом (с расширением *.mp3, естественно). Для того чтобы узнать, что за песня, приходилось запускать Winamp и смотреть по названиям (служебная информация, включенная в файл и отображаемая в окне программы).

Ситуацию надо было как-то спасать. На помощь пришел Perl со своим модулем MP3::info. Где его брать? На CPAN, конечно. Исследуемый модуль предназначен для управления выборкой и записью информации об MP3-файлах. Подключается к скрипту аналогично прочим Perl-модулям.

use MP3::Info — Описание вызова функции get_mp3tag (FILE [, VERSION, RAW_V2]), где FILE — название файла, а VERSION, RAW_V2 — т. н. ID3-тэг, необязательная информация о версии заголовка. От него зависит количество служебной информации, записываемой в mp3-файл. В принципе, Perl обрабатывает версию автоматически и выбирает только ту информацию, которая может там быть. А с помощью функции remove_mp3tag (FILE [, VERSION, BUFFER]) вообще можно его удалить, и файл будет на 128 байт короче (экономия места на винте :-)). Но хватит теории. Пишем программу.

Вот и все — скрипт читает тэг и в соответствии с ним переименовывает файл. Для большего удобства можно извлечь и название альбома —$tag->{ALBUM}, — создать каталог с таким именем и перенести все файлы туда. На практике название альбома пишут реже, однако можете попробовать. Еще можно проверить наличие TITLE вообще (с помощью функции defined или while ($title)), и при отсутствии оного перейти к следующему файлу, но с этим Perl и сам отлично справляется.

Все это хорошо работает с названиями, напечатанными латиницей и под Windows, а для Linux, как всегда, существует проблема кодировок: если заголовки представлены в CP1251, то в Linux'е вы увидите абракадабру. Поэтому необходимо добавить следующие строки в текст программы.

Выглядит страшно, да? Первыми идут объявления скаляров, которые содержат шестнадцатеричную кодировку всех букв русского алфавита в СР1251 и КОI8 соответственно. Затем объявляется функция, которая осуществляет перекодирование. Здесь используется операция транслитерации. Она производит замену символов первого списка на символы той же позиции второго. А после всего следует вызов функции перекодировки для каждой строки текста.

Теперь разберем обратную проблему. В современных проигрывателях можно выбрать сразу песни одного исполнителя или стиля, но вот незадача — самая большая группа оказывается в папке Untitled, а перебирать файлы вручную почему-то не хочется :-). И здесь нам опять же поможет MP3::Info с Perl’ом. Вызов соответствующей функции выглядит так:

Параметры очевидны: файл — название — песни — артист — альбом — год — комментарий — жанр — номер дорожки. Все поля имеют 30-байтовый предел, так что сильно не увлекайтесь.

Небольшое пояснение. В Perl'е, как и в С, любое непустое и ненулевое значение соответствует условию «истина», нулевое и пустое — условию «ложь». Это мы и используем при вызове программы. Команда выглядит так:

Название песни пропущено, оставлено извлеченное из файла значение — мы ведь собираемся пройтись по всем песням текущего каталога. Если какой-нибудь пункт необходимо пропустить, то на его месте поставьте «0» (нуль), и тогда в действие вступит обычный алгоритм работы оператора ИЛИ: если первый аргумент «ложь», то результат будет равняться второму операнду, т. е. значению, которое мы извлекли из файла. Если параметр состоит из двух и более слов, то заключите их в кавычки.

И в заключение еще одна функция — она выбирает из файла информацию, которую невозможно изменить: время звучания, битрейт, версия, стерео\моно, частота и еще много чего, в зависимости от версии.

Описание ее таково:

Вот так можно узнать время звучания файла

В принципе, это все — если заинтересовались, почитайте документацию к модулю — и вперед. Ведь юзер должен быть чуточку ленив — ровно настолько и в том смысле, чтобы не лениться автоматизировать монотонные операции (зачем же тогда компьютер?), а клаву лучше всего использовать для боев с товарищами по локалке.

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov