На одном большом всем известном трекере люди стали частенько делиться своими копиями дисков, в формате flac/ape/wavepack(wv) с файлом-cue.
На деле — всё гладко. Действительно, есть и плееры, поддерживающие всё это дело, и действительно это всё работает. НО.
Мои увлечения связаны с электронной клубной музыкой, соответственно ради одного-двух треков целиком диски нарезать перед вечеринкой не хочется(лучше сделать свои грамотные сборники), плюс еще хотелось чтобы привести все файлы к одному формату, а именно FLAC — т.к. новые прогрессивные программы(Ableton Live) и плееры(ipod (с особой прошивкой, либо тач с софтом/cowon) его поддерживают.
Итак, еще раз, задача — имеются diskname.flac + diskname.cue, из них нужно получить много треков с тэгами и внятными названиями файла(Название артиста, номер трека, название трека) + плейлист.
Для примера я взял дистрибутив debian lenny (5.0). Видимо, для пользователей *buntu и других, основанных на debian дистрибутивах команды тоже будут верны.
Что нам понадобится:
sudo aptitude install build-essential — gcc и необходимый стафф для сборки поддержки формата ape.
sudo aptitude install cuetools — для работы с cue-файлом.
sudo aptitude install shntool — набор утилит для нарезания аудиофайлов и не только.
sudo aptitude install wavpack — кодер и декодер для формата wavpack
sudo aptitude install flac — кодер и декодер для flac
Качаем исходники mac-а (для работы с ape)
wget supermmx.org/resources/linux/mac/mac-3.99-u4-b5.tar.gz
Распаковываем и заходим в директорию для сборки:
tar xvzf mac-3.99-u4-b5.tar.gz
cd mac-3.99-u4-b5
make
если всё прошло без проблем — sudo make install.
Так, всё готово!
А теперь нужно написать свой скрипт для автоматизации всего процесса. Но постойте, я уже кое-что набросал ;)
Итак, у нас будет три скрипта.
Скрипт для разрезания оригинала на отдельные треки и последующего их тэгирования.
cuesplit
Скрипт для переименования полученных треков:
cuerename
Пояснение про цикл. Мне нужно было чтобы треки назывались 01, 02, 03, для правильной сортировки, а не 1, 2, 3. На одном из дисков оказалось 66 треков(мексиканцы мои любимые):)
Скрипт, который выполняет первый и второй скрипт по-очереди ;)
cuemagic
По статистике, большинство людей нормальные windows-пользователи, соответственно в файлах присутствуют пробелы.
Я, к сожалению, программист плохой (по образованию — горный инженер). Поэтому для порядка и чтобы вообще мои скрипты работали, я написал еще один маленький примитивный скрипт чтобы заменять пробелы в имени файла на подчеркивания. Надеюсь, в комментариях мне подскажут более изящный путь.
Скрипт для массового переименования файлов с пробелами в названии.
mrnm
А теперь пример работы!
Если остались вопросы, задавайте, пожалуйста. Особенно приветствуются рацпредложения и мысли по-поводу элегантного решения проблемы с пробелами и прочими спецсимволами :)
ps Когда я уже закончил статью, я обратил внимание, что такие тэги уже кем-то указывались, поискал по этим меткам, всё так и оказалось — человек уже писал о подобном, но у него были немного другие цели. В любом случае, этот пример может быть хорошим примером того, как не надо программировать или как программируют любители ;)
На деле — всё гладко. Действительно, есть и плееры, поддерживающие всё это дело, и действительно это всё работает. НО.
Мои увлечения связаны с электронной клубной музыкой, соответственно ради одного-двух треков целиком диски нарезать перед вечеринкой не хочется(лучше сделать свои грамотные сборники), плюс еще хотелось чтобы привести все файлы к одному формату, а именно FLAC — т.к. новые прогрессивные программы(Ableton Live) и плееры(ipod (с особой прошивкой, либо тач с софтом/cowon) его поддерживают.
Итак, еще раз, задача — имеются diskname.flac + diskname.cue, из них нужно получить много треков с тэгами и внятными названиями файла(Название артиста, номер трека, название трека) + плейлист.
Для примера я взял дистрибутив debian lenny (5.0). Видимо, для пользователей *buntu и других, основанных на debian дистрибутивах команды тоже будут верны.
Что нам понадобится:
sudo aptitude install build-essential — gcc и необходимый стафф для сборки поддержки формата ape.
sudo aptitude install cuetools — для работы с cue-файлом.
sudo aptitude install shntool — набор утилит для нарезания аудиофайлов и не только.
sudo aptitude install wavpack — кодер и декодер для формата wavpack
sudo aptitude install flac — кодер и декодер для flac
Качаем исходники mac-а (для работы с ape)
wget supermmx.org/resources/linux/mac/mac-3.99-u4-b5.tar.gz
Распаковываем и заходим в директорию для сборки:
tar xvzf mac-3.99-u4-b5.tar.gz
cd mac-3.99-u4-b5
make
если всё прошло без проблем — sudo make install.
Так, всё готово!
А теперь нужно написать свой скрипт для автоматизации всего процесса. Но постойте, я уже кое-что набросал ;)
Итак, у нас будет три скрипта.
Скрипт для разрезания оригинала на отдельные треки и последующего их тэгирования.
cuesplit
#!/bin/bash if [ "$1" == "" ]; then echo "Usage: $0 flac/apefile cuesheetname" exit else cuebreakpoints $2 | shnsplit -o flac -O always $1 cuetag $2 split-track*.flac fi
Скрипт для переименования полученных треков:
cuerename
#!/bin/bash TRACKNAME=split-track ENDNAME=".flac" PLAYLISTNAME="!playlist.m3u" rm $PLAYLISTNAME 2>/dev/null for i in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66; do if [ -f $TRACKNAME$i$ENDNAME ]; then echo -n else exit fi PERFORMER=`cueprint -t '%p_\n' -n $i $2 | tr [:blank:] '_' | tr ':' '_' | tr '*' '_'` TRACK=`cueprint -t '_%t\n' -n $i $2 | tr [:blank:] '_' | tr ':' '_' | tr '*' '_'` echo "$PERFORMER$i$TRACK$ENDNAME" >> $PLAYLISTNAME echo "$PERFORMER$i$TRACK$ENDNAME" mv $TRACKNAME$i$ENDNAME $PERFORMER$i$TRACK$ENDNAME done;
Пояснение про цикл. Мне нужно было чтобы треки назывались 01, 02, 03, для правильной сортировки, а не 1, 2, 3. На одном из дисков оказалось 66 треков(мексиканцы мои любимые):)
Скрипт, который выполняет первый и второй скрипт по-очереди ;)
cuemagic
#!/bin/bash if [ "$2" == "" ]; then echo "Usage: $0 flac/apefile cuesheet-file" exit else cuesplit $1 $2 cuerename $1 $2 fi
По статистике, большинство людей нормальные windows-пользователи, соответственно в файлах присутствуют пробелы.
Я, к сожалению, программист плохой (по образованию — горный инженер). Поэтому для порядка и чтобы вообще мои скрипты работали, я написал еще один маленький примитивный скрипт чтобы заменять пробелы в имени файла на подчеркивания. Надеюсь, в комментариях мне подскажут более изящный путь.
Скрипт для массового переименования файлов с пробелами в названии.
mrnm
#!/bin/bash. find . -depth|rename 's/\ /_/g'
А теперь пример работы!
grinder:/home/massiv/LOSSLESS/Terminal Choice - Navigator [1998]# ls -la total 411841 drwxrwxrwx 1 root root 0 2009-06-04 00:26 . drwxrwxrwx 1 root root 0 2009-06-04 02:56 .. -rwxrwSrwx 1 root root 260 2009-06-04 09:12 audiochecker.log drwxrwxrwx 1 root root 0 2009-06-03 21:02 Covers -rwxrwSrwx 1 root root 1951 2009-06-04 09:12 Terminal Choice - Navigator.cue -rwxrwSrwx 1 root root 421561038 2009-06-04 09:13 Terminal Choice - Navigator.flac -rwxrwSrwx 1 root root 3331 2009-06-03 23:21 Terminal Choice - Navigator.log grinder:/home/massiv/LOSSLESS/Terminal Choice - Navigator [1998]# mrnm grinder:/home/massiv/LOSSLESS/Terminal Choice - Navigator [1998]# ls -la total 411841 drwxrwxrwx 1 root root 0 2009-06-29 20:13 . drwxrwxrwx 1 root root 0 2009-06-04 02:56 .. -rwxrwSrwx 1 root root 260 2009-06-04 09:12 audiochecker.log drwxrwxrwx 1 root root 0 2009-06-03 21:02 Covers -rwxrwSrwx 1 root root 1951 2009-06-04 09:12 Terminal_Choice_-_Navigator.cue -rwxrwSrwx 1 root root 421561038 2009-06-04 09:13 Terminal_Choice_-_Navigator.flac -rwxrwSrwx 1 root root 3331 2009-06-03 23:21 Terminal_Choice_-_Navigator.log grinder:/home/massiv/LOSSLESS/Terminal Choice - Navigator [1998]# cuemagic Terminal_Choice_-_Navigator.flac Terminal_Choice_-_Navigator.cue Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track01.flac] (3:07.70) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track02.flac] (5:05.02) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track03.flac] (6:03.03) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track04.flac] (3:49.72) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track05.flac] (1:51.05) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track06.flac] (5:55.52) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track07.flac] (4:40.68) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track08.flac] (5:46.30) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track09.flac] (5:00.20) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track10.flac] (1:11.63) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track11.flac] (6:06.00) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track12.flac] (6:07.35) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track13.flac] (4:17.70) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track14.flac] (1:48.35) : 100% OK Splitting [Terminal_Choice_-_Navigator.flac] (64:21.10) --> [split-track15.flac] (3:29.10) : 100% OK Terminal_Choice_01_(Intro)_Actual_Reality?.flac Terminal_Choice_02_Without_Warning.flac Terminal_Choice_03_Victim_Of_Life.flac Terminal_Choice_04_Someone.flac Terminal_Choice_05_Navigator_I.flac Terminal_Choice_06_Der_Tod.flac Terminal_Choice_07_House_Of_Evil.flac Terminal_Choice_08_No_Escape.flac Terminal_Choice_09_The_Sons_Of_Doom.flac Terminal_Choice_10_Tenderness.flac Terminal_Choice_11_Navigator_II.flac Terminal_Choice_12_The_Eternal_Evil.flac Terminal_Choice_13_Kaltes_Herz.flac Terminal_Choice_14_Navigator_III.flac Terminal_Choice_15_Navigator_IV_(Version).flac grinder:/home/massiv/LOSSLESS/Terminal Choice - Navigator [1998]# ls -la total 828610 drwxrwxrwx 1 root root 0 2009-06-29 20:17 . drwxrwxrwx 1 root root 0 2009-06-04 02:56 .. -rwxrwSrwx 1 root root 260 2009-06-04 09:12 audiochecker.log drwxrwxrwx 1 root root 0 2009-06-03 21:02 Covers -rwxrwSrwx 1 root root 574 2009-06-29 20:17 !playlist.m3u -rwxrwSrwx 1 root root 17370275 2009-06-29 20:17 Terminal_Choice_01_(Intro)_Actual_Reality.flac -rwxrwSrwx 1 root root 37622950 2009-06-29 20:17 Terminal_Choice_02_Without_Warning.flac -rwxrwSrwx 1 root root 38571483 2009-06-29 20:17 Terminal_Choice_03_Victim_Of_Life.flac -rwxrwSrwx 1 root root 25643068 2009-06-29 20:17 Terminal_Choice_04_Someone.flac -rwxrwSrwx 1 root root 11619094 2009-06-29 20:17 Terminal_Choice_05_Navigator_I.flac -rwxrwSrwx 1 root root 41084081 2009-06-29 20:17 Terminal_Choice_06_Der_Tod.flac -rwxrwSrwx 1 root root 32317355 2009-06-29 20:17 Terminal_Choice_07_House_Of_Evil.flac -rwxrwSrwx 1 root root 39866544 2009-06-29 20:17 Terminal_Choice_08_No_Escape.flac -rwxrwSrwx 1 root root 35956407 2009-06-29 20:17 Terminal_Choice_09_The_Sons_Of_Doom.flac -rwxrwSrwx 1 root root 6399212 2009-06-29 20:17 Terminal_Choice_10_Tenderness.flac -rwxrwSrwx 1 root root 30924941 2009-06-29 20:17 Terminal_Choice_11_Navigator_II.flac -rwxrwSrwx 1 root root 46413377 2009-06-29 20:17 Terminal_Choice_12_The_Eternal_Evil.flac -rwxrwSrwx 1 root root 30521201 2009-06-29 20:17 Terminal_Choice_13_Kaltes_Herz.flac -rwxrwSrwx 1 root root 10079967 2009-06-29 20:17 Terminal_Choice_14_Navigator_III.flac -rwxrwSrwx 1 root root 21843539 2009-06-29 20:17 Terminal_Choice_15_Navigator_IV_(Version).flac -rwxrwSrwx 1 root root 1951 2009-06-04 09:12 Terminal_Choice_-_Navigator.cue -rwxrwSrwx 1 root root 421561038 2009-06-04 09:13 Terminal_Choice_-_Navigator.flac -rwxrwSrwx 1 root root 3331 2009-06-03 23:21 Terminal_Choice_-_Navigator.log grinder:/home/massiv/LOSSLESS/Terminal Choice - Navigator [1998]# rm Terminal_Choice_-_* grinder:/home/massiv/LOSSLESS/Terminal Choice - Navigator [1998]#
Если остались вопросы, задавайте, пожалуйста. Особенно приветствуются рацпредложения и мысли по-поводу элегантного решения проблемы с пробелами и прочими спецсимволами :)
ps Когда я уже закончил статью, я обратил внимание, что такие тэги уже кем-то указывались, поискал по этим меткам, всё так и оказалось — человек уже писал о подобном, но у него были немного другие цели. В любом случае, этот пример может быть хорошим примером того, как не надо программировать или как программируют любители ;)