AIMP Forum

AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: Пeтр on January 14, 2017, 16:06:10

Title: Примеры плагинов визуализации
Post by: Пeтр on January 14, 2017, 16:06:10
Некоторое время назад написал несколько плагинов визуализации и решил ими поделится. Возможно кому-то пригодится.
В архиве три примера плагинов.



VisualPlug создает визуализацию в окне AIMP. Ничего особенного. Просто пример.
Для установки плагина нужно в папке Plugins создать папку с таким же именем как у dll (в данном случае - EmbeddedVisualization) и скопировать в нее dll. После запустить плеер и в настройках плагинов убедится что плагин включен (есть галочка).

(http://s03.radikal.ru/i176/1701/2a/f98cde89d91f.png)

Затем выбрать плагин в меню "Визуализация".

(http://s012.radikal.ru/i320/1701/06/7188ea0781f7.png)



Плагин VisualShared предназначен для расшаривания структуры TAIMPVisualData для других приложений. В "Remote API" такой функции нет и это привело появлению рассматриваемого плагина. Список функций dll доступных приложению.
Quote
LibInit()

Приложение должно однократно вызвать функцию после загрузки dll.

LibFree()

Приложение должно вызвать функцию перед выгрузкой dll.

SetCallBack(*Proc, Flag)

Функция SetCallBack() регистрирует процедуру, вызываемую каждый раз при поступлении новых данных визуализации. Она имеет вид "CallBack(*Data.TAIMPVisualData)" и принимает указатель на структуру TAIMPVisualData.
Если при вызове SetCallBack() параметр Flag равен 0, то CallBack процедуре будет передаваться нулевой указатель, т. е. вызов без данных визуализации. Если параметр Flag равен 1, тогда процедуре передается заполенный экземпляр структуры TAIMPVisualData.
Учитывайте что CallBack процедура вызывается не из того потока, в котором она зарегистрирована. Если это недопустимо, используйте функции IsData() и GetData() вместо CallBack.

IsAimp()

Функция IsAimp() возвращает не ноль если плеер запущен и использует плагин, или 0, если dll не используется плеером.

IsData()

Функция IsData() проверяет наличие новых данных визуализации и вернет не 0 при их наличии. Она вместе с функцией GetData() служит альтернативной CallBack функции.

GetData(*Data.TAIMPVisualData)

Функция GetData() заполняет структуру TAIMPVisualData переданую ей приложением. При успешном выполнении вернет не 0.
Также в dll присутствует функция AIMPPluginGetHeader, но приложение не должно ее вызывать. Она для плеера.

Плагин может запустить приложения из списка в файле ProgramList.txt находящимся рядом с плагином. Формат файла - стандартный для ini файлов. Кодировка UTF-8.
Подробнее про этот тип файлов можно прочитать в википедии https://ru.wikipedia.org/wiki/.ini

Пример файла.
Code: [Select]
[1]
Program = Программа.exe
Parameter = Параметры программы
Directory = Папка программы

[2]
Program = Программа.exe
Parameter = Параметры программы
Directory = Папка программы
Секции могут иметь любое имя. Они нужны только для разделения пространства имен ключей.

Ключ Program должен содержать путь к программе. Абсолютный, или относительный по отношению к папке с плагином.

Ключ Parameter содержит параметры программы. Является необязательным и может отсутствовать.

Ключ Directory содержит путь к рабочей папке программы. Является необязательным и может отсутствовать.



Плагин USB_SoundLights позволяет подключить к плееру 15-ти канальную USB цветомузыку на микроконтроллере STM32F103C8T6. Для этих целей удобно использовать готовую плату.

(http://s011.radikal.ru/i317/1701/30/b85120d0930f.jpg)

Ее нужно прошить программой из файла "USB_SoundLights\STM32\bin\Release\USB_SoundLights.hex".
Светодиоды необходимо подключить к выводам A8, A9, A10, B6, B7, B8, B9, A0, A1, A2, A3, A6, A7, B0 и B1.



Все плагины и программа для STM32 с исходными кодами.
Для компиляции плагинов нужен PureBasic 5.31 и выше.
Проект для STM32 создан в STM32CubeMX 4.17.0, версия библиотек 1.4.0 и скомпилирован в EmBitz 1.11.
Title: Re: Примеры плагинов визуализации
Post by: Artem on January 15, 2017, 09:54:28
Круто!