Очень часто, скачав с торрентов очердную музыку, я вижу, что автор раздачи то ли не прописал тэги в mp3, то ли прописал их не правильно. Если исправить эти mp3-файлы и прописать в них нормальные тэги, то я не смогу сидировать только что скачанное. Что не очень хорошо. С другой стороны, я собираю свою музыкальную статистику в last.fm и хочется тэги поддерживать в актуальном состоянии. Есть, конечно, вариант скопировать только что скачанную музыку в отдельное место и исправить тэги там, но это как-то неспортивно.
Первые десять раз я создавал cue-плэйлист вручную, но потом вспомнил, что всё-таки имею отношение к программированию и написал небольшой скрипт на Perl, который по списку mp3 файлов создаёт cue-плэйлист. Теперь менять информацию об исполнителе, альбоме, названиях песен можно менять в нём, никак физически не трогая mp3-шки. Эти плейлисты прекрасно читаются foobar'ом.
У скрипта один параметр: pattern — код, который выполняется для каждого файла. В этом фрагменте кода должны устанавливаться переменные $track, $title и $performer — это соответственно номер трека, название песни и исполнитель.
Например, для имён файлов типа «22. Baby I Need Your Loving — Four Tops.mp3» скрипт нужно вызывать так:
perl c:\util\playlist_cue.pl "--pattern=($track,$title,$performer)= $f=~ /(\d\d)\. (.+) — (.+)\.mp3/;" >> playlist.cue
Считается, что в файле playlist.cue уже содержится информация об альбоме.
В результате работы скрипта получается что-то вроде (шапка писалась вручную):
Теперь названия треков и артистов можно подправлять, не затрагивая исходные mp3-шки.
Вот таким образом можно оставлять на раздаче даже те mp3-файлы, тэги в которых вас не устраивают.
Исправления, замечания и нормальные простые решения проблемы приветствуются.
Первые десять раз я создавал cue-плэйлист вручную, но потом вспомнил, что всё-таки имею отношение к программированию и написал небольшой скрипт на Perl, который по списку mp3 файлов создаёт cue-плэйлист. Теперь менять информацию об исполнителе, альбоме, названиях песен можно менять в нём, никак физически не трогая mp3-шки. Эти плейлисты прекрасно читаются foobar'ом.
У скрипта один параметр: pattern — код, который выполняется для каждого файла. В этом фрагменте кода должны устанавливаться переменные $track, $title и $performer — это соответственно номер трека, название песни и исполнитель.
Например, для имён файлов типа «22. Baby I Need Your Loving — Four Tops.mp3» скрипт нужно вызывать так:
perl c:\util\playlist_cue.pl "--pattern=($track,$title,$performer)= $f=~ /(\d\d)\. (.+) — (.+)\.mp3/;" >> playlist.cue
Считается, что в файле playlist.cue уже содержится информация об альбоме.
use strict;
use warnings;
use Getopt::Long;
my ($track,$performer,$title);
my $pattern = '($track,$title) = $f =~ /(\d*) - (.+)\.mp3/';
GetOptions ("pattern=s" => \$pattern);
for my $f (<*.mp3>) {
eval($pattern);
print<<ITEM;
FILE "$f" MP3
TRACK $track AUDIO
TITLE "$title"
ITEM
if (defined $performer) {
print "\tPERFORMER \"$performer\"\n";
}
print <<ITEMEND
INDEX 01 00:00:00
ITEMEND
}
В результате работы скрипта получается что-то вроде (шапка писалась вручную):
REM GENRE Motown REM DATE 1992 PERFORMER "Various Artists" TITLE "Hitsville USA: The Motown Singles Collection 1959-1971 (disc 1)" FILE "01. Money (That's What I Want) - Barrett Strong.mp3" MP3 TRACK 01 AUDIO TITLE "Money (That's What I Want)" PERFORMER "Barrett Strong" INDEX 01 00:00:00 FILE "02. Shop Around - The Miracles.mp3" MP3 TRACK 02 AUDIO TITLE "Shop Around" PERFORMER "The Miracles" INDEX 01 00:00:00 FILE "03. Please Mr. Postman - The Marvelettes.mp3" MP3 TRACK 03 AUDIO TITLE "Please Mr. Postman" PERFORMER "The Marvelettes" INDEX 01 00:00:00 FILE "04. Jamie - Eddie Holland.mp3" MP3 TRACK 04 AUDIO TITLE "Jamie" PERFORMER "Eddie Holland" INDEX 01 00:00:00
Теперь названия треков и артистов можно подправлять, не затрагивая исходные mp3-шки.
Вот таким образом можно оставлять на раздаче даже те mp3-файлы, тэги в которых вас не устраивают.
Исправления, замечания и нормальные простые решения проблемы приветствуются.