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)
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;
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)