![]() |
Библиотека Интернет Индустрии I2R.ru |
||
![]() ![]() |
Гибкий WinAmpЧто такое WinAmp, я думаю, никому объяснять не надо. Сейчас он есть практически на любом компьютере, иногда даже там, где нет звуковой карты :-). И человек, который ничего о нем не слышал, можно сказать, отстал от жизни. Сколько их, пользователей этой чудо-программульки, страшно себе и представить. А сколько из них таких, которые пытались подойти к вопросу по-хозяйски и что-нибудь с ней сделать? М-м-м?..
Итак, что можно сделать с WinAmp'ом? Чтобы разобраться в этом вопросе идем на http://www.winamp.com/ и читаем. Список возможностей поражает богатством и разнообразием (да-да, не смейтесь!): • Создать скин. • Написать плагин. • Написать программу, которая будет манипулировать проигрывателем во время его работы. Последний пункт включает в себя запуск winamp.exe с определенными параметрами командной строки и управление уже запущенным проигрывателем с помощью посылаемых ему виндовых сообщений. В этой статье мы займемся скинами. Скины, как известно, представлены набором txt-, bmp- и cur-файлов. Текстовых файлов должно быть 3, графических — 16, курсоров — 28. Их может быть и меньше, просто в таком случае элементы, за которые «отвечают» отсутствующие файлы, будут заменены соответствующими из «скина по умолчанию». Особенно влияют на внешний вид окна проигрывателя bmp-файлы, поэтому начнем именно с них. В этих файлах хранятся различные фрагменты WinAmp'овых окон, причем в каждом файле может быть один или несколько таких фрагментов. При запуске или смене скина WinAmp считывает файл, описывающий структуру привязки этих фрагментов к условным координатам интерфейса — вдаваться в подробности я не буду, исчерпывающую инфу можно найти на winamp.com в разделе NSDN (Nullsoft Development Network). Все фрагменты прямоугольные и отображаются на экране в том виде, в каком они есть, что немного неудобно. Ведь гораздо проще нарисовать круглую кнопку на однотонном фоне, который посчитается прозрачным и будет убран, чем рисовать эту кнопку на фоне прямоугольного фрагмента, который нужно взять из файла, изображающего то, что находится под этой кнопкой. Но это, по-моему, не очень пугает создателей скинов. В отношении скиновых bmp-файлов у WinAmp'а есть еще одна особенность: при отсутствии некоторых из них программа заменяет неописанные элементы фрагментами из других файлов. Так, например, при отсутствии balance.bmp регулятор баланса рисуется с использованием фрагментов из файла volume.bmp, изображающего регулятор громкости. Но у этой полезной функции есть и недостаток: если я, например, хочу регулятор баланса оставить из «скина по умолчанию», а регулятор громкости нарисовать свой, то придется качать с winamp.com «скин по умолчанию» или мастырить регулятор баланса методом «PrintScreen» :-). Теперь рассмотрим основные принципы хранения фрагментов. Вот они: 1) Заголовки окон хранятся в двух положениях: «активном» и «неактивном». 2) Переключатели хранятся в четырех положениях: «выключено и не нажато», «выключено и нажато», «включено и не нажато» и «включено и нажато». 3) Регуляторы громкости, баланса и тембра (в эквалайзере) хранятся в виде множества прямоугольников, описывающих фон в разных положениях ползунка и непосредственно сам ползунок в двух положениях: «ухваченном» и свободном. 4) PosBar (или SeekBar, кому как удобно) хранится в виде фона и двух ползунков — «ухваченного» и «неухваченного» — в файле posbar.bmp. 5) И где-нибудь, конечно, обязательно хранится фон ко всему этому хозяйству — основа окна. Это файлы main.bmp, eqmain.bmp, pledit.bmp, mb.bmp, avs.bmp. 6) Два файла — nums_ex.bmp и text.bmp — хранят цифры для отображения elapsed/remaining и символы внутреннего шрифта соответственно. 7) Основы окон, которые могут менять свой размер (playlist, minibrowser), хранятся в разобранном в виде: четыре угла, находящаяся между ними «серединка» и фрагменты, вставляемые между краями и «серединкой» при растяжении. И еще одна интересная особенность: main window описывается одиннадцатью файлами, эквалайзер — двумя, остальные окна — по одному. А ведь main window не намного «пестрее» эквалайзера! На мой взгляд, ему бы хватило файлов трех-четырех. А теперь немного о багах. Вы думали, WinAmp их лишен? Нет, Закон о Вездесущности Багов не предусматривает исключений! И программисты из Nullsoft тоже совершают ошибки. Программа криво считывает некоторые фрагменты из bmp-файлов. Первое, что я заметил, это неправильное считывание из файла titlebar.bmp активного и неактивного свернутого в полоску main window. У них одна общая строка пикселей. Видите на рис. 1 две черные точки, которые на активном окне снизу, а на неактивном — сверху? Вторым замеченным мною багом было неправильное считывание «пустой ячейки» из nums_ex.bmp. Это заметно при нажатой паузе, когда elapsed/remaining «моргает» (рис. 2). Последняя пакость относится к окну эквалайзера. При нажатии кнопки, сворачивающей его в полосочку, изображение этой кнопки меняется на изображение кнопки, разворачивающей эквалайзер из этого состояний — изображение же, которое там должно появиться в качестве нажатой кнопки сворачивания, по-моему, вообще не предусмотрено (рис. 3). Где его надо рисовать? Правда, может, это вовсе и не баги... так и должно быть? Кто его знает. Разобравшись с графическими, давайте займемся текстовыми файлами. Их в составе
скина, как уже упоминалось выше, должно быть три. Первый называется viscolor.txt
и описывает цвета spectrum analyzer'а и oscilliscope'а. Он состоит из
двадцати четырех строк, каждая из которых содержит информацию о цвете соответствующего
ей фрагмента экрана визуализации. Эта информация о цвете представляет собой
три числа, записанные через запятую и определяющие количество красного, зеленого
и синего компонентов цвета соответственно. Числа находятся в диапазоне [0;255].
Все, что написано в строке после чисел, WinAmp'ом • 1 строка — цвет фона; • 2 строка — цвет «крапинок» фона; • 3-18 строки — цвета spectrum analyzer'а в зависимости от интенсивности частотной полосы; • 19-23 — цвета oscilliscop’а, аналогично; • 24 строка — цвет пиков, остающихся после частотного всплеска. Файл pledit.txt тоже описывает цвета: цвета playlist'а и minibrowser'а. Он имеет тот же формат, что и виндовые ini-файлы. Цвета в нем, в отличие от viscilor.txt, задаются шестнадцатеричным значением RGB, как в HTML. Вот как он выглядит (пример взят с winamp.com): Последний файл — region.txt — позволяет создавать прозрачные области в главном окне и окне эквалайзера. Он тоже имеет формат виндовых ini. Состоит из четырех секций: [Normal] — задает регионы для main window; [WindowShade] — для свернутого в полосочку main window (режим window shade); [Equalizer] — для главного окна эквалайзера; [EqualizerWS] — для свернутого эквалайзера. Внутри каждой секции с помощью переменных NumPoints и PointList описываются многоугольники, которые должны быть нарисованы. Для наглядности привожу пример: Разберемся, что здесь к чему. NumPoints задает количество вершин в каждом из
многоугольников: в данном примере два многоугольника по четыре вершины в каждом.
Переменная PointList содержит координаты вершин всех этих многоугольников. В
данном примере описывается восемь вершин, по четыре на каждый из двух многоугольников.
Координаты вершин отсчитываются от левого верхнего угла, то есть точка (0;0)
находится в левом верхнем углу, ось X О cur-файлах, пожалуй, говорить нечего: с ними и так все ясно. Они заменяют встроенные в WinAmp курсоры. Все материалы для этой статьи взяты с winamp.com и сдобрены собственным опытом. За всеми деталями скиноделания обращайтесь на вышеупомянутый сайт, только там все на английском . Ну, а если захотите скачать скин, запечатленный на скриншотах, добро пожаловать на мой сайт! |
|
![]() |
![]() |
2000-2008 г. Все авторские права соблюдены. |
![]() |
![]() |
![]() |
![]() |