Подписка на блог

В Телеграме помимо ссылок на заметки делюсь околодизайнерскими наблюдениями.

В Твиттере помимо ссылок на заметки пишу всякую чушь.

В Тумблере и Же-же есть автоматические трансляции. Если не работает, напишите мне: ilyabirman@ilyabirman.ru.

По РСС и Джейсон-фиду трансляции для автоматических читалок

Фубар 2000

Проигрыватель: Beta

Если вы ещё не скачали и не установили себе Foobar 2000, самое время сделать это. Скачать его можно прямо на главной странице официального сайта.

На данный момент там висит версия 0.9.4.1, именно она нам и нужна. Совместимость компонентов, входящих в мою «сборку», с другими версиями не то, что не гарантируется, а вообще не волнует меня совершенно.

Слово «сборка» я взял в кавычки, потому, что это не сборка в привычном смысле, когда люди закидывают в zip-архив все компоненты, которые им удалось найти, и думают, что это очень круто. Я доверяю вам, дорогие читатели, найти себе нужный мусор самим. Вот я себе, например, поставил foo_alarm — позволяет начать проигрывание в определённое время. Он, конечно, в «сборку» не входит. Кому надо — сами поставят себе такой же.

Результат моих трудов называется просто Проигрывателем. Проигрыватель — это комплект, состоящий из трёх ключевых элементов:
  • программа Foobar 2000, которая, собственно, является стержнем для компонентов, и которая умеет играть музыку и работать с плейлистами;
  • компонент foo_ui_gfx, который позволяет написать интерфейс полностью самому на языке программирования Lua;
  • скрипт birman.lua, который и реализует весь тот сказочный интерфейс, который я придумал.
Также в комплект входит набор из 5 скинов и компонент foo_notaskbar, который убирает кнопку Фубара с Панели задач.

Поскольку сегодня у нас бета, то в качестве дистрибутива я выкладываю урезанную версию, не включающую сам Фубар (именно поэтому я и предложил вам в самом начале скачать его). Теперь скачайте дистрибутив беты (231 КБ).

Дистрибутив — это zip-архив, внутри которого лежит две папки. Обе их нужно закинуть в папку установленного Фубара (предположительно в C:\Program Files\foobar2000). Папка components там есть и так, но нужно просто, чтобы файлы из моей components попали в вашу. Там как раз лежат foo_ui_gfx.dll и foo_notaskbar.dll. Папка birman-interface содержит скрипт birman.lua и пять картинок в формате BMP. Это скины. Посмотрев на эти, вы, возможно, догадаетесь, как легко делать свои. А если не догадаетесь, то к финальному релизу я это, скорее всего, опишу.

После установки Фубара вам надо будет зайти в его Preferences и там, где Display, в качестве интерфейса выбрать gfx_window. После этого Фубар придётся перезапустить. По Ctrl+P (или по правой кнопке к трей-иконке, Preferences) вы можете снова попасть в Preferences. В ветке gfx_window находятся настройки интерфейса. Там можно выбрать скин и разные другие параметры. Нажимайте Reload, чтобы изменения как-то проявились. Не забудьте также назначить себе удобные горячие клавиши в ветке Keyboard Shortcuts.

Наслаждайтесь (если что-то этому мешает, пишите в комментарии).

Update: Дописал про то, что после изменения настроек gfx_window нужно нажимать Reload.
 31 комментарий    19   2006   Проигрыватель   Фубар 2000

Проигрыватель: отображение информации

Для своего фантастического проигрывателя я в порядке развлечения нарисовал несколько скинов.

Пять скинов

Каждый скин по-своему раскрашивает и сам плейер, и окно плейлиста:

Плейлист

Плейлист — отдельное окно, однако при перетаскивании оно «примагничивается» к окну плейера и к краям экрана. По правой кнопке в любой части рамки окна вываливается системное меню Фубара, где можно добавить файлы в плейлист. В отличие от винамповского, оно не состоит из ста тысяч пунктов.

Формат отображения в строчках плейлиста описывается на Tagz в настройках Фубара.

В самом плейере есть два поля, в которых можно что-либо отображать — левое и правое. В левом по умолчанию отображается Исполнитель — Трек, а в правом — вся информация о времени. В настройках моего интерфейса можно, также используя Tagz, переопределить содержимое этих двух полей.

Содержимое окна плейера

Правое поле также используется для отображения «временной» информации. Например, когда вы крутите колесо мышки, там появляется строчка «Volume: 83%». Когда перестаёте — она через какое-то время исчезает. Через какое именно — можно настроить, но интерфейса для этого нет, так как это нафиг не нужно. В исходнике это называется temp_display_delay = 1500.

В режиме паузы плейер мигает обоими полями. Зачем мигать во время паузы? Кассетники мигали потому, что в режиме паузы плёнка неравномерно растягивалась, что было для неё не полезно. Нужно было как-то привлечь внимание пользователя к тому, что пауза — функция для кратковременного использования, и оставлять кассетник в таком положении не надо. На CD-проигрывателях смысла в этом стало несколько меньше. От вращения диск не изнашивается. Однако напомнить человеку, что он там крутится, всё же, не повредит. Может быть, диск крутится зря уже вторую неделю, остановите его. На компьютере смысл, кажется, и вовсе исчез. С точки зрения всей механики компьютера вообще ничего не меняется в режиме паузы. Однако есть всё-таки три момента:
  • есть некая привычка, что в режиме паузы оно должно мигать, это почему-то кажется естественным, несмотря на то, что все объективные причины, по которым это придумывалось, более не играют роли.
  • паузу я обычно нажимаю когда отвлекаюсь на что-то, чему музыка мешает, например, на телефонный звонок; мигание напомнит мне, что музыку надо включить обратно;
  • когда файл на паузе, он открыт; его нельзя переименовать, перетащить или удалить;
Поэтому, решил я, пусть будет. Но если вы решили иначе, к вашим услугам строчки: paused_blink = true и paused_blink_delay = 750.

Если в режиме паузы вы зацепились за бегунок, и начали его тащить куда-то в поисках некоторой секунды (Cue Search), то мигание на это время прекращается, чтобы вы могли смотреть на поле с секундами.

Выложу уже буквально совсем очень скоро. Осталось только заставить жесты работать и в плейлисте тоже и ещё несколько мелких багов исправить.

Проигрыватель: управление мышью

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

В Винаме использование этого многообразия возможностей находится в зачаточном состоянии. Там можно менять громкость, вращая колёсико, а если колёсико нажать и вращать, то это работает как перемотка. Последнее, кстати, спасает от дурацкого зацеплятельного поведения бегунка, из-за которого невозможно сдвинуться на чуть-чуть назад или вперёд. Даблклик переключает винамп из маленького режима в большой. По правой кнопке дают контекстное меню. Левой кнопкой можно перемещать окно или изменять его размеры, если зацепить за правый край. Кажется, это всё.

Начнём с изменения размеров окна. Поскольку предполагается размещение окна в правом углу заголовка развёрнутого окна, то вряд ли кто-то захочет изменять его размеры, двигая туда-сюда правый край окна. Правый край раз и навсегда упирается так, чтобы оставалось место под кнопки управления окном. А вот размер мы будем менять за левый край:

Изменение размеров окна

Теперь займёмся колёсиком. Для начала, конечно, сделаем, чтобы с его помощью можно было как в Винампе менять громкость, однако шаг сделаем настраиваемым. Далее, держать колесо нажатым и при этом вращать — довольно трудно: периодически отпускаешь его, и иногда получается, что, не желая того, меняешь громкость. Сначала я повесил туда выбор трека. Чаще всего не нужно прыгать сразу на 7 треков вперёд, а нужно только либо просто на предыдущий, либо просто на следующий. А прокрутить нажатое колесо на 1 шаг совсем не трудно. Однако в таком варианте я несколько раз сбился, потому, что уже привык в Винампе к тому, что это перемотка. В результате остановился на таком варианте:

Выбор действия при нажатии и вращении колеса

Каждый сможет выбрать то, то ему удобнее. Обратите внимание, что для перемотки настраивается скорость. Можно выбрать настройку громкости, и тогда шаг тоже настраивается, причём, независимо от шага в случае вращения ненажатого колеса — это позволяет сделать, например, чтобы при нажатом колесе громкость менялась более стремительно.

Опера нам подарила гениальную комбинацию: вращение скроллинга при нажатой правой кпонке. Этой находкой мы воспользуемся для нормальной организации перемотки. Нажал правую кнопку — и крути колесо сколько душе угодно в любую сторону. Естественно, скорость перемотки сделаем настраиваемой.

Cделаем настраиваемым и даблклик:

Выбор действия по даблклику

Мне удобнее всего вешать на даблклик плей/паузу, но если вы повесите что-то другое, у вас по-прежнему есть выбор того, как именно сделать плей/паузу:

Выбор способа приостановки/продолжения воспроизведения

Если вы повесите паузу на правую кнопку в бегунке, то контекстное меню, конечно, вываливаться на нём не будет. Однако вся остальная площадь плейера в вашем распоряжении для этих целей.

Ладно, как же нам перейти на предыдущий или следующий трек, если на нажатие-и-поворот колеса мы повесили какое-то другое действие? Очевидно, здесь мы воспользуемся жестами. (Вы не пользуетесь жестами в Опере? Тогда мы идём к вам!) Жест влево — предыдущий трек, жест вправо — следующий трек. Легко, логично, и, главное, не требует прицеливания к чему бы то ни было.

Кстати, если на вашей мыши есть кнопки Back и Forward по бокам, то вот вам ещё один способ — они работают как Prev/Next без дополнительных ухищрений.

Осталось лишь определиться с тем, как вызвать плейлист, если на даблклик вы повесили что-то другое. Что ж пускай это будет жест вниз. А жест вверх мы не используем вообще, так как при выбранном расположении плейера выполнить его довольно трудно.

Кое-какие тонкие настройки, связанные с мышью, можно также найти в исходнике интерфейса, в самых первых строчках:
  • snap_gap = 10 — за сколько пикселей до края экрана плейер будет к нему пытаться прилипнуть;
  • gesture_insensitivity = 10 — на сколько пикселей можно сдвинуть мышь с нажатой правой кнопкой, чтобы это не считалось жестом;
  • playlist_scroll_step = 1 — на сколько позиций будет скроллиться плейлист за один шаг поворота колеса;
  • o_gestures = true — жесты здесь можно вообще отключить, если они вам не нужны или, например, если вы пользуетесь каким-нибудь полномасштабным жестикулятором (вроде StrokeIt) и хотите настроить их в нём.
Подведём итоги:

Управление мышью

Пять минут привыкания — и более непонятно, как без этого жить.

В следующей заметке — про отображение, скины и плейлист.

Проигрыватель: Sneak Peek

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

В Windows есть место, которое всегда пропадает понапрасну. Можно ругать Microsoft за это, а можно воспользоваться этим промахом для своих целей. Это, конечно, правый угол заголовка окна, развёрнутого на весь экран.

Место, которое мы займём
Масштаб 1:2

Обратите внимание, у окна довольно длинный заголовок, и это разрешение 1024×768. А я вот, например, работаю в 1920×1440. То есть, места дополна.

В Винампе использовался убогий шрифт, где все буквы были заглавными, а кириллицы не было вообще. Мы будем использовать шрифт, который в Windows выбран для использования в заголовках окон. В моём случае это Segoe UI, 9, Bold.

Поскольку акцент делается на управление с клавиатуры, никаких кнопочек на плейере размещать не будем. Вместо этого укажем исполнителя и название трека, отделив их нормальным тире, и отобразим всю информацию о времени.

Как выглядит проигрыватель
Масштаб 2:3

Бегунок для «прокрутки» трека прижат к верхнему краю плейера, поэтому имеет виртуально бесконечную высоту, а значит, в него не надо целиться. Длина полоски бегунка равняется длине плейера. В винампе бегунок был чуть больше, однако он находился в середине окна, из-за чего я постоянно промахивался по нему. Кстати, он бессмысленно тратил место.

Ещё одна мелочь: в Винампе, помимо того, что можно было ткнуть на полоску бегунка, чтобы сразу прыгнуть в нужное место, за бегунок можно было ещё и «зацепиться», чтобы перетащить его куда-то и бросить. В реальной жизни вторая фича только мешала. Тыкаешь куда-то, потом тыкаешь на 5 пикселей левее, — ничего не происходит, а ты хотел сместиться на чуточку назад. А всё потому, что Винамп думает, что ты зацепился за бегунок, просто за другую его точку. У меня эта проблема отсутствует, так как Фубар не позволяет зацепиться за бегунок; бегунок просто следует за мышкой, когда левая кнопка нажата, оказываясь своим центром точно под курсором.

Прыгание по треку — единственная вещь, которую мышью делать удобнее, чем клавиатурой. Именно поэтому единственный элемент управления на плейере — бегунок. И всё же, мышью можно не только прыгать по треку. Можно делать и всё остальное. Но об управлении мышью — в следующей заметке.

О прослушивании музыки на компьютере

Расскажу немного о том, как я организовываю и слушаю музыку.

Вся музыка лежит в папке F:\Music. Вообще, я не делю музыку по стилям, поскольку это деление было бы крайне непредсказуемым. Сортировка исполнителей по алфавиту меня вполне устраивает (слова «The», «A» и «DJ» в названиях исполнителей перенесены в конец). Название папки имеет вид Исполнитель — Альбом (Год), либо Исполнитель (unsorted), если в папке лежит просто свалка треков.

Выглядит это так:

Beat Hackers (unsorted)
Beatles, The — 1 (2000)
Beautiful Things Project, The — Anita Love 12’’ (2006)

Сборники всё-таки приходится делить по стилям, поскольку их названия обычно я не помню и они всё равно ни о чём не говорят. И в случае со сбониками стиль, как правило, всё-таки имеет некоторый смысл. Соответственно, сборники лежат в подпапках типа F:\Music\(Psytrance) например. Название папки со сборником имеет вид (Compilation) Лейбл — Название (Год). Если на сборнике есть какой-то выдающийся трек, то на него делается ещё один hard link в папке Исполнитель (unsorted), поэтому помнить, на каком именно сборнике лежал этот выдающийся трек, не надо.

Процедура прослушивания музыки не является настолько торжественной, чтобы я готовился к ней, специально составляя плейлист. Составление плейлиста может быть полезно, если ты хочешь включить что-то и уйти лечь на диван, книжку почитать. Но я так не делаю, я тут сижу.

Понятие «плейлист» я признаю лишь в том смысле, что я могу: а) закинуть в плейер альбом целиком; б) выбрать, какой трек будет играть после того, как доиграет текущий (enqueue). Плейлист как интерфейсный элемент мне не нужен ни для чего (кроме, пожалуй, ставшего возможным в Фубаре массового изменения тегов). А от словосочетаний типа «список плейлистов» или «альбом-лист» или «медиабиблиотека» меня вообще тошнит. Вот Проводник, выбирай что хочешь и запускай. Внятный шрифт, всё чёрным по белому, комбинации клавиш стандартные — красота. Зачем изобретать велосипед, да ещё такой громоздкий? На этот вопрос ни один из пользователей всей этой шелухи внятного ответа мне не дал.

Больше всего меня поражает вопрос: «А как без плейлиста, неужели ты после каждого трека идёшь заново в Проводник и выбираешь следующий». Звучит так, как будто «пойти в Проводник» — это что-то вроде «переплыть Атлантику на катамаране». Ребята, мне не надо ходить в проводник, вот он открыт, вот он в альт-табе, а вот он я — сижу за комьютером, никуда не убегал, и вот я нажимаю на файл — и он играет. Если вы так чем-то заняты, что вам даже некогда трек поставить, то какого чёрта вы вообще сотрясаете воздух музыкой? Выключите её. По-моему, процедура составления плейлиста требует намного больше времени, чем все добавления-файлов-по-одному вместе взятые, а главное, её эффективность близка к нулю: откуда я могу знать сейчас, что я захочу слушать через 15 минут?

От самого плейера мне нужна лишь полная управляемость с клавиатуры и отображение информации о текущем играющем треке на видном месте. Моя раскладка клавиатуры — следующая:
  1. Pause (Break) = Play/Pause (удивительно, как мало людей додумались до этого, а ведь эта кнопка вообще ничем не занята и находится в очень удобном месте, чтобы нажать на неё в любой момент).
  2. Email, WWW = Prev, Next (и «левые» кнопки могут на что-то сгодиться!).
  3. Alt+Win+стрелки = громкость и перемотка.
  4. Alt+Win+ZXCVB = Prev, Play, Play/Pause, Stop, Next (повторяет стандартный порядок кнопок Винампа).
  5. Alt+Win+T = копировать название текущего трека в буфер обмена.
Что касается отображения информации, то в винампе меня просто фантастически раздражало то, что нужно выбирать, хочешь ли ты видеть время с начала трека или до его конца. Я, чёрт возьми, хочу видеть и то и другое, а вот кнопки Play, Stop, Pause, Shuffle, Repeat, изменения, простите, цвета, выбора типа спектрума — совершенно не хочу. Зачем вы тратите мои пиксели понапрасну?

Свой интерфейс я строил именно из этих соображений: ни одного пикселя не может быть потрачено зря.

Впрочем, иногда бывает удобно всё-таки управлять плейером при помощи мыши — ну мало ли, левой рукой ты ковыряешь, скажем, в носу, и именно в этот момент решил включить следующий трек, а правая рука — на мыши. Поэтому возможность управления мышью я всё-таки сделал. Да, ну и конечно же бегунок для навигации по треку я тоже сделал, потому, что это то, чем действительно удобнее управлять с помощью мыши, чем с помощью клавиатуры. А плейлист находится в отдельном от плейера окне и включается раз в году, если вдруг понадобился.
 17 комментариев    25   2006   музыка   софт   Фубар 2000

Foobar 2000: выбор сделан

После того, как я сделал для себя идеальный пользовательский интерфейс и освоил такую фичу, как Masstagger, у меня не хватает фантазии, чтобы придумать причину, которая заставила бы меня вернуться к Винампу.

Некоторые моменты в плейере порадовали с первой минуты, некоторые — спустя пару дней использования.

Tagz

Tagz — встроенный «язык программирования» для форматирования любых строк на базе любой доступной плейеру информации о треке. На Tagz описывается как выглядит заголовок окна плейра, как выглядит одна строчка в плейлисте, что копируется в буфер обмена по Ctrl+C, что отображается в статус-строке.

Наконец-то можно сделать, чтобы между названием исполнителя и названием трека отображалось тире, а не дефис.

Вот так я формирую текст для Ctrl+C:

[%artist% — ]%title%[ '('“%album%”[, %date%]')']

А вот так — для строчки плейлиста:


$rgb(128,128,128)
%list_index%. 
$rgb()
[%artist% — ]%title%[ 
$rgb(128,128,128)
'('
[“%album%”[, %date%]]]
')'
$tab()
$if(
  %playback_time%,
  %playback_time% '('–%playback_time_remaining%')' of ,
)%length%

Masstagger

Ну, во-первых скажу, что, в отличие от Винампа, Фубар позволяет выделить сразу несколько треков и прописать для них одинаковые теги за один заход. Например, нужно во всём альбоме прописать год — «2006» — взял, да прописал.

А во-вторых, там есть Masstagger.

Masstagger — сказочная утилита, позволяющая по-быстрому формировать теги по разным правилам. Например, в альбоме Wizzy Noise — Cyclotron у меня все теги были прописаны маленькими буквами. То есть, Artist = wizzy noise, Album = cyclotron, Title = radius, например. Конечно, выделить все файлы и исправить им Artist и Album можно и руками, но вот править название каждого трека — лень. Не проблема, делаем в Masstagger’е правило Format TITLE as $caps(%title%) и нажимаем «Run». Готово.

А в одном альбоме у меня теги не были прописаны вообще, но зато файлы были названы по-правильному: 01 Artist — Title.mp3. Что ж, делаем правило Guess values from filename using format %number% %artist% — %title%. «Run» — и готово.

Воспроизведение Cue-файлов

Бывает, что некоторые альбомы идут в виде единого MP3-файла без разбиения на треки, а рядом лежит Cue-файл, в котором написано, с какой секунды какой трек начинается. Чтобы разбить такую MP3’шку на отдельные треки, мне приходилось использовать mp3DirectCut. Решил попробовать бросить таким Cue-файлом в Фубар — он без проблем добавил десяток треков в плейлист.

Преобразования и корректировки форматов

По правой кнопке на любом треке есть пункт меню Convert, который позволяет, не ходя далеко, преобразовать MP3 в Ogg или WMA в Wav. Иногда попадаются какие-то глючные MP3’шки, в которых время звучания плейер определяет некорректно и потом оно всё время меняется при воспроизведении. Что ж, жмём по такому треку правой кнопкой, Utils —> Fix VBR MP3 Header — и файл здоров.

Маленькие радости

Ну, и кроме этого есть ещё много всяких мелочей:
  • детальная настройка клавиатуры;
  • полная поддержка Unicode (русские названия треков и умляут в The Köln Concert его не пугают);
  • настоящее gapless воспроизведение (когда слушаешь микс, разбитый на несколько файлов, переходов с файла на файл вообще не слышно);
  • если ты вышел из фубара на середине песни, то когда ты в него зайдёшь снова, он будет играть с её того же места;
  • нашёл плагин Alarm, который позволяет использовать плейер в качестве будильника (я компьютер не выключаю, поэтому очень удобно).
А свой волшебный интерфейс я надеюсь на днях довести до ума и выложить на сайте.
 25 комментариев    31   2006   Фубар 2000

Foobar 2000

Интересно, а есть ли среди наших читателей поклонники (или хотя бы просто пользователи) Foobar 2000? Сочетание диких возможностей «кастомизации» и полного отсутствия хоть какой-нибудь по ним документации приводит к унынию: ты понимаешь, что из этого можно сделать самый лучший аудиоплейер в мире, но не понимаешь, как!
 14 комментариев    13   2006   музыка   софт   Фубар 2000