Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
foobar2000:tagz:tutorial:create_columns [2006/05/21 09:13] Mishail |
foobar2000:tagz:tutorial:create_columns [2017/11/05 12:26] (текущий) VEG старая версия восстановлена (2006/09/02 05:42) |
||
---|---|---|---|
Строка 14: | Строка 14: | ||
В большинстве столбцов мы должны делать различия между композициями принадлежащими полным альбомам (с этого момента я буду называть их 'альбомными трэками') и отдельными композициями (отдельными трэками). Задача скрипта будет такая: //Если работаем с альбомным трэком, то делаем то-то. Если же работаем с отдельным трэком, делаем другое//. Конечно же для этого лучше всего подойдет конструкция ''if'' | В большинстве столбцов мы должны делать различия между композициями принадлежащими полным альбомам (с этого момента я буду называть их 'альбомными трэками') и отдельными композициями (отдельными трэками). Задача скрипта будет такая: //Если работаем с альбомным трэком, то делаем то-то. Если же работаем с отдельным трэком, делаем другое//. Конечно же для этого лучше всего подойдет конструкция ''if'' | ||
- | <html><code>$if(<b>$get_global(isAlbum)</b><br> | + | <html><pre class="code">$if(<b>$get_global(isAlbum)</b> |
- | ,<br> | + | , |
- | // Tasks for album tracks go here<br> | + | // Tasks for album tracks go here |
- | ,<br> | + | , |
- | // Tasks for single tracks go here<br> | + | // Tasks for single tracks go here |
- | )</code></html> | + | )</pre></html> |
Обратите внимание на часть выделенную жирным шрифтом. Т.к. разделение альбомный/отдельный трэк нам нужно повсеместно, то самым эффективным решением будет выполнить такой запрос только один раз, сохранив его результат в глобальной переменной и в дальнейшем просто использовать эту переменную там где необходимо. Это спасает нас от перепечатывания одних и тех же строк снова и снова, и делает скрипт быстрее, потому что запрос фактически выполняется только один раз. | Обратите внимание на часть выделенную жирным шрифтом. Т.к. разделение альбомный/отдельный трэк нам нужно повсеместно, то самым эффективным решением будет выполнить такой запрос только один раз, сохранив его результат в глобальной переменной и в дальнейшем просто использовать эту переменную там где необходимо. Это спасает нас от перепечатывания одних и тех же строк снова и снова, и делает скрипт быстрее, потому что запрос фактически выполняется только один раз. | ||
Строка 74: | Строка 74: | ||
Код из секции track 1 так же является нашим первым примером использования вложенных выражений, когда второе выражение ''$if()'' является частью //иначе// первого ''$if()''. Как это можно перевести: //Если используемый кодек называется ‘ATSC A52’, отобразить более понятное ‘dolby digital ac3'. Иначе выолнить вторую команду if: Проверить наличие поля ''lame_version'' и отобразить ‘lame’. Если же такого поля нет, использовать то что выдаст ''%codec%''//. И этим мы завершаем 1-ю строку альбома. | Код из секции track 1 так же является нашим первым примером использования вложенных выражений, когда второе выражение ''$if()'' является частью //иначе// первого ''$if()''. Как это можно перевести: //Если используемый кодек называется ‘ATSC A52’, отобразить более понятное ‘dolby digital ac3'. Иначе выолнить вторую команду if: Проверить наличие поля ''lame_version'' и отобразить ‘lame’. Если же такого поля нет, использовать то что выдаст ''%codec%''//. И этим мы завершаем 1-ю строку альбома. | ||
+ | |||
+ | Вторая строка начинается с трех знаков пробела, служащих для отступа в плэйлисте. ''$if2()'' ищет и показывает тэг ''%album artist%'' (и снова не забываем про подстановку полей) или, если Ваши файлов не имеют правильных тэгов, строку ‘no-artist’. То же самое происходит и на 3-й строке, но уже с тэгом album. | ||
+ | |||
+ | Строка 4 содержит информацию о номере диска и дате релиза. И в первую очередь мы отображаем значение поля ''%disc%'', используя квадратные скобки для тоо чтобы выводить значение только в случае если это поле присутствует, и отображаем, к примеру, //Disc 1//. Затем идет ''$tab()'', которое вставляет знак табуляции, используемый для выравнивания текста в столбце. Это работает так: | ||
+ | |||
+ | выравнивание по левому краю $tab() выравнивание по правому краю | ||
+ | выравнивание по левому краю $tab() выравнивание по центру $tab() выравнивание по правому краю | ||
+ | |||
+ | Теперь для многодисковых альбомов мы выводим информацию о диске на левой стороне столбца, за этой информацией идет выравненный по правому краю последующий текст. Для однодисковых альбомов эта колонка пуста, не считая трех отступов (знаков пробела). | ||
+ | |||
+ | |||
+ | Далее наступает время ''$if2()'' позаботиться об отображении даты. В первую очередь мы проверяем наличие тэга album date и отображаем его, если он есть. Напомню что тэг album date используется в сборниках, когда дата выхода отдельного трэка отличается от даты выхода альбома (сборника). если же данный тэг не найден, то отображается тэг date, но, благодаря квадратным скобкам, опять же, только в том случае если этот есть в файле. | ||
+ | |||
+ | Ну вот мы и подошли к 5-й строке. В общем-то я даже не знаю что про нее сказать :-) Просто напросто закрывающая скобка для нашего выражения, начатого на строке 1. Вот, собственно, и все для отображения в режиме альбома в этом столбце. Полностью это выглядит так: | ||
+ | |||
+ | $if($get_global(isAlbum) | ||
+ | , | ||
+ | // --- Album view --- | ||
+ | $select(%tracknumber%, | ||
+ | // Track 1 | ||
+ | $if($strcmp(%codec%,'ATSC A/52'),'dd_ac3', | ||
+ | $if($info(lame_version),'lame', | ||
+ | $lower(%codec%) | ||
+ | )) | ||
+ | ' album {', | ||
+ | // Track 2 | ||
+ | ' '$if2(%album artist%,'<no artist>'), | ||
+ | // Track 3 | ||
+ | ' '$if2(%album%,'<no album>'), | ||
+ | // Track 4 | ||
+ | ' '['Disc '%disc%$tab()]$if2(%album date%,[%date%])$tab(), | ||
+ | // Track 5 | ||
+ | '}' | ||
+ | ), | ||
+ | // --- Single view --- | ||
+ | [%artist%] | ||
+ | ) | ||
+ | |||
+ | ===== Столбец Tracknumber ===== | ||
+ | |||
+ | Создайте новый столбец, назовите его **#**, устновите ширину (**Width**) равную **30** пикселей и выравнивание по центру (**Alignment** равное **Centre**). В этом столбце будет отображаться номер трэка для альбомов, для одиночных трэков мы ничего не будем отображать. Скрипт предельно прост | ||
+ | |||
+ | $if($get_global(isAlbum), | ||
+ | $ifgreater(%tracknumber%,9, | ||
+ | %tracknumber%, | ||
+ | '0'$num(%tracknumber%,1) | ||
+ | )) | ||
+ | |||
+ | Первая строка Вам уже наверняка знакома, она выполняет остальные строки для альбомных трэков, и, естественно, пропускает их для одиночных. | ||
+ | |||
+ | Строки начиная со второй являются вызовом одной команды - ''$ifgreater()'', которая делает следующее: //Если номер трэка больше 9 (что означает что он состоит из 2-х цифр), то отображать номер трэка. Иначе отобразить 0, а затем номер трэка, без нуля в начале.// | ||
+ | |||
+ | Стоит отметить, что вы не можете не указывать часть //иначе// в коммандах ''$ifgreater()'', такое разрешается только для обычного ''$if()''. | ||
+ | |||
+ | Функция ''$num(number,length)'' работает следующим образом: она берет число //number// и присоединяет нули к его началу до тех пор пока, пока дляна строки не станет равной //length//. Если же длина строки (количество цифр) в //number// уже больше //length//, то никаких действий выолняться не будет. Если же строка содержащая число //number// уже заполнена нулями спереди до длины большей чем //length//, то после выполнения функции лишние нули будут удалены. Данная возможность этой функции именно то, что нам надо в этом скрипте, потому что ее вызов с //length// равной 1 всегда удаляет любые нули в начале строки, а подстановка полей foobar2000 всегда дополняет нулями номер трэка до двух цифр. Вы могли заметить, что наш вызов ''$ifgreater()'' сам ставит ноль в для номера трэка, если он меньше 10. Вы спросите, зачем мы подставляем ноль сами, хотя мы обрезали его перед этим используя ''$num(%tracknumber%,1)''? Почему не не используем стандартную подстановку полей, которая автоматически добавляет ноль? Так вот, далее мы планируем отображать этот ведущий ноль другим цветом, а используя стандартную подстановку полей это невозможно. | ||
+ | |||
+ | Собственно скрипт для столбца //Tracknumber// готов. Тем не менее мы добавим одну маленькую изюминку, сделав отображение номеров трэков в [[wpru>Hex|шестнадцатеричной системе]]. Конвертация числа осуществляется простым вызовом функции ''$hex()''. Получим наш финальный скрипт: | ||
+ | |||
+ | $if($get_global(isAlbum), | ||
+ | $ifgreater(%tracknumber%,15, | ||
+ | $hex(%tracknumber%,1), | ||
+ | '0'$hex(%tracknumber%,1) | ||
+ | )) | ||
+ | |||
+ | Синтаксис у ''$hex()'' точно такой же как и у ''$num()''. Все что нам нужно сделать, это поместить все выводимые номера трэков в функцию ''$hex()'' и немного изменить код для добавления нулей, потому что в шестнадцатеричной системе вторая цифра появляется у числа большего F, равному 15 в десятеричной системе. Соответственно нам нужно заменить нашу 9-ку во второй строке скрипта на 15. | ||
+ | |||
+ | Конечно же Вы можете отображать номера трэков так как Вам угодно, я же поклонник шестнадцатеричной системы, и буду использовать этот скрипт на всем протяжении этого пособия. | ||
~~DISCUSSION~~ | ~~DISCUSSION~~ |