IZONE- http://www.izcity.com/- бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

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

Сергей Яремчук

Однажды зимним вечером я пришел домой от друга с пачкой заполненных эмпешками компактов. Перегнать их на свой жесткий диск не составило большого труда. После первых часов эйфории наступила пора систематизировать все ЭТО, но тут меня ждало разочарование: все файлы назывались каким-то странным цифровым кодом (с расширением *.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» (нуль), и тогда в действие вступит обычный алгоритм работы оператора ИЛИ: если первый аргумент «ложь», то результат будет равняться второму операнду, т. е. значению, которое мы извлекли из файла. Если параметр состоит из двух и более слов, то заключите их в кавычки.

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

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

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

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

Источник: http://www.mycomp.com.ua/

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com