AIMP Forum

AIMP для Windows => Skin Editor / Skin Engine => Вопросы => Topic started by: Black_AVP on December 11, 2018, 15:38:24

Title: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 11, 2018, 15:38:24
Много полезных вещей уже утонуло в теме [FAQ] Вопросы по работе в AIMP SkinEditor v3.50+ (https://www.aimp.ru/forum/index.php?topic=27831.0), да и в других тоже, порой трудно что-либо найти, а новичкам даже подобрать ключевые слова для поиска. В справке по редактору скинов тоже пока много чего нет, да и невозможно все осветить нюансы работы над скином, равно, как и примеры скриптов на все случаю жизни.
Предлагаю выкладывать сюда полезные идеи и нетривиальные решения каких-либо проблем. Свелые головы на форуме ещё не перевелись.
Но вопросы, всё же, лучше задавать в вышеупомянутой теме, дабы и эта тема не превратилась в свалку.

Как с помощью слайдеров изменять раздельно оттенок, насыщенность и прозрачность элементов (https://www.aimp.ru/forum/index.php?topic=61370.msg379236#msg379236)
Простейшая реализация ColorPicker-а (https://www.aimp.ru/forum/index.php?topic=61370.msg379237#msg379237)
Изменение параметров шрифтов (https://www.aimp.ru/forum/index.php?topic=61370.msg379239#msg379239)
Как сбросить все полосы эквалайзера в 0 dB нажатием кнопки (https://www.aimp.ru/forum/index.php?topic=61370.msg379241#msg379241)
Как сбросить все эффекты DSP (https://www.aimp.ru/forum/index.php?topic=61370.msg379248#msg379248)
Эффект циклического изменения цвета элементов (https://www.aimp.ru/forum/index.php?topic=61370.msg379242#msg379242)
Работа с провайдером prvPlayerState (https://www.aimp.ru/forum/index.php?topic=61370.msg379245#msg379245)
Обработка событий, ScriptableEventHandler (https://www.aimp.ru/forum/index.php?topic=61370.msg379395#msg379395)
Текстовый ввод параметра (https://www.aimp.ru/forum/index.php?topic=61370.msg379461#msg379461)
Анимация динамиков на основе TASEAnimator (AIMP 4.6+) (https://www.aimp.ru/forum/index.php?topic=61370.msg386428#msg386428)
Скриптовая реализация Track Preview и Repeat AB (https://www.aimp.ru/forum/index.php?topic=61370.msg386775#msg386775)
Color Picker a la Photoshop (https://www.aimp.ru/forum/index.php?topic=61370.msg386921#msg386921)
Визуализация функции Repeat AB на основе Bliss Lite (https://www.aimp.ru/forum/index.php?topic=61370.msg386922#msg386922)
Bliss Compact with Track Preview (https://www.aimp.ru/forum/index.php?topic=61370.msg386946#msg386946)
Модификация на "Визуализация функции Repeat AB" (https://www.aimp.ru/forum/index.php?topic=61370.msg387202#msg387202)
Переключение темы по расписанию (https://www.aimp.ru/forum/index.php?topic=61370.msg387247#msg387247)
Автоперключение тем в стандартном Bliss4k по расписанию (https://www.aimp.ru/forum/index.php?topic=61370.msg387274#msg387274)
Ввод числовых параметров перемещением мыши (https://www.aimp.ru/forum/index.php?topic=61370.msg387333#msg387333)
Пример совместного использования LayoutTabbedGroup и TabControl (https://www.aimp.ru/forum/index.php?topic=61370.msg390890#msg390890)
Пример использования гиперссылок в скине (https://www.aimp.ru/forum/index.php?topic=61370.msg391306#msg391306)
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 11, 2018, 15:40:02
Пример работы со цветом. Как с помощью слайдеров изменять раздельно оттенок, насыщенность и прозрачность элементов.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 11, 2018, 15:41:58
Простейшая реализация ColorPicker-а. Может пригодиться в диалогах настройки собственного скина.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 11, 2018, 15:44:44
Многие испытывают трудности с изменением параметров шрифтов. Пример для шрифтов в плейлисте:
Code: [Select]
procedure Execute(var State: Integer);
var
  PL: TComponent;
 
begin 
  PL:= FindObject('Playlist');
  PL.Set('Resources.ItemLine1Fonts.Normal.Name', 'Arial');
  PL.Set('Resources.ItemLine1Fonts.Normal.Color', $FF0000);
  PL.Set('Resources.ItemLine1Fonts.Normal.Height', 14);
  PL.Set('Resources.ItemLine1Fonts.Normal.Style', '[fsBold, fsItalic]');
end;

Все параметры шрифтов доступны из скриптов, надо только правильно к ним обращаться.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 11, 2018, 15:48:20
Как сбросить все полосы эквалайзера в 0 dB нажатием кнопки.
Code: [Select]
procedure Execute(var State: Integer);
var
  N: Integer;
 
begin
  with FindObject('prvEqualizer') do
    for N:= 1 to 18 do
      Set('BandValue' + IntToStr(N), 0);
end;

Кнопка должна быть связана со скриптовым счётчиком, выражение в связи: Value+1, модуль счётчика - по умолчанию (2).
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 11, 2018, 15:56:50
Этот эффект в своих скина я назвал "Радугой", использовался для подсветки индикаторов в УМ.
В данном примере панель меняет циклически свой цвет, проходя все оттенки цветового круга.
Code: [Select]
procedure Execute(var State: Integer);
begin
  FindObject('Panel').Set('Color', HSLToColor(State / 360, 1, 0.5))
end;
Таймер с периодом 100 мс подключен к скриптовому счётчику с модулем 360.
Весь цикл при этом занимает 36 с. Кому-то, возможно, это покажется слишком долго, тогда можно уменьшить модуль счёткика.

В этом примере модуль = 36
Code: [Select]
procedure Execute(var State: Integer);
const
  Step = 10;
 
begin
  FindObject('Panel').Set('Color', HSLToColor(State * Step / 360, 1, 0.5))
end;
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 11, 2018, 16:08:35
Работа с провайдером prvPlayerState.
Из скриптов доступны свойства: State, Position, PositionMin, PositionMax
Возвращаемые значения State (тип - String): 'opsStop', 'opsPause', 'opsPlay'
Position, PositionMin, PositionMax - тип Double. Position - текущая позиция в треке при воспроизведении, PositionMin и PositionMax определяют диапазон для Position.

Code: [Select]
  PS:= FindObject('prvPlayerState');
  Pt:= PS.Get('Position'); -  текущая позиция в треке
  Pm:= PS.Get('PositionMax'); - продолжительность трека

Обработка состояний плеера:
Code: [Select]
  case PS.Get('State') of
    'opsStop':
      begin
          {Ваш код для обработки этого состояния}
      end; 
    'opsPlay':
      begin
          {Ваш код для обработки этого состояния}
      end; 
    'opsPause':
      begin
          {Ваш код для обработки этого состояния}
      end; 
  end;
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 11, 2018, 16:17:56
Попытка имитации снегопада. Можно расценивать как шутку в свете приближающегося Нового года.
Вместо снежинок могут быть и капли дождя, стекающие по BluredGlass - у кого на что фантазии хватит.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=61370.0;attach=55810)
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 11, 2018, 16:24:13
Как сбросить все эффекты DSP.

Достаточно подключить кнопку к скиптовому счётчику, содержащему следующий код:
Code: [Select]
procedure Execute(var State: Integer);
begin
  FindObject('prvTempo').Set('Position', 1);
  FindObject('prvSpeed').Set('Position', 1);
  FindObject('prvReverb').Set('Position', 0);
  FindObject('prvFlanger').Set('Position', 0);
  FindObject('prvPitch').Set('Position', 0);
  FindObject('prvTrueBass').Set('Position', 0);
  FindObject('prvEcho').Set('Position', 0);
  FindObject('prvEnhancer').Set('Position', 0);
  FindObject('prvChorus').Set('Position', 0);
  FindObject('prvBalance').Set('Position', 0)
end;

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

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=61370.0;attach=58640)

Правда, есть некоторые нюансы, связанные с тем, что биндинг работает только с целочисленными значениями.  :-[
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: TeDj on December 13, 2018, 07:34:22
Идея - супер! Эту тему бы в Мануал скинуть  ;D Ну и дополнять разумеется разными фишками)
+
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on December 13, 2018, 16:46:53
Пример обработки событий. В качестве подопытного контрола выбран TASETextDisplay, имеющий все доступные события. В принципе, это может быть любой другой элемент.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Aleksandr009 on December 14, 2018, 15:24:10
Текстовый ввод параметра.

Пример со сменой шрифта.
В примере используется элемент TASESearchEdit и 3 скрипта. Один сменяет шрифт в репозитории ресурсов и сохраняет его в файл настроек обложки, второй стоит в событие OnLoaded (В главном окне) чтобы при перезапуске плеера шрифт автоматически применялся.  И последний служит просто для сброса шрифта.

Также на основе этого примера в обложку можно вводить многие текстовые данные, например цвет.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on April 22, 2019, 16:55:30
Анимация динамиков на основе TASEAnimator (AIMP 4.6+)

В основе идеи - аниматор диффузора с "обратной связью", т.е. он сам себя останавливает при достижении последнего кадра. Кадров всего 4: выдвинутое состояние (1), втянутое (3) и  два кадра нейтрального положения (2 и 4).
ScriptableVisualizationHandler получает информацию со спектрума, находит максимум в указанном диапазоне частот и сравнивает его со значением, заданным регулятором чувствительности и при превышении этого порога запускает аниматор с первого кадра.
Подробности во вложенном проекте.

Соответствие частот индексам массива спектрума:
array [0..AIMP_VISUAL_SPECTRUM_MAX - 1] of Single;

Распределение значений: [0.0 .. 100.0 .. бесконечность]

Краткий список соответствия индекса массива частоте сигнала:
0 ~ 20 Гц
10 ~ 200 Гц
20 ~ 400 Гц
30 ~ 630 Гц
40 ~ 870 Гц
50 ~ 1.1 KГц
60 ~ 1.4 KГц
70 ~ 1.7 KГц
80 ~ 2.1 KГц
90 ~ 2.5 KГц
100 ~ 3.0 KГц
110 ~ 3.5 KГц
120 ~ 4.0 KГц
130 ~ 4.5 KГц
140 ~ 5.2 KГц
150 ~ 6.0 KГц
160 ~ 6.7 KГц
170 ~ 7.6 KГц
180 ~ 8.5 KГц
190 ~ 9.6 KГц
200 ~ 11.0 KГц
210 ~ 12.0 KГц
220 ~ 13.5 KГц
230 ~ 15.0 KГц
240 ~ 16.8 KГц
255 ~ 20.0 KГц

(Костаната AIMP_VISUAL_SPECTRUM_MAX = 256)
Title: Собака
Post by: ColorCode on April 29, 2019, 13:08:58
"Прослушивание участка" - скриптовый вариант Track Preview (https://www.aimp.ru/?do=catalog&rec_id=746) для прослушивания определённого участка дорожек.

"Повтор отрезка АБ" - графические метки для встроенной функции "Повтор отрезка А-Б".

(https://i.imgur.com/1UlkSva.gif)

P.S. Упс, а вот это лучше (https://www.youtube.com/watch?v=IpNy7lCzw_0) -> ссылка (https://www.aimp.ru/forum/index.php?topic=27831.msg378963#msg378963) (жаль не проект)
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on May 02, 2019, 08:21:05
Ещё одна реализация Color Picker (AIMP 4.6). Старался максимально приблизить поведение к привычному колорпикеру в Photoshop.
Пришлось несколько покостылить по причине того, что нельзя при вызове хендлера передать ему параметры.
Во вложении пример диалога кастомизации с вызовом Color Picker'a. Все парамеры цвета элементов сохраняются в ini-файле скина.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=61370.0;attach=57423)

Поправил процедуру перемещения курсора по полю пикера - трудно было попасть в крайние точки.
Файл проекта обновлён.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on May 02, 2019, 08:33:03
... жаль не проект
Проект не секрет, тогда просто это ни у кого интереса не вызвало, да и сейчас, скорее всего, тоже.  :-[

Визуализация функции Repeat AB.

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=55772)
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on May 02, 2019, 17:56:43
Выложу и свой вариант TrackPreview, тот, что использую в плейлистах своих скинов.
Title: Re: Визуализация функции Repeat AB
Post by: ColorCode on May 10, 2019, 08:51:01
...ни у кого интереса не вызвало...
И у меня не вызвало. (https://www.youtube.com/watch?v=Aa2FlN3W9h8)

Модификация на "Визуализация функции Repeat AB (https://www.aimp.ru/forum/index.php?topic=61370.msg386922#msg386922)" от Black_AVP

(https://i.imgur.com/ByxL172.gif)

Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: gr-e on May 11, 2019, 22:11:43
Переключение темы по расписанию.

Настройки открываются кнопкой переключения темы.

UPD: обновил пример с использованием провайдера времени вместо таймеров.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on May 12, 2019, 20:44:24
Переключение темы по расписанию.
Что-то уж больно мудрёно...  :-\
У на с же есть в распоряжении провайдер prvSystemTime - с ним всё намного проще получается и скрипт с ним же засинхронизировать можно.

Автоперключение тем в стандартном Bliss4k по расписанию
Добавлены провайдеры:
ThemeSwitchController
TimeDark_Counter
TimeLight_Counter
Изменять время лучше всего вращением колеса над меткой.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: gr-e on May 12, 2019, 21:32:12
У на с же есть в распоряжении провайдер prvSystemTime
Да уж, с провайдером гораздо проще получается
Изменять время лучше всего вращением колеса над меткой.
Да, я потому и спрашивал ранее про SliderMasked, просто тут не стал уже делать.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on May 14, 2019, 10:25:48
... Да, я потому и спрашивал ранее про SliderMasked, просто тут не стал уже делать.
В принципе можно использовать способ ввода, как в Фотошопе (и не только) в числовых полях с двунаправленными стрелочками - протяжкой мыши с зажатой ЛКМ.

В прилагаемом примере обработчик(и) один на все поля ввода (надо только следить за совпадением имён).
Можно использовать не только TASETextDisplay, но и другие элементы, имеющие обработчики состояний мыши.
Если нужно более плавное изменение значений при вводе, можно в скрипте вычисляемое приращение поделить не некоторое число.
В данном примере отслеживается горизонтальное перемещение мыши, с равным успехом можно использовать и вертикальное, а то и оба вместе (для хитрых задач ;)).
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Black_AVP on August 20, 2019, 15:39:07
Совместное использование LayoutTabbedGroup и TabControl.
Заголовки вкладок - это DisplayName контейнеров в группе.

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=61370.0;attach=58559)
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Offworld on August 31, 2019, 08:10:36
Кнопка Проверить Обновления Обложки/Check For Skin Updates Button [Scriptless]
Has 2 frames. You could add the third frame for "pressed state" which would require a script in Events (OnClick) section.
(https://i.imgur.com/gMBEhRP.png)
(https://i.imgur.com/XmuzF5V.png)
Don't forget to change the Hint also.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Offworld on September 04, 2019, 19:09:32
ColorPicker+
на основе ColorPicker (https://www.aimp.ru/forum/index.php?topic=61370.msg386921#msg386921)

(https://i.imgur.com/VvAW8T2.png)
  • can be stretched
  • can change it's color after confirmation (OK button)
  • uses special font (PickerFont.ttf which has to be attached to the skin)
*Do not fiddle with Caption property.
(https://i.imgur.com/ZUDCz0x.png)
Очень хотелось бы возможность менять тему на светленькую ( а если совсем наглеть то и настройки фонового цвета и цвета шрифта)
- Change the color of album groupe name ? Actually the grey is very simlilar to the background and make hard to read the name. Maybe an option in pannel option of skin ?
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Offworld on September 08, 2019, 02:48:00
Font Size Slider/Ползунок размера шрифта
(https://i.imgur.com/WZG6m06.gif)
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Offworld on September 12, 2019, 01:49:57
Resize mode/Режим изменения размера

(https://i.imgur.com/9poIvVU.gif)
  • один скрипт для события OnResize для отображения значений (должен быть присвоен контейнеру)
  • другой для OnMouseEnter, чтобы скрыть их
  • третий скрипт (logica_Hide_All) скрывает разделители
    + версия в пикселях [px]
Обложка очень нравится, жаль до идеала не дотягивает по нескольким пунктам:
1. Нельзя растянуть по ширине (см. скрин)
2. Показывается мало плейлистов
3. Хотелось бы уменьшить вертикальные зазоры
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=57809.0;attach=56096)
3. 4.
(https://c.radikal.ru/c05/1804/0b/753eb149f602.png)
Приветствую! Спасибо за обложку!
И такая просьба. У меня ноут, экран небольшой и название 3-го по списку плэйлиста постоянно обрезается
(https://i.imgur.com/V4n1hDt.png)
Здрасти. А можно сделать что-то типа компактного режима? Пикрелейтед.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=44783.0;attach=54129)
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Offworld on September 22, 2019, 22:49:24
Magnifier/Увеличительное стекло

прогресс приостановлен


(https://i.imgur.com/6R7zD6i.gif)
  • can avoid bounds (see inside for details)
  • follows pointer (but can be modified to resemble the one in the Skin Editor)
  • scroll to zoom
  • can't be moved to other projects (script needs fixing)
    project updated with debug values
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Offworld on September 29, 2019, 20:27:50
Zoomable Waveform/Масштабируемая форма волны

(https://i.imgur.com/UbHFP3Y.gif)
  • прокрутка колеса мыши - увеличить/уменьшить
  • ПКМ по ползунку - минимум
  • ПКМ по кнопке "-" - минимум
  • ПКМ по кнопке "+" - максимум
It would be nice if the next version had these features!
1. Visualization of the waveform of the track in execution and of the following trace, of large dimensions as well as possibility of zooming of the waveform;
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Offworld on October 01, 2019, 21:28:32
Effects/Эффекты
сделано с Обработка событий, ScriptableEventHandler (https://www.aimp.ru/forum/index.php?topic=61370.msg379395#msg379395)
(https://i.imgur.com/ytpif84.gif)
Есть ли способ отслеживать прирост и убывание значения X и переворачивать анимацию по горизонтали на основе этого?
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Kibermanick on October 01, 2019, 21:59:51
Effects/Эффекты

сделано с Обработка событий, ScriptableEventHandler (https://www.aimp.ru/forum/index.php?topic=61370.msg379395#msg379395)

(https://i.imgur.com/ytpif84.gif)

Есть ли способ отслеживать отрицательные и положительные значения X и переворачивать анимацию по горизонтали на основе этого?


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


Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: Offworld on October 16, 2019, 12:37:13
Random Artwork/Случайная обложка
автоматическая подмена отсутствующей обложки случайным изображением из менеджера ресурсов
(https://s8.hostingkartinok.com/uploads/images/2019/10/acf8b3d84da5dfc743e3c70bcff333af.gif)
*скрипт не определяет наличие обложки, он просто загружает изображения под оригинал (если есть). В ином случае требуется дополнительный скрипт (хотя я не вижу причины для этого).
- Custom image for background of top header is possible ? Or if is too long or difficult, more choice of background. But i like actual girls.
Title: Re: Нехитрые полезности и идеи для создателей скинов
Post by: disco-groove on October 21, 2019, 12:33:02
Проект не секрет, тогда просто это ни у кого интереса не вызвало, да и сейчас, скорее всего, тоже.  :-[

Визуализация функции Repeat AB.

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=55772)

The function is very interesting especially if implemented with the Zoom function. Furthermore it is necessary that the start and end points A and B are saved in the track and the possibility that at point B the reproduction passes to the next track. Thank you all.
P.S. in I failed to test the function because probably the file extension is not .acs4 but .acsaproj, can you help me?