Это старая версия документа!
Добавление "Now Playing" анимации
До сих пор текущая проигрываемая композиция отображалась у нас только в заголовке окна и в статусной строке. В этой главе мы добавим специальный индикатор, включающий в себя небольшую анимацию в плэйлисте.
Основной индикатор в столбце Track
Первым компонентом, который будет указывать на текущую композицию, будет другой цвет столбца Track. Новый цвет фона хранится в переменной cBgPlay
, это темно-серый. Естественно он плохо сочетается с черным цветом текста (определенным по умолчанию), поэтому мы определили новый цвет текста, белый, в cTxtPlay
.
Для того чтобы применить новые цвета, перейдите во вкладку Style столбца Track и добавьте эти строки в конец существующего скрипта.
<pre><font color="#808080"><i>[...]</i></font></br>
</br>
$if(%isplaying%,</br>
$set_style(text,$get_global(cTxtPlay),$get_global(cTxtPlay))</br>
$set_style(back,$get_global(cBgPlay),$get_global(cBgPlay))</br>
)
</pre>
Поле %isplaying%
истинно только если композиция в данный момент проигрывается, в противном случае это поле возвращает «ложь». Соответственно $if
в этом скрипте выполняется только для проигрываемой песни. Для того чтобы наш индикатор не исчез при выделении строки, мы зададим отдельные цвета, cTxtPlay
и cBgPlay
, для обычного режима и для выделения.
Единственная проблема - сборники. Их красный текст в именах исполнителей тяжело читается на темно-сером фоне. Мы решили это путем определения новой цветовой переменной cTxtVAPlay
, используя цвет фона выделенного трэка. Нельзя сказать, что это решение на 100% оптимально, но мне просто лень задавать еще один оттенок красного
Естесттвенно эта переменная должна быть использована в скрипте. Лучше всего это сделать во вкладке Display столбца Track, в которой мы уже сделали отображение имен исполнителей красным цветом.
<pre>
<font color="#808080">$if($and($get_global(isAlbum),$meta(album artist)),</br>
</br></font>
$if(%isplaying%,</br>
$get_global(cTxtVAPlay),</br>
<font color="#808080">$ifequal(%tracknumber%,1,$get_global(cTxtVA1),$get_global(cTxtVA))</br>
)</br>
</br>
[$meta(artist)' - ']$rgb()</br>
)</br>
</br>
%title%</font>
</pre>
Мы используем cTxtVAPlay
в качестве цвета в случае если трэк проигрывается в данный момент, в противном случае будут использоваться цвета определенные в предыдущей главе.
Анимированые индикаторы
«Now-playing» анимация состоит из двух частей. Первая часть касается столбца Time, в нем мы хотим показывать оставшееся время проигрывания песни. Вкладка Display это то самое место, где мы будем это делать.
<pre>
$if(%_time_remaining%,</br>
'['%_time_remaining%']',</br>
<font color="#808080">$if2(%_length%,'n/a')</font></br>
)
</pre>
Мы проверяем наличие поля %_time_remaining%
, содержащего отсавшееся время проигрывания, и отображаем значение этого поля в квадратных скобках. Использование одинарных кавычек вокруг этих скобок обязательно, ибо этих кавычек Foobar2000 воспримет скобки как короткую форму $if()
, а не как простой текст. Да, и не забудьте поставить закрывающую круглую скобку в самом конце скрипта.
Причина того, что в этом скрипте мы не используем %isplaying%
для определения проигрываемой песни кроется в том, что существует вероятность встречи с такими файлами, для которых Foobar2000 не сможет определить их длину. В этом случаем поле %_time_remaining%
так же не сможет быть определено, притом, что поле %isplaying%
будет работать без проблем. Поэтому мы оберегаем себя от проблемы с такими файлами, (достаточно редкими, но тем не менее) используя поле %_time_remaining%
в качестве условия.
Так %_time_remaining%
обновляется каждую секунду, так же как и отображение всего плэйлиста, то этот скрипт показывает непрерывное уменьшение оставшееся время до нуля. И это первая часть анимации.
Вторая часть располагается в столбце Tracknumber. Здесь мы собираемся отображать четыре закрывающих скобки ))))
, которые будут заменяться одна за другой, слева направо, открывающимися скобками 1)))' (использование одиночных кавычек в этом случае так же обязательно). Остальная часть анимация контроллируется выражением $select()
.
<html><pre>
<font color=«#808080»>$ifequal($put(foo,$mod(%_time_elapsed_seconds%,8)),0,</br>
'))))',</font></br>
$select($get(foo),</br>
$get_global(cTxtDim)'('$rgb()')))',</br>
$get_global(cTxtDim)'2)',</br>
$get_global(cTxtDim)'3)'$get_global(cTxtDim)'4))'$get_global(cTxtDim)'('</br>
)</br>
<font color=«#808080»>)</font>
</pre></html>
Такая конструкция из двух частей необходима там потому что мы не можем обработать 0 используя $select()
.
Вызов $get(foo)
возвращает сохраненный результат операции $mod()
и использует его в качестве условия в $select()
. Дальше все очень просто. Мы циклично переходим от 1-й стадии к 7-й, шаг за шагом изменяя анимацию. Для всех открывающих скобок мы устанавливаем другой (светло-серый) цвет, используя $get_global(cTxtDim)
и сбрасываем его к значению по умолчанию для закрывающих скобок, используя $rgb()
.
Если Вы находите это скрипт слишком сложным для понимания, в его законченном виде, то уберите из него код по изменению цвета, и Вам станет понятней.
Теперь включим наше творение в уже существующий скрипт, добавив его в конструкцию $if(%isplaying%,,)
. Вот законченный скрипт (и не забудьте добавить новую закрывающую скобку в самом конце скрипта)
<html><pre>
$if(%isplaying%
,
$ifequal($put(foo,$mod(%_time_elapsed_seconds%,8)),0,
'))))',
$select($get(foo),
$get_global(cTxtDim)'('$rgb()')))',
$get_global(cTxtDim)'5)',
$get_global(cTxtDim)'6)'$get_global(cTxtDim)'7))'$get_global(cTxtDim)'('
))
,
<font color=«#808080»>$if($get_global(isAlbum),
$ifgreater(%tracknumber%,15,
$hex(%tracknumber%,1),
$get_global(cTxtDim)'0'$rgb()$hex(%tracknumber%,1)
))
)</font>
</pre></html>
Конечно же, Вы можете использовать любой понравившийся Вам символ для анимации. Воспользуйтесь стандартной программой Таблица Символов (Character map) для того чтобы получить юникодное число, соответствующее этому символу (оно отображается в строке статуса), а затем переведите его из шестнадцатеричного в десятеричный формат, используя инженерный режим Калькулятора. Полученное десятичное число Вы можете использовать в Tagz в функции $char()
, например $char(32)
это пробел, а $char(9835)
это маленькая нотка. Только имейте в виду, что набор доступных символов зависит от шрифта, к примеру Franklin Gothic Medium предоставляет меньше символов чем Lucida Sans Unicode.
===== Результат =====
Ну вот, с готовой анимацией наш дизайн вполне пригоден для использования, конечно некоторые небольшие кусочки все еще не сделаны, но скриншот этой стадии уже совсем не отличается от законченного дизайна.
В следующей главе мы займемся доработкой мелочей. Но, тем не менее, наш плэйлист уже полностью готов.