0 Members and 2 Guests are viewing this topic.
На текущий момент AIMP инициализирует плагины по мере надобности, я так полагаю, что LumaVU в данном примере НИ РАЗУ не инициализировался, и упал при попытке выгрузить dll-ку. Возможно, что-то не учитывает, что плагин не был инициализирован.
Вот это уже информация. С какой версии данное поведение у АИМПа? А вообще это умнО: вызывать финализацию без инициализаии и при этом никому не сказать (или я пропустил это?).
вызывать финализацию без инициализаии и при этом никому не сказать (или я пропустил это?).
финализация у плагина вызывается, даже если он не был инициализирован?
function AuthorName: PWideChar; stdcall; function PluginName: PWideChar; stdcall; function PluginInfo: PWideChar; stdcall; function PluginFlags: DWORD; stdcall; function Initialize: BOOL; stdcall; procedure Deinitialize; stdcall; procedure DisplayClick(X, Y: Integer); stdcall; procedure DisplayRender(DC: HDC; AData: PVisualData); stdcall; procedure DisplayResize(AWidth, AHeight: Integer); stdcall; procedure HandleMenuClick(Sender: TObject); procedure MakeLangFile;
Offtop: Я сейчас работаю над новым API, у вас есть какие-нибудь пожелания по содержанию / юзабилити?
Да, вы правы, плеер на мгновение активирует следующую визуализацию по списку при закрытии, это происходит из-за того, что текущий плагин выгружается. Да, это не очень красиво, поправлю в ближайшем билде. Однако, запускать поток и не контролировать время его жизни - тоже плохой жест, финализация плагина придумана именно для того, чтобы плагин мог все за собой подчистить перед тем, как его выгрузят
Ну я, как обычно, положился на плеер. Так что счет 1:1. Ну и напомню, что в AIMP2 проблем не было.
Сейчас у меня только один вопрос, жизненно важный для моего плагина: откуда брать исходные данные об уровне сигнала. Отсюда вопрос: по какому алгоритму формируется встроенный уровень? Ну и как поступает WAVE сигнал: непрерывные кусочки или небольшие несвязанные кусочки?
Багу можно повторить, если два раза кликнуть по галке - загрузить / выгрузить. Или в процессе пролистывания визуализаций.
Структура VisualData уже имеет посчитанные уровни для обоих каналов, стандартный плагин использует именно их. WAVE поступает несвязанными кусочками, т.к. плагин работает с частотой всего 25 fps.
Тем не менее, я вставил в деинит ожидание закрытия потока,
что дает небольшой лаг при закрытии.
Баг может вылезти только если придут 2 инита подряд без деинита между ними.
А как считаются уровни? По какому алгоритму? Средневзвешанные? Квадратичные или просто пиковые? Анализируется весь непрерывный поток или так же кусочки с 25fps? Просто иногда замечаю, что некоторые пики ударных пропадают.
PS Можно данное поведение плеера оставить (переинит при закрытии), если передавать плагину флаг "Close_Query", чтобы он знал что можно делать а что нельзя.
В смысле? Что значит можно и нельзя? Плагин должен корректно обрабатывать команды, что ему посылает ядро.
Кстати, о корректности отображения полосок и соответствия слышимой музыке.Иногда один из каналов "зашкаливает" на несколько сек, хотя музыка идёт в это время явно тихая, без уровня 0 дБ.Даже при остановке музыки - полоска остаётся "зашкаленой".Стоит настройка "логарифмическая шкала"
Эта проблема была озвучена ранее (несколько страниц назад). Можно и ее подкорректировать на скорую руку. Проявляется она, почему-то, только на х64 системах.