AIMP Forum

AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: Martin on April 14, 2015, 15:28:59

Title: C# AIMP SDK 3.60/4.00
Post by: Martin on April 14, 2015, 15:28:59
Желающие писать плагины на C#, VB и других Net. языках могут воспользоваться данной SDK оберткой. Которая представляет из себя AIMP плагин, представляющий собой прослойку между AIMP и DotNet.

Плагин находится в стадии разработки и некоторые возможности из SDK еще не реализованы, так же существуют и баги, которые исправляются по мере возможности.

Проект является opensource и доступен на GitHub https://github.com/martin211/aimp_dotnet (https://github.com/martin211/aimp_dotnet)
Бинарные файлы можно скачать тут https://github.com/martin211/aimp_dotnet/releases (https://github.com/martin211/aimp_dotnet/releases)

Последнее редактирование: Сегодня в 09:53:10
+ Вложения и другие параметры
подсказка: нажмите alt+s для отправки или alt+p для предварительного просмотра сообщения


Как пользоваться:
1. Создаем новый проект плагина на c#.
2. Подключаем в проект сборку AIMP.SDK.dll
3. Реализуем нужный функционал, примеры реализации можно скачать с github.
4. В папке Aimp\Plugins создаем новую папку, например dotnet_myplugin.
5. Необходимо переименовать aimp_dotnet.dll в dotnet_myplugin.dll и скопировать в папку Aimp\Plugins\dotnet_myplugin
6. Билдим наш плагин и копируем его в туже папку.
7. Открываем настройки плагинов aimp'a и должны увидеть наш плагин

Еще на компьютере должены быть установлены C++ redistributable (https://support.microsoft.com/ru-ru/help/2977003/the-latest-supported-visual-c-downloads)
Title: Re: C# AIMP SDK 3.60
Post by: Tarik on April 14, 2015, 16:28:52
Проект является opensource и доступен на GitHub https://github.com/martin211/aimp_dotnet (https://github.com/martin211/aimp_dotnet)
Очень здорово, +1 как минимум! Обязательно поизучаю :)

Какая версия .NET использкется?
Есть планы по Aimp RemoteAPI? Дело в том, что я его портировал, но пока так и не решился выложить код (не хватает законченного примера).
Title: Re: C# AIMP SDK 3.60
Post by: Martin on April 14, 2015, 16:40:57
Какая версия .NET использкется?
Есть планы по Aimp RemoteAPI? Дело в том, что я его портировал, но пока так и не решился выложить код (не хватает законченного примера).

Использовал DotNet 4.5
На счет RemoteAPI пока не думал, еще есть много интерфейсов, которые надо импортировать
Title: Re: C# AIMP SDK 3.60
Post by: AvdyN on December 22, 2015, 19:58:02
Здравствуйте!  :)
Хочу попробовать написать плагин на C#.
Я скопировал плагин из релиза в папку Plugins, но он не появляется в AIMP'e.
Martin, не могли бы вы сделать небольшую инструкцию, как создавать проект для написания нового плагина?
Или этот SDK не поддерживает AIMP 4?
Title: Re: C# AIMP SDK 3.60
Post by: Zhenya on December 22, 2015, 20:03:56
Я скопировал плагин из релиза в папку Plugins, но он не появляется в AIMP'e.
Ну самый простой вариант, копировали dll-ку в отдельную одноименную (dll-файлу) папку? Установка старых плагинов на v3.60 (https://www.aimp.ru/forum/index.php?topic=44978.0).
Title: Re: C# AIMP SDK 3.60
Post by: AvdyN on December 22, 2015, 22:27:51
Ну самый простой вариант, копировали dll-ку в отдельную одноименную (dll-файлу) папку?
Я так и делал.
Title: Re: C# AIMP SDK 3.60
Post by: Martin on December 22, 2015, 22:37:49
Здравствуйте!  :)
Хочу попробовать написать плагин на C#.
Я скопировал плагин из релиза в папку Plugins, но он не появляется в AIMP'e.
Martin, не могли бы вы сделать небольшую инструкцию, как создавать проект для написания нового плагина?
Или этот SDK не поддерживает AIMP 4?

День добрый.
Плагин будет работать как в версии AIMP 3.60 так и в 4.0.
На данный момент aimp_dotnet.dll, это плагин загрузчик, который загружает ваш плагин и позволяет ему общаться с плеером.

Порядок действий такой:
1. Создаем новый проект плагина на c#.
2. Подключаем в проект сборку AIMP.SDK.dll
3. Реализуем нужный функционал, примеры реализации можно скачать с github. Там пока 2 демо-плагина.
4. В папке Aimp\Plugins создаем новую папку, например dotnet_myplugin.
5. Необходимо переименовать aimp_dotnet.dll в dotnet_myplugin.dll и скопировать в папку Aimp\Plugins\dotnet_myplugin
6. Билдим наш плагин и копируем его в туже папку.
7. Открываем настройки плагинов aimp'a и должны увидеть наш плагин

Еще на компьютере должены быть установлены C++ 2015 Redist x86 (https://www.microsoft.com/ru-ru/download/details.aspx?id=48145) версии не ниже14.0.23026
И еще, сдк еще сырой и не все возможности присутствуют
Title: Re: C# AIMP SDK 3.60
Post by: AvdyN on December 23, 2015, 20:44:59
Спасибо! :)
Удалось установить демо-плагины и посмотреть на их функционал.
Попробую написать что-нибудь свое.
Title: Re: C# AIMP SDK 3.60
Post by: Radan on January 26, 2016, 11:59:15
А будет работать в студии 2010?
Title: Re: C# AIMP SDK 3.60
Post by: Martin on January 26, 2016, 12:03:48
А будет работать в студии 2010?

Не уверен.
Исходники точно собрать не получится. Можете попробовать использовать бинарники
Title: Re: C# AIMP SDK 3.60
Post by: Radan on January 26, 2016, 12:31:19
Нужна 2013 или 2015?
И ещё вопрос, SDK поддерживает возможность получение массива данных спектра?
Title: Re: C# AIMP SDK 3.60
Post by: Martin on January 26, 2016, 13:36:16
Нужна 2013 или 2015?
И ещё вопрос, SDK поддерживает возможность получение массива данных спектра?

Если есть необходимость собрать проект из исходников, то нужна студия не ниже 2015.
На данный момент сервисы для визаулизации не реализованы
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 26, 2016, 14:01:58
А вы можете хотя бы примерно назвать сроки, когда будет реализована визуализация, или этого в планах нет?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on January 26, 2016, 14:05:07
А вы можете хотя бы примерно назвать сроки, когда будет реализована визуализация, или этого в планах нет?

Могу переключиться и реалзивать этот сервис, по виду он не очень сложный.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 26, 2016, 14:07:55
Это было бы здорово!
Я по этому случаю поставлю VS2015, никак с 2010 не спрыгну.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 28, 2016, 09:03:00
Установил студию 2015 и C++ 2015 Redist x86.
Скомпилировал AIMP.SDK и все 3 плагина.
aimp_dotnet компилироваться не хочет - выдаёт ошибку:
Ошибка   C1083   Не удается открыть файл включение: boost/intrusive_ptr.hpp: No such file or directory   aimp_dotnet   d:\zapis\___aimp\aimp_dotnet-master\aimp_dotnet\Stdafx.h   
Не подскажете, в чём проблема?

И ещё один вопрос. Сделал установку плагина по инструкции выше, но в списке он так и не появился. На что нужно ещё обратить внимание? - ЭТОТ ВОПРОС СНЯТ, разобрался. Я искал плагин не под тем именем. Нужно смотреть на имя плагина в коде - [AimpPlugin("dotNetInteropTest"...


Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on January 28, 2016, 10:25:42
Ошибка   C1083   Не удается открыть файл включение: boost/intrusive_ptr.hpp: No such file or directory   aimp_dotnet   d:\zapis\___aimp\aimp_dotnet-master\aimp_dotnet\Stdafx.h   

Плагину требуется boost. Скачать можно вот отсюда http://sourceforge.net/projects/boost/files/boost-binaries/1.60.0/ (http://sourceforge.net/projects/boost/files/boost-binaries/1.60.0/), пакет boost_1_60_0-msvc-14.0-32.exe
Затем, в свойствах проекта aimp_dotnet открыть 'VC++ Directories' и изменить путь до boost в 'Include Directories' и 'Library Directories'
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 28, 2016, 12:21:53
Спасибо, всё получилось.
Посмотрю что я смогу использовать из существующего функционала.
Ну и конечно же буду ожидать сервисы визуализации.
Реально есть куда применить это дело, и возможно это будет первый визуальный плагин на NET.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 28, 2016, 22:26:05
Плагин можно разрабатывать и в 2010 студии. Всё собирается и работает.
Посмотреть значения можно в режиме отладки, подцепившись к Аимпу - attach to process.
Есть пока один баг, который не знаю как решить.
После вызова и закрытия формы плагина dotnet_demo повторный вызов выдаёт критическое исключение E0434352.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on January 29, 2016, 00:12:57
Ну и конечно же буду ожидать сервисы визуализации.

Попробуйте вот этот бранч https://github.com/martin211/aimp_dotnet/tree/AIMPServiceVisualizations
Тут почти реализован IAimpExtensionEmbeddedVisualization, но им уже можно пользоваться и рисовать.
Добавлен демо-плагин dotnet_visual

После вызова и закрытия формы плагина dotnet_demo повторный вызов выдаёт критическое исключение E0434352.

Это баг в aimp_dotnet, я посмотрю в чем дело.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 29, 2016, 10:40:32
После подгрузки плагина во время старта Аимпа выдаётся сообщение: "Прекращена работа программы Аимп. Искать решение и т.д." Закрываю сообщение, аимп работает. В визуализации первым по списку появился пункт "отключено".
Собирал все библиотеки в 2015.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on January 29, 2016, 11:52:45
Удалите из плеера все демо плагины. Оставьте только один плагин.
Сейчас есть проблема с загрузкой плагинов если в папке с плагинами есть несколько разных версий AIMP.SDK.dll
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 29, 2016, 14:30:37
Заработало.
Разбираюсь со спектром.
Квадратик бегает у меня уже, думаю что скоро и спектр получится выводить.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 29, 2016, 14:58:04
Огромное вам спасибо!
Так выводится спектр:
Code: [Select]
  public void Draw(IntPtr dc, AimpVisualData data)
        {
            var g = Graphics.FromHdc(dc);
            g.Clear(Color.Black);
            for (int i = 0; i < 100; i++)
            {
                g.DrawLine(new Pen(Color.Orange), (float)i, 45, (float)i, 45 - (float)data.Spectrum[1][i]);
            }
        }

Теперь можно запросто цветомузыку делать и иже с ними.
Вот только мне непонятно, почему  Spectrum состоит из 3-х индексов по 256 элементов, а не из двух? Разве кроме левого и правого каналов там ещё что-то есть?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on January 29, 2016, 15:59:50
Вот только мне непонятно, почему  Spectrum состоит из 3-х индексов по 256 элементов, а не из двух? Разве кроме левого и правого каналов там ещё что-то есть?

Вот информация из официального сдк:

Code: [Select]
Spectrum(3) TAIMPVisualDataSpectrum
Массив из трех элементов типа TAIMPVisualDataSpectrum.
0 - спектр левого канала
1 - спектр правого канала
2 - спектр суммы левого и правого каналов

Данные заполняются только в том случае, если расширение вернуло в GetFlags флаг AIMP_VISUAL_FLAGS_RQD_DATA_SPECTRUM.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 29, 2016, 17:45:53
data.WaveForm имеет тип byte, а в оригинале -
Code: [Select]
TAIMPVisualDataWaveform
array [0..AIMP_VISUAL_WAVEFORM_MAX - 1] of Single;
Исходные данные сигнала в виде "волны".
Распределение значений: [-бесконечность .. -1.0 .. 0.0 .. 1.0 .. бесконечность], где |1.0| равно 0 дБ.
Практически всегда в data.WaveForm массиве нули.

Для data.Spectrum тоже тип byte -
Code: [Select]
TAIMPVisualDataSpectrum
array [0..AIMP_VISUAL_SPECTRUM_MAX - 1] of Single;
Распределение значений: [0.0 .. 100.0 .. бесконечность]
но там значения от 0 до 100, поэтому всё хорошо.

Наверное или тип в data.WaveForm нужно изменить, или сделать корректное преобразование, чтобы средина была 128, а положительные и отрицательные значения были выше и ниже.
Попробовал сам изменить, но видимо не всё нашел...
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on January 29, 2016, 22:21:39
Исправил на float. Изменения находятся в develop бранче
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on January 30, 2016, 00:04:53
Теперь правильно работает.
Но ошибка при закрытии аимпа выскакивает и он продолжает висеть в процессах.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on March 08, 2016, 22:00:03
Спасибо огромное за помощь!
Вот что получилось: http://lightportal.at.ua/publ/cvetomuzykalnye_ustanovki/aimp_plagin_dlja_cmu_soyuz_lt/3-1-0-118
На подходе спектроанализатор на светодиодных модулях. :D
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Tarik on March 09, 2016, 01:41:31
Спасибо огромное за помощь!
Вот что получилось: http://lightportal.at.ua/publ/cvetomuzykalnye_ustanovki/aimp_plagin_dlja_cmu_soyuz_lt/3-1-0-118
На подходе спектроанализатор на светодиодных модулях. :D
Впечетляюще! +1 Очень здорово!
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on March 17, 2016, 22:43:43
Добил спектроанализатор:
http://lightportal.at.ua/publ/spektroanalizatory/spektroanalizator_plagin_aimp/18-1-0-121
Title: Re: C# AIMP SDK 3.60/4.00
Post by: antonr on March 31, 2016, 12:11:34
Прошу прощения, создал репозиторий, переписал все интерфейсы на C# (все, которые были в SDK https://aimp.ru/files/sources/aimp_sdk.zip)
https://github.com/antrv/AIMP-net-api
Для отладки я создал символическую ссылку на папку bin\Debug проекта SamplePlugin в папке AIMP4\Plugins, в свойствах проекта на вкладке Debug указал Start external program и путь к AIMP.exe.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Tarik on March 31, 2016, 23:25:14
Прошу прощения, создал репозиторий, переписал все интерфейсы на C# (все, которые были в SDK https://aimp.ru/files/sources/aimp_sdk.zip)
https://github.com/antrv/AIMP-net-api
Для отладки я создал символическую ссылку на папку bin\Debug проекта SamplePlugin в папке AIMP4\Plugins, в свойствах проекта на вкладке Debug указал Start external program и путь к AIMP.exe.

Очень здорово, спасибо! +1

Почему-то 2015 студия не хочет восстановить пакет 'UnmanagedExports' из репозитория. Хотя при открытии солюшена из вложения (https://www.aimp.ru/forum/index.php?topic=21774.msg322103#msg322103) восстановила.  ???
Title: Re: C# AIMP SDK 3.60/4.00
Post by: antonr on April 01, 2016, 08:26:40
Почему-то 2015 студия не хочет восстановить пакет 'UnmanagedExports' из репозитория. Хотя при открытии солюшена из вложения (https://www.aimp.ru/forum/index.php?topic=21774.msg322103#msg322103) восстановила.  ???
Nuget пакеты я не кладу в репозиторий, у меня они при компиляции сами скачиваются.
Если не скачались, можно ткнуть пкм на солюшен, и Restore Nuget packages.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: esprit on April 17, 2016, 22:46:35
antonr, а есть пример плагина, который хотя бы что-то делает? Потому как без примеров не получается разобраться. Даже со строками (которые аимповские) проблемы. Пример:
Code: [Select]
public void Initialize(IAIMPCore core)
{
    var testString = "Test";
    var dialogName = (IAIMPString)core.CreateObject(typeof(IAIMPString).GUID);
    dialogName.SetData(testString, testString.Length);

    MessageBox.Show(dialogName.GetData());
}

При запуске показывается пустое окошко без текста. Что не так?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: vladxxl on June 10, 2016, 09:22:46
Добил спектроанализатор:
http://lightportal.at.ua/publ/spektroanalizatory/spektroanalizator_plagin_aimp/18-1-0-121
Можна исходники?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: vladxxl on June 21, 2016, 14:21:34
А есть информация как в массиве спектра частота распределена?(какой индекс какой частоте соответствует) А какой максимум по значениям?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on June 21, 2016, 20:07:11
А есть информация как в массиве спектра частота распределена?(какой индекс какой частоте соответствует) А какой максимум по значениям?

Шкала логарифмическая:
0   - 20 Гц
128 - ~4.3 KГц
255 - 20 КГц
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Sellec on July 15, 2016, 11:56:24
SDK поддерживает AIMP 4.10?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Soolo on July 15, 2016, 12:25:28
SDK поддерживает AIMP 4.10?
Конечно.
До сих пор поддерживается даже SDK от АИМП2.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: vladxxl on August 08, 2016, 12:25:00
Шкала логарифмическая:
0   - 20 Гц
128 - ~4.3 KГц
255 - 20 КГц

Добрый день! А можно подробней касательно соответствия елементов конкретным частотам? И почему этой информации нет в документации к SDK?

UPD: Полный список можно не давать (хотя было бы просто прекрасно), дайте хоть индексы для тех частот, что в самом плеере в настройках еквалайзера есть (16 штук вроде)
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on August 10, 2016, 20:47:03
Добавлю в справку в следующем билде:
0 ~ 20 Hz
10 ~ 200 Hz
20 ~ 400 Hz
30 ~ 630 Hz
40 ~ 870 Hz
50 ~ 1.1 KHz
60 ~ 1.4 KHz
70 ~ 1.7 KHz
80 ~ 2.1 KHz
90 ~ 2.5 KHz
100 ~ 3.0 KHz
110 ~ 3.5 KHz
120 ~ 4.0 KHz
130 ~ 4.5 KHz
140 ~ 5.2 KHz
150 ~ 6.0 KHz
160 ~ 6.7 KHz
170 ~ 7.6 KHz
180 ~ 8.5 KHz
190 ~ 9.6 KHz
200 ~ 11.0 KHz
210 ~ 12.0 KHz
220 ~ 13.5 KHz
230 ~ 15.0 KHz
240 ~ 16.8 KHz
255 ~ 20.0 KHz
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Moshi0 on September 04, 2016, 02:41:29
Желающие писать плагины на C#, VB и других Net. языках могут воспользоваться данной SDK оберткой. Которая представляет из себя AIMP плагин, представляющий собой прослойку между AIMP и DotNet.

Плагин находится в стадии разработки и некоторые возможности из SDK еще не реализованы, так же существуют и баги, которые исправляются по мере возможности.

Проект является opensource и доступен на GitHub https://github.com/martin211/aimp_dotnet (https://github.com/martin211/aimp_dotnet)
Бинарные файлы можно скачать тут https://github.com/martin211/aimp_dotnet/releases (https://github.com/martin211/aimp_dotnet/releases)

Как пользоваться:
1. Создаем новый проект плагина на c#.
2. Подключаем в проект сборку AIMP.SDK.dll
3. Реализуем нужный функционал, примеры реализации можно скачать с github. Там пока 2 демо-плагина.
4. В папке Aimp\Plugins создаем новую папку, например dotnet_myplugin.
5. Необходимо переименовать aimp_dotnet.dll в dotnet_myplugin.dll и скопировать в папку Aimp\Plugins\dotnet_myplugin
6. Билдим наш плагин и копируем его в туже папку.
7. Открываем настройки плагинов aimp'a и должны увидеть наш плагин

Еще на компьютере должены быть установлены C++ 2015 Redist x86 (https://www.microsoft.com/ru-ru/download/details.aspx?id=48145) версии не ниже 14.0.23026

Hello, I really appreciate the work you did on this project.
I have a question on your MediaLibrary branch. Do you plan to support IAIMPMLGroupingTreeDataProvider and IAIMPMLGroupingTreeDataProviderSelection?
Thanks.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on September 04, 2016, 07:43:28
Hello, I really appreciate the work you did on this project.
I have a question on your MediaLibrary branch. Do you plan to support IAIMPMLGroupingTreeDataProvider and IAIMPMLGroupingTreeDataProviderSelection?
Thanks.

Hi. Thanks. Yes, I'll continue work on this branch after my vacation.

Title: Re: C# AIMP SDK 3.60/4.00
Post by: Moshi0 on October 17, 2016, 21:52:34
Hi. Thanks. Yes, I'll continue work on this branch after my vacation.

Hi, is grouping tree stuff in an usable state yet?
I can't get it to work. No official documentation for aimp sdk does not help either.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on October 18, 2016, 09:28:23
Hi, is grouping tree stuff in an usable state yet?
I can't get it to work. No official documentation for aimp sdk does not help either.

Hi, yes you right the code is unstable yet. Not all methods have been tested well and the main reason for this - poor documentation and lack of examples
I'll ask Artem, maybe he can provide some example of custom grouping provider.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Moshi0 on November 11, 2016, 01:25:14
Hi, I saw that you updated the grouping tree demo plugin. Does it work for you?
I have this problem with your plugin and mine where it only shows the last node from IAimpGroupingTreeDataProviderSelection.
But event more weird is that the display title is wrong for that node. So it seems like the title is from the first node but the assigned value is from the last node.

Also why are you not using Marshal.GetObjectForNativeVariant and Marshal.GetNativeVariantForObject in ToVariant and FromVariant methods?
I dont know anything about COM but it seems like currently you only allow string to be converted to variant.

IAIMPMLDataFilterGroup.Add seems to be throwing an exception in AimpDataFilterGroup::Add, could not find anything wrong in the code so I think its a bug in aimp?

Btw what aimp version are you using? Im on 4.11, maybe all above is caused by the wrong aimp version.

Thanks.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on November 11, 2016, 10:04:05
Hi.

Hi, I saw that you updated the grouping tree demo plugin. Does it work for you?

No, it's not work for me too. There a bug with tree display. I working on it, but still have not found a solution. I'm going to focus on fixing this issue.


Also why are you not using Marshal.GetObjectForNativeVariant and Marshal.GetNativeVariantForObject in ToVariant and FromVariant methods?
I dont know anything about COM but it seems like currently you only allow string to be converted to variant.

Thank you, I completely forgot about these methods. I'll change the logic of the converter asap.

IAIMPMLDataFilterGroup.Add seems to be throwing an exception in AimpDataFilterGroup::Add, could not find anything wrong in the code so I think its a bug in aimp?

I'm not sure that is bug at AIMP, but anyway I'll check the logic for this method. And I'm using the latest stable version of AIMP - 4.11

Title: Re: C# AIMP SDK 3.60/4.00
Post by: Radan on November 14, 2016, 09:34:36
Уважаемый Martin!
На некоторых компьютерах Аимп не видит плагин, хотя фреймворк установлен 4.5 и с++ нужной версии тоже.
Что ещё может влиять на его видимость?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on November 14, 2016, 23:31:18
Уважаемый Martin!
На некоторых компьютерах Аимп не видит плагин, хотя фреймворк установлен 4.5 и с++ нужной версии тоже.
Что ещё может влиять на его видимость?

Есть способ проверить работает ли сам прокси-плагин. Для этого необходимо удалить из папки с плагином все ваши сборки и оставить только сборку прокси-плагина.
Тогда в плеере должен появиться плагин AIMP DotNet proxy
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Bose321 on November 15, 2016, 14:01:19
Why isn't this working? I've downloaded the source and then I tried to build the dotnet_demo app. It builds correctly and then I put the dotnet_demo.dll file in my Plugins/dotnet_demo folder. I open AIMP and check the plugins settings, but I don't see the plugin I built.

What am I missing here?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on November 15, 2016, 14:39:02
Why isn't this working? I've downloaded the source and then I tried to build the dotnet_demo app. It builds correctly and then I put the dotnet_demo.dll file in my Plugins/dotnet_demo folder. I open AIMP and check the plugins settings, but I don't see the plugin I built.

What am I missing here?

You put there dotnet_demo.dll file only?
There should be 3 files: AIMP.SDK.dll, dotnet_demo.dll, dotnet_demo_plugin.dll
You can build sources at release mode and then check the folder 'aimp_dotnet\Release\AIMP.SDK\Demos\'
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on November 15, 2016, 14:41:22
Hi, I saw that you updated the grouping tree demo plugin. Does it work for you?
I have this problem with your plugin and mine where it only shows the last node from IAimpGroupingTreeDataProviderSelection.

Hi. I've fixed it. Now all nodes are displayed
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Bose321 on November 15, 2016, 14:53:50
You put there dotnet_demo.dll file only?
There should be 3 files: AIMP.SDK.dll, dotnet_demo.dll, dotnet_demo_plugin.dll
You can build sources at release mode and then check the folder 'aimp_dotnet\Release\AIMP.SDK\Demos\'
You mean in the folder "C:\Program Files (x86)\AIMP\Plugins\dotnet_demo"?

If so, yes, there are.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on November 15, 2016, 17:22:28
You mean in the folder "C:\Program Files (x86)\AIMP\Plugins\dotnet_demo"?

If so, yes, there are.

You can delete the dotnet_demo_plugin.dll file and then run AIMP. You should see the 'AIMP DotNet proxy' at plugins tab. If not, try to debug.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Bose321 on November 15, 2016, 18:32:38
No luck. Removed the file but I still do not see it in my plugins. How can I debug it if it doesn't even get loaded? Can I debug it from within VS? How does that work with a library class?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on November 15, 2016, 19:46:09
Try to download latest build from github https://github.com/martin211/aimp_dotnet/releases/tag/4.00.1687.111 and use the demo plugin from there.
Of course you can use VS to debug plugin. You should set Start external program property at Debug tab at project properties.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Bose321 on November 16, 2016, 15:01:04
Got it working! I want to create a universal class library, but the SDK targets .NETFramework and what I'm using is .NETCore. Anything I can do about that?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on November 16, 2016, 21:44:01
Got it working! I want to create a universal class library, but the SDK targets .NETFramework and what I'm using is .NETCore. Anything I can do about that?

.NETCore? Are you sure? I'm not heard that AIMP supports Linux or MAC. If you want you can using .NETCore at AIMP.SDK library, but aimp_dotnet cannot works with NetCore. Because this library written on C++ and C++ CLI and MS has not plan to support CLI on NETCore
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Moshi0 on November 16, 2016, 22:59:08
Hi. I've fixed it. Now all nodes are displayed

Yup! Already have my dlna plugin working and converted to grouping tree :)
Thanks!
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Bose321 on November 21, 2016, 17:43:18
Posted in the plugin thread: https://www.aimp.ru/forum/index.php?topic=55030.0
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Bose321 on November 28, 2016, 12:52:09
I have a question: how come I get a memory leak in the Player.CurrentfileInfo? I have a TrackChanged event which checks if it's not null. When the plugin is closed (when AIMP shuts down) it seems like that event is triggered again but I get an error. How can I check if there's a current file without getting this error?

This is the line that causes the memory leak error:

if (Player.CurrentFileInfo != null)

This only happens in the latest beta of AIMP.

edit: Can it be because CurrentFileInfo does not have a .Dispose function? It's a IDisposable object.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on November 28, 2016, 21:11:04
Hi.

Which the branch you use?

If it works at latest stable version and did not works at beta, it can be related with bugs at Aimp.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Bose321 on November 28, 2016, 21:20:14
I think the issue might be because the beta has debugging turned on, and the stable release does not.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on November 28, 2016, 21:24:59
I think that leak exists in release version too, but AIMP does not report about that.
Title: Re: C# AIMP SDK 3.60
Post by: aXiEd on December 11, 2016, 17:38:06
День добрый.
Плагин будет работать как в версии AIMP 3.60 так и в 4.0.
На данный момент aimp_dotnet.dll, это плагин загрузчик, который загружает ваш плагин и позволяет ему общаться с плеером.

Порядок действий такой:
1. Создаем новый проект плагина на c#.
2. Подключаем в проект сборку AIMP.SDK.dll
3. Реализуем нужный функционал, примеры реализации можно скачать с github. Там пока 2 демо-плагина.
4. В папке Aimp\Plugins создаем новую папку кредо убийцы (http://my-movies.org/load/zhanry/kredo_ubijcy/1-1-0-1113), например dotnet_myplugin.
5. Необходимо переименовать aimp_dotnet.dll в dotnet_myplugin.dll и скопировать в папку Aimp\Plugins\dotnet_myplugin
6. Билдим наш плагин и копируем его в туже папку.
7. Открываем настройки плагинов aimp'a и должны увидеть наш плагин

Еще на компьютере должены быть установлены C++ 2015 Redist x86 (https://www.microsoft.com/ru-ru/download/details.aspx?id=48145) версии не ниже14.0.23026
И еще, сдк еще сырой и не все возможности присутствуют

Спасибо! :)
Наконец-то удалось установить плагины и посмотреть на их функционал. Буду делать что-то свое может получится.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Moshi0 on December 13, 2016, 20:00:32
Im getting an exception when I go to plugins tab using the newest github commit.
Reverted to 3417faea and it works without porblems.

Code: [Select]
DotNetPlugin: QueryInterface
Exception thrown: 'System.AccessViolationException' in aimp_dotnet.dll
InternalAimpGroupingTreeDataProvider.Release
AIMP.exe Information: 0 : Dispose AimpCore
Dispose ManagedAimpCore
Detected memory leaks!
Dumping objects ->
h:\.projects\csharp\aimp.dlna\aimp.dlna\lib\aimp_dotnet\aimp_dotnet\sdk\musiclibrary\AimpGroupingPresets.h(43) : {157} normal block at 0x094B05D8, 12 bytes long.
 Data: < `  p       > A8 60 D3 06 70 11 E4 06 01 00 00 00
SDK\ManagedAimpCore.cpp(103) : {154} normal block at 0x09523C18, 12 bytes long.
 Data: <pl          > 70 6C D3 06 01 00 00 00 88 11 E4 06
SDK\ManagedAimpCore.cpp(99) : {153} normal block at 0x095235F8, 12 bytes long.
 Data: <Xl          > 58 6C D3 06 01 00 00 00 8C 11 E4 06
AimpDotnetPlugin.cpp(12) : {145} normal block at 0x00CABA48, 36 bytes long.
 Data: < d      <d      > 14 64 D3 06 01 00 00 00 3C 64 D3 06 CD 00 CD CD
Object dump complete.

Edit: Also the AimpActionResult enum is all wrong.
You did not set the correct values as seen here: https://msdn.microsoft.com/en-us/library/windows/desktop/aa378137(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/aa378137(v=vs.85).aspx).

Corrected:
Code: [Select]
    public enum AimpActionResult : uint
    {
        Ok = 0x00000000,
        AccessDenied = 0x80070005,
        Handle = 0x80070006,
        InvalidArguments = 0x80070057,
        NotImplemented = 0x80004001,
        Unexpected = 0x8000FFFF,
        Fail = 0x80004005
    }

This means that so far only AimpActionResult::Ok was detected correctly in AIMP.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Moshi0 on January 20, 2017, 20:55:33
Martin, are you going to fix the bug with AimpActionResult I mentioned in my last post?
Or its not a bug and I am missing something?
Thanks.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on January 21, 2017, 01:14:17
Martin, are you going to fix the bug with AimpActionResult I mentioned in my last post?
Or its not a bug and I am missing something?
Thanks.

Hi. Thanks!
Yes I'll fix it. If you found any bugs, you can fix it (if you want :) ) and then create a merge request.
What about System.AccessViolationException issue, it is still reproduce?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Moshi0 on January 21, 2017, 17:13:00
Updated to the newest commit again and I am not getting that exception anymore. So I guess its fixed.
I thought about creating a pull request, will do next time.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: gaslich on March 18, 2017, 19:10:03
Добрый день господа. Перепробовал уже все варианты описанные на форуме, но AIMP так и не увидел плагины, может надо еще что то устанавливать или настройки какие то делать?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on March 18, 2017, 21:16:39
Добрый день господа. Перепробовал уже все варианты описанные на форуме, но AIMP так и не увидел плагины, может надо еще что то устанавливать или настройки какие то делать?

Какие плагины? Написанные вами на C#?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: lightdream on April 30, 2017, 17:42:33
Здравствуйте! У меня возникла проблема. Никак не могу подписаться на событие TrackChanged. Событие не срабатывает. Прокси и сам плагин работает
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on May 02, 2017, 13:23:16
Здравствуйте! У меня возникла проблема. Никак не могу подписаться на событие TrackChanged. Событие не срабатывает. Прокси и сам плагин работает

Приветствую. Посмотрю на днях.

Исправил.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: lightdream on May 03, 2017, 10:37:21
Приветствую. Посмотрю на днях.

Исправил.

Спасибо большое. Пока не проверял, но надеюсь будет работать всё чётко  8)
Title: Re: C# AIMP SDK 3.60/4.00
Post by: sma326 on May 31, 2017, 22:19:12
Проект является opensource и доступен на GitHub https://github.com/martin211/aimp_dotnet (https://github.com/martin211/aimp_dotnet)
Бинарные файлы можно скачать тут https://github.com/martin211/aimp_dotnet/releases (https://github.com/martin211/aimp_dotnet/releases)

Как пользоваться:
1. Создаем новый проект плагина на c#.
2. Подключаем в проект сборку AIMP.SDK.dll
3. Реализуем нужный функционал, примеры реализации можно скачать с github. Там пока 2 демо-плагина.
4. В папке Aimp\Plugins создаем новую папку, например dotnet_myplugin.
5. Необходимо переименовать aimp_dotnet.dll в dotnet_myplugin.dll и скопировать в папку Aimp\Plugins\dotnet_myplugin
6. Билдим наш плагин и копируем его в туже папку.
7. Открываем настройки плагинов aimp'a и должны увидеть наш плагин
1) Скачал бинарник. Бинарник dotnet_visual поместил в AIMP\Plugins\dotnet_visual. AIMP увидел плагин. В диалоге настроек поставил соответствующую галку - плагин заработал. Рисует какие-то кривули в такт музыке.
2) Скачал проект. Сомпилировал в VS2017. перед тем как всё собрать система потребовала установить Windows SDK 8.1. Установил, собрал. Скопировал  получившиеся AIMP.SDK.dll и dotnet_visual.dll в папку AIMP\Plugins. Запускаю AIMP. AIMP не видит dotnet_visual.
3) Возвращаю бинарники из п.п. (1) - всё работает.
4) Пробую надуть AIMP. Запускаю его сначала с dotnet_visual из бинарника. Снимаю галку с плагина. Затем меняю в директории Plugins на свои dll-ки. Ставлю галку обратно. AIMP это кушает, но в окне визуализации черный квадрат.

 :o Чё я делаю не так?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on May 31, 2017, 22:53:54
:o Чё я делаю не так?

Какой вы бранч скачивали? Возможно что есть проблема с dotnet_visual плагином. Используйте develop бранч и  попробуйте установить, для примера, dotnet_demo плагин
Title: Re: C# AIMP SDK 3.60/4.00
Post by: sma326 on June 07, 2017, 22:13:00
Извините, Martin. Только сейчас заметил ваше сообщение.(((
Попробую повозится с вашим develop банчем.
Кстати, а что за таинственный 3-й файл dotnet_visual_plugin.dll
В бинарнике он есть, а в проекте я его не вижу.
Может дело в нем?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: sma326 on June 07, 2017, 22:52:09
Martin, в свойствах проекта amp_dotnet-develop в разделе выполнения команд после сборки пришлось поставить кавычки вокруг "$(SolutionDir)CopyPlugin.cmd" ... так как у меня путь к CopyPlugin.cmd с пробелами: [c:\Users\SMA\Documents\Visual Studio 2017\Projects\aimp_dotnet-develop\src\CopyPlugin.cmd]. Подправьте у себя.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: sma326 on June 07, 2017, 22:55:31
ошибка
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on June 08, 2017, 09:31:32
Кстати, а что за таинственный 3-й файл dotnet_visual_plugin.dll
В бинарнике он есть, а в проекте я его не вижу.
Может дело в нем?

Т.к. имя плагина должно совпадать с именем папки в которой он находится, то aimp_dotnet.dll переименовывается в соответсвии с названием папки. Тем самым AIMP подгружает прокси-плагин. Сама же сборка с плагином c# может называться как угодно, в данном случае называется dotnet_visual_plugin.dll. Если вы посмотрите в CopyPlugin.cmd, то там как раз и идет копирование файлов с их последующим переименованием.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: AvdyN on August 23, 2017, 13:55:55
Добрый день!
Не получается сбилдить проект aimp_dotnet в VS2017. Ошибка: LNK2001 unresolved external symbol __CorDllMain@12. В интернете пишут нужен файл mscoree.lib, но мне это не помогло, или я не правильно подключал.
Просто хотел разобраться как всё работает и добавить функциональность для apiLyrics, что появилась в версии 4.50 SDK. Т.к. есть идея насчет плагина.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on August 23, 2017, 14:09:19
Не получается сбилдить проект aimp_dotnet в VS2017. Ошибка: LNK2001 unresolved external symbol __CorDllMain@12.

Добрый день.
Попробуйте вот это решение https://support.microsoft.com/en-us/help/814472/you-receive-linker-warnings-when-you-build-managed-extensions-for-c-dl
Как вариант можно поставить последнюю версию Windows SDK (у меня используется 10.0.14393.0)

Проверьте, что в настройках aimp_dotnet, свойство Platform Toolset установлено в Visual Studio 2017(v141)
Title: Re: C# AIMP SDK 3.60/4.00
Post by: AvdyN on August 24, 2017, 11:41:04
В Windows SDK были установлены не все компоненты. После добавления C++ arm Apps ошибка пропала.
Спасибо, Martin  :)
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on November 20, 2017, 22:59:46
В Windows SDK были установлены не все компоненты. После добавления C++ arm Apps ошибка пропала.
Спасибо, Martin  :)

В последнем Develop бранче исправлена данная ошибка, c++ arm не нужен.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Титан on March 20, 2018, 19:24:36
Как пользоваться этим простому пользователю? Кинул всё из папки AIMP.SDK в папку AIMP и ни один плагин не отображается в меню плагинов
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Soolo on March 20, 2018, 19:55:37
Как пользоваться этим простому пользователю? Кинул всё из папки AIMP.SDK в папку AIMP и ни один плагин не отображается в меню плагинов
простому пользователю это не нужно, это для разработчиков плагинов
Title: Re: C# AIMP SDK 3.60/4.00
Post by: niksan321 on March 24, 2018, 15:45:49
народ что-то никак не могу заставить работать ни один демо плагин:
качаю от сюда релиз: https://github.com/martin211/aimp_dotnet/releases/download/AIMP.SDK_4.50.2042.11347/AIMP.SDK.zip

беру папку "dotnet_demo" кидаю в директорию плагинов аимпа, там 3 файла:
1. AIMP.SDK.dll
2. dotnet_demo.dll
3. dotnet_demo_plugin.dll

папку пробовал переименовывать в dotnet_demo_plugin всё равно не пашет
верися аимпа 4.50 билд 2058
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on March 26, 2018, 11:55:36
народ что-то никак не могу заставить работать ни один демо плагин:
качаю от сюда релиз: https://github.com/martin211/aimp_dotnet/releases/download/AIMP.SDK_4.50.2042.11347/AIMP.SDK.zip

Net Framework 4.6.2 установлен?
C++ Redistributable 2017 установлен?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: ypwl on August 19, 2018, 19:03:35
Где можно скачать (или кто может поделиться) уже собранным файлом AIMP.SDK.dll???
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on August 19, 2018, 19:06:36
Где можно скачать (или кто может поделиться) уже собранным файлом AIMP.SDK.dll???
Вот здесь.
https://www.nuget.org/packages/AimpSDK/
Title: Re: C# AIMP SDK 3.60/4.00
Post by: AvdyN on July 08, 2019, 13:40:17
Не срабатывает событие Player.TrackChanged. Подписался, переключаю песни, но мой код не срабатывает.
AIMP.SDK v. 4.50.2048
AIMP v. 4.51, build 2048

Получилось отлавливать это событие с помощью хука через Player.ServiceMessageDispatcher
Title: Re: C# AIMP SDK 3.60/4.00
Post by: AvdyN on July 10, 2019, 10:02:13
Martin, добавь пожалуйста документацию .xml в NuGet пакет. Получается в исходном проекте всё задокументировано, но при разработке подсказок нету.

Еще вопрос, что вынесено в пакеты AimpSDK.Symbols и AimpSDK.Sources?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on July 10, 2019, 10:20:06
Quote
Не срабатывает событие Player.TrackChanged.

Посмотрю на днях.

Quote
Martin, добавь пожалуйста документацию .xml в NuGet пакет.

Есть онлайн документация, вот тут https://martin211.github.io/aimp_dotnet_docs/api/AIMP.SDK.html (https://martin211.github.io/aimp_dotnet_docs/api/AIMP.SDK.html) НО не уверен на сколько она свежая

Quote
что вынесено в пакеты AimpSDK.Symbols и AimpSDK.Sources?
Symbols содержат отладочные файлы, они нужны если вы захотети продебажить код обёртки.
Sources содежит исходные файлы
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on July 10, 2019, 16:40:00
Quote
Не срабатывает событие Player.TrackChanged. Подписался, переключаю песни, но мой код не срабатывает.
Оно теперь не должно работать. Удалю его в следующем релизе. Теперь необходимо использовать Player.ServiceMessageDispatcher

Code: [Select]
    public class AimpMessageHook : IAimpMessageHook
    {
        public AimpActionResult CoreMessage(AimpMessages.AimpCoreMessageType message, int param1, int param2)
        {
            return AimpActionResult.OK;
        }
    }

public class Program : AimpPlugin
{
    private AimpMessageHook _hook;
    public override void Initialize()
    {
         _hook= new AimpMessageHook();
          Player.ServiceMessageDispatcher.Hook(_hook);
    }
}
Title: Re: C# AIMP SDK 3.60/4.00
Post by: AvdyN on July 12, 2019, 15:11:12
Есть онлайн документация, вот тут https://martin211.github.io/aimp_dotnet_docs/api/AIMP.SDK.html (https://martin211.github.io/aimp_dotnet_docs/api/AIMP.SDK.html) НО не уверен на сколько она свежая

Я имею ввиду файл с документацией AIMP.SDK.xml, который генерируется автоматически при сборке проекта. Когда он находится рядом с библиотекой AIMP.SDK.dll, то Visual Studio отображает описание полей, классов и т.д., что значительно облегчает разработку плагина.
Я скопировал этот файл вручную, но было бы неплохо, если бы он был в составе NuGet пакета.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: cubis123 on August 25, 2019, 20:56:17
When closing AIMPac.exe (AIMP Audio Converter) or AIMPate.exe (AIMP Advanced Tag Editor), even a completely empty plugin made with aimp_dotnet throws an exception (see attachment).
(https://www.aimp.ru/forum/index.php?topic=63088.0 for reproduction.)
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on August 25, 2019, 21:00:49
When closing AIMPac.exe (AIMP Audio Converter) or AIMPate.exe (AIMP Advanced Tag Editor), even a completely empty plugin made with aimp_dotnet throws an exception (see attachment).
(https://www.aimp.ru/forum/index.php?topic=63088.0 for reproduction.)

What the AIMP version you use? I'm not sure that it correct works on latest version. I'm going to test on new version in nearest future.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: cubis123 on August 28, 2019, 19:56:13
I'm using the latest version: AIMP v4.60, build 2144.
I tried updating to the latest version of aimp_dotnet (4.60.2144.1) and still getting the same error after closing AIMPac/AIMPate.
Even if the plugin just has empty Initialize/Dispose.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: AvdyN on September 26, 2019, 18:14:43
Добрый день, разрабатываю плагин для поиска текстов песен (https://www.aimp.ru/forum/index.php?topic=63331.0 (https://www.aimp.ru/forum/index.php?topic=63331.0)).

Использовал Action для того, чтобы можно было задать горячие клавиши для вызова окна. Но это приводит к утечке памяти. Создал пустой плагин, в методе Initialize всего одна строчка:
Code: [Select]
var action = Player.ActionManager.CreateAction();После закрытия плеера с отладчиком такая ошибка:
(https://i.ibb.co/Qpvx90V/aimp-memory-leak.png) (https://ibb.co/Qpvx90V)

Попробовал установить таким способом:
Code: [Select]
menuItem.Shortcut = Player.ActionManager.MakeHotkey(ModifierKeys.Shift, 0x4C);В пункте меню появилась надпись Shift+L, но по нажатию этих клавиш ничего не происходит, только по клику на сам пункт меню.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: AvdyN on September 26, 2019, 18:23:00
Еще утечки памяти происходят при каждом вызове CurrentFileInfo.
Достаточно добавить одну строчку в метод инициализации:
Code: [Select]
var fileInfo = Player.CurrentFileInfo;
И такая ошибка
Code: [Select]
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):
37 - 52 bytes: TDictionary<System.Integer,AIMP.Core.Services.Adapters.TAIMPMappedObjectAdapter.TLocalPropInfo> x 1
53 - 68 bytes: TAIMPActionAdapter x 1
309 - 340 bytes: Unknown x 1

Martin, посмотри пожалуйста
Title: Re: C# AIMP SDK 3.60/4.00
Post by: AvdyN on October 05, 2019, 13:57:29
Попробовал установить таким способом:
Code: [Select]
menuItem.Shortcut = Player.ActionManager.MakeHotkey(ModifierKeys.Shift, 0x4C);В пункте меню появилась надпись Shift+L, но по нажатию этих клавиш ничего не происходит, только по клику на сам пункт меню.

Я понял, установить сочетание клавиш можно только через Action. Свойство Shortcut нужно только для отображения клавиш в пункте меню
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on October 06, 2019, 13:41:40
Я понял, установить сочетание клавиш можно только через Action. Свойство Shortcut нужно только для отображения клавиш в пункте меню

Нет, Shortcut работать будет, но только в пределах элемента, к которому прикреплено меню. Action-ы же работают в пределах приложения.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Gagashaggy on November 16, 2019, 14:27:02
Добрый день, можете подсказать, какое событие происходит, если плейлист заканчивается и плеер переходит в режим ожидания? Судя по всему, это не AimpCoreMessageType.AIMP_MSG_CMD_STOP, а что-то другое, но никак не пойму, что именно. :-\
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on November 16, 2019, 16:17:28
Добрый день, можете подсказать, какое событие происходит, если плейлист заканчивается и плеер переходит в режим ожидания? Судя по всему, это не AimpCoreMessageType.AIMP_MSG_CMD_STOP, а что-то другое, но никак не пойму, что именно. :-\

Что именно вы хотите отследить? Прекращение проигрывания?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Gagashaggy on November 16, 2019, 16:20:42
Что именно вы хотите отследить? Прекращение проигрывания?
Да, прекращение проигрывания, но не когда пользователь сам его останавливает, а оно останавливается автоматически в связи с окончанием плейлиста.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on November 16, 2019, 16:43:45
Да, прекращение проигрывания, но не когда пользователь сам его останавливает, а оно останавливается автоматически в связи с окончанием плейлиста.

См. событие AIMP_MSG_EVENT_STREAM_END
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Desert dessert on November 27, 2019, 00:33:16
Martin, а насколько далеко в планах добавить IAIMPExtensionPlaybackQueue из SDK? Поискал, вроде его здесь ещё нет.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Gagashaggy on January 08, 2020, 16:42:10
Можно ли как-то определить, включён ли режим повтора? Мне удалось только найти событие AIMP_MSG_PROPERTY_REPEAT, возникающее при нажатии на кнопку повтора, причём даже так невозможно определить, включили повтор или выключили. Было бы удобно иметь свойство, например, IsRepeat, по аналогии с IsMute.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on January 08, 2020, 19:42:10
Можно ли как-то определить, включён ли режим повтора? Мне удалось только найти событие AIMP_MSG_PROPERTY_REPEAT, возникающее при нажатии на кнопку повтора, причём даже так невозможно определить, включили повтор или выключили. Было бы удобно иметь свойство, например, IsRepeat, по аналогии с IsMute.

Это не событие, а свойство. Вообще-то можно, почитайте справку по этому свойству.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Gagashaggy on June 12, 2020, 13:33:46
Почему объект IAimpPlaylistQueue при вызове метода GetItem(0, out IAimpPlaylistItem item) помещает в item значение null и возвращает результат Unexpected? Ппри том что вызов метода GetItemCount() возвращает 1, т.е. есть элемент в очереди.
Вызов _aimp.PlaybackQueueManager.GetNextTrack() также возвращает пустой объект IAimpPlaylistItem.
Каким образом можно узнать, следующий файл в очереди? Или это не реализовано?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on June 12, 2020, 21:11:47
Вызов _aimp.PlaybackQueueManager.GetNextTrack() также возвращает пустой объект IAimpPlaylistItem.
Каким образом можно узнать, следующий файл в очереди? Или это не реализовано?

GetNextTrack нужно вызывать, правильно заинициализировав ссылку, т.к. менеджер опирается на нее как на текущий трек
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on June 25, 2020, 09:51:57
Каким образом можно узнать, следующий файл в очереди? Или это не реализовано?

Там скорее всего баг. Проверю на днях.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Alek on June 25, 2020, 14:26:37
Я, по-видимому, совсем тугой. Захотелось мене написать плагин, собрал пустой,  AIMP его не видит, попробовал установить демо плагин, и его не видит, обновил AIMP, проверил, вроде, всё, что нужно, установлено, не видит и всё.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on June 25, 2020, 14:33:30
Я, по-видимому, совсем тугой. Захотелось мене написать плагин, собрал пустой,  AIMP его не видит, попробовал установить демо плагин, и его не видит, обновил AIMP, проверил, вроде, всё, что нужно, установлено, не видит и всё.

Скорее всего не установлен  c++ redistributable (https://support.microsoft.com/ru-ru/help/2977003/the-latest-supported-visual-c-downloads)
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Alek on June 25, 2020, 15:50:54
Скорее всего не установлен  c++ redistributable (https://support.microsoft.com/ru-ru/help/2977003/the-latest-supported-visual-c-downloads)
Спасибо, всё, что можно, переустановил, но ошибка была не в этом. Оказывается плагины написанные посредством этого SDK, по крайней мере у меня, не видны, если их просто закинуть в папку, но видны, если их запаковать и установить через AIMP, при этом другие плагины спокойно устанавливаются в любом виде.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on June 25, 2020, 15:56:37
Спасибо, всё, что можно, переустановил, но ошибка была не в этом. Оказывается плагины написанные посредством этого SDK, по крайней мере у меня, не видны, если их просто закинуть в папку, но видны, если их запаковать и установить через AIMP, при этом другие плагины спокойно устанавливаются в любом виде.

Плагин должен распологаться в своей отдельной папке в /AIMP/Plugins/[plugin_name]
При этом aimp_dotnet.dll должен быть переименован в соостветсвии с именем папки, [plugin_name]. Это обязательное условиние, т.к. данная dll является входной точкой для AIMP'a и она же подгружает уже ваш плагин.
Сам же плагин можно назвать как угодно
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Aphlexx on June 28, 2020, 21:19:58
У меня та же проблема, что и у Alek'а. Если собирать совсем пустой плагин и класть его в папку в соответствии с правилами, AIMP его не видит.
Если его папку упаковать в ZIP и установить через AIMP -- всё нормально.
При этом я также попробовал собрать демо-плагин dotnet_hooks -- он работает и из папки без установки.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Gagashaggy on July 17, 2020, 18:26:03
Подскажите, пожалуйста, насчёт настроек плагина. Я использую Properties.Settings.Default для хранения нужных значений. Физически они хранятся в файле, расположенном в папке AppData\Local\AIMP_DevTeam\DefaultDomain_Path_05yvznf5biq1yyjnvwynildnaj1kn3y0. В этой папке находятся папки с версиями плеера, например 4.60.2180.0. И уже в этой папке лежит файл user.config с настройками. В результате после обновления плеера настройки плагина сбрасываются на значения по умолчанию, поскольку папка с новой версией ещё не создана. Как сделать так, чтобы при обновлении плеера настройки плагина не сбрасывались?

Была идея, например, сделать проверку версии плеера при запуске и, если она отличается, создавать новую папку с нужной версией и копировать файл, но не даже не нашёл способ получить текущую версию плеера.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on July 17, 2020, 19:32:54
Я использую Properties.Settings.Default для хранения нужных значений.

Я бы порекомендовал использовать IAimpServiceConfig (Player.ServiceConfig) для хранения настроек плагина. Вы можете использовать Player.Core.GetPath() чтобы получить необходимый путь до плеера.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Gagashaggy on July 17, 2020, 21:09:24
Я бы порекомендовал использовать IAimpServiceConfig (Player.ServiceConfig) для хранения настроек плагина. Вы можете использовать Player.Core.GetPath() чтобы получить необходимый путь до плеера.
Спасибо, попробую. А можете ещё подсказать, как сделать, чтобы плагин работал только в самом плеере, но не в редакторе тегов и аудиоконвертере? Сейчас при их запуске запускаются новые экземпляры плагина, из-за чего лезут ошибки. Уже долго думаю, как это решить, но так и нет никаких идей.

И ещё у моего друга наблюдается странное поведение - после закрытия плеера у него стали пропадать горячие клавиши для действий в плагине (только локальные; глобальные и альтернативные глобальные остаются на месте), хотя у меня такого нет. Пытались дебажить на его компьютере, но ничего не обнаружили. Не знаете, с чем это может быть связано? У меня стоит портативная версия аимпа, а у него обычная, больше вроде никаких различий нет.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Artem on July 17, 2020, 21:45:28
Спасибо, попробую. А можете ещё подсказать, как сделать, чтобы плагин работал только в самом плеере, но не в редакторе тегов и аудиоконвертере? Сейчас при их запуске запускаются новые экземпляры плагина, из-за чего лезут ошибки. Уже долго думаю, как это решить, но так и нет никаких идей.

Идеологически так: на инициализации плагина вы спрашиваете у IAIMPCore нужные вам интерфейсы, если их нет - возвращаете ошибку.

И ещё у моего друга наблюдается странное поведение - после закрытия плеера у него стали пропадать горячие клавиши для действий в плагине (только локальные; глобальные и альтернативные глобальные остаются на месте), хотя у меня такого нет. Пытались дебажить на его компьютере, но ничего не обнаружили. Не знаете, с чем это может быть связано? У меня стоит портативная версия аимпа, а у него обычная, больше вроде никаких различий нет.

Хоткеи реализуются через наш механизм? Локальная клавиша ни с чем не конфликтует?
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on July 17, 2020, 21:50:17
А можете ещё подсказать, как сделать, чтобы плагин работал только в самом плеере, но не в редакторе тегов и аудиоконвертере? Сейчас при их запуске запускаются новые экземпляры плагина, из-за чего лезут ошибки. Уже долго думаю, как это решить, но так и нет никаких идей.

Используйте Player.Win32Manager.GetAimpHandle() и если возвращаемое значение не IntPtr.Zero, то значит открыт непосредственно AIMP. Так же можете попробовать использовать FindWindowByClass (https://www.pinvoke.net/default.aspx/user32/FindWindow.html), если способ не сработает. В дальнейшем планирую добавить возможность определения доступен сервис в данный момент или нет
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Gagashaggy on July 19, 2020, 14:56:07
Идеологически так: на инициализации плагина вы спрашиваете у IAIMPCore нужные вам интерфейсы, если их нет - возвращаете ошибку.
Вроде помогло избавиться от ошибок в самих приложениях (например, не открывались настройки из-за этого), но после закрытия окна редактора тегов или аудиоконвертера ошибка через несколько секунд всё равно появляется:
(https://i113.fastpic.ru/big/2020/0719/76/287a78aaa87b9460471b3345a91dcb76.png)
Дело в том, что если в редакторе тегов зайти в настройки и открыть список плагинов, то там тоже присутствует мой плагин. Даже если его выключить в настройках плеера, в редакторе тегов он всё равно останется включённым и при закрытии будет появляться ошибка. А вот если выключить его в настройках редактора тегов, то ошибки не будет.
В редакторе тегов некоторые плагины помечены жёлтым треугольником с восклицательным знаком и написано, что они подключены, но не используются. Хотелось бы понять, как сделать моему плагину такое же поведение.

Хоткеи реализуются через наш механизм? Локальная клавиша ни с чем не конфликтует?
Реализуются через ActionManager, конфликтов никаких нет, специально такие сочетания клавиш подбирали, которые не используются нигде. Других сторонних плагинов у него нет.

Edit: Заметил, что если в настройках плеера выключить плагин, перезапустить плеер, потом снова включить плагин, то у меня тоже пропадают горячие клавиши. Но просто при перезапуске плеера такого нет.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on July 19, 2020, 17:47:39
Edit: Заметил, что если в настройках плеера выключить плагин, перезапустить плеер, потом снова включить плагин, то у меня тоже пропадают горячие клавиши. Но просто при перезапуске плеера такого нет.

Вероятнее всего в sdk плагине бага. Попробую глянуть
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Gagashaggy on March 31, 2021, 22:33:16
Как правильно сохранять файл после редактирования тегов? Использую следующий код:
Code: [Select]
IAimpFileTagEditor tagEditor = aimp.ServiceFileTagEditor.EditFile(selectedItem.FileName).Result;
tagEditor.SetToAll(selectedItem.FileInfo);
tagEditor.Save();
При этом изменения отображаются в аимпе (в окне плейлиста и в редакторе тегов по F4), но сам файл в проводнике становится заблокированным (никакие теги не отображаются и недоступны для редактирования) до закрытия аимпа. При этом неважно, редактировался проигрываемый файл или какой-то другой: даже если воспроизведение полностью остановлено, происходит то же самое. При этом, если открыть редактор тегов и нажать кнопку Сохранить, появится сообщение, что файл занят другим процессом.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on April 01, 2021, 00:25:54
Code: [Select]
IAimpFileTagEditor tagEditor = aimp.ServiceFileTagEditor.EditFile(selectedItem.FileName).Result;
tagEditor.SetToAll(selectedItem.FileInfo);
tagEditor.Save();

Все верно, проблема в том, что tagEditor не уничтожился и держит файл. Я знаю об этой проблеме и работаю над ее решением.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Craftist on April 04, 2021, 14:28:35
Всем привет. Хочу написать плагин. Делаю всё по инструкции в первом посте, нет ничего. Даже если я в пустую папку засуну aimp_dotnet переименованный в название папки, Аимп не видит даже прокси папку.
Может ли это быть связано с портабл установкой аимпа? Я специально поставил портабл, чтобы модифицировать его, а не основной аимп.
Если не связано, может ли кто-нибудь, пожалуйста (желательно человек, которому на форуме можно доверять), в чистый портативный аимп загрузить какой-нибудь простой демоплагин, чтобы он у вас работал, и скинуть его через файлообменник мне? Я посмотрю, будет ли у меня он работать, если нет, тогда проблемы на моей стороне.
С++ поставил, не помогло.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on April 04, 2021, 14:45:42
Всем привет. Хочу написать плагин. Делаю всё по инструкции в первом посте, нет ничего. Даже если я в пустую папку засуну aimp_dotnet переименованный в название папки, Аимп не видит даже прокси папку.

Добрый день.
Скачайте последнюю версию сдк (https://github.com/martin211/aimp_dotnet/releases/download/4.70.2227.2/aimp.sdk.zip) там есть папка с демо-плагинами. Попробуйте какой-нибудь из них скопировать в папку плагинов и посмотреть появится ли он в списке. На портативной версии они тоже будут работать без проблем. Если не помогло, то скорее всего в системе не установлен c++ redistributable. Попробуйте скачать свежий и устновить отсюда (https://support.microsoft.com/ru-ru/topic/%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8-visual-c-%D0%B4%D0%BB%D1%8F-%D1%81%D0%BA%D0%B0%D1%87%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-2647da03-1eea-4433-9aff-95f26a218cc0)
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Craftist on April 04, 2021, 15:27:04
Добрый день.
Скачайте последнюю версию сдк (https://github.com/martin211/aimp_dotnet/releases/download/4.70.2227.2/aimp.sdk.zip) там есть папка с демо-плагинами. Попробуйте какой-нибудь из них скопировать в папку плагинов и посмотреть появится ли он в списке. На портативной версии они тоже будут работать без проблем. Если не помогло, то скорее всего в системе не установлен c++ redistributable. Попробуйте скачать свежий и устновить отсюда (https://support.microsoft.com/ru-ru/topic/%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8-visual-c-%D0%B4%D0%BB%D1%8F-%D1%81%D0%BA%D0%B0%D1%87%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-2647da03-1eea-4433-9aff-95f26a218cc0)

Я попробовал и на последней версии сдк, и на первой, не работает ни один демо плагин ни на одной версии.
C++ redistributable установлен, не помогает.
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on April 05, 2021, 13:12:14
C++ redistributable установлен, не помогает.

Странно, на свежеустановленной Windows 10, с последней версией C++ redistributable все работает.
Попробуйте проанализировать какаие библиотеки не подгрузились. Для этого сачайте, отсюда https://github.com/lucasg/Dependencies/releases , Dependencies_x86_Release.zip. Запустите
 DependenciesGui.exe и в нем откройте sdk/aimp_dotnet.dll.
Если все нормально, то не должно быть модулей которые не подгрузились (на oleut32.dll можно не обращать внимание)
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Martin on April 09, 2021, 00:24:57
Как правильно сохранять файл после редактирования тегов? Использую следующий код:
Code: [Select]
IAimpFileTagEditor tagEditor = aimp.ServiceFileTagEditor.EditFile(selectedItem.FileName).Result;
tagEditor.SetToAll(selectedItem.FileInfo);
tagEditor.Save();
При этом изменения отображаются в аимпе (в окне плейлиста и в редакторе тегов по F4), но сам файл в проводнике становится заблокированным (никакие теги не отображаются и недоступны для редактирования) до закрытия аимпа. При этом неважно, редактировался проигрываемый файл или какой-то другой: даже если воспроизведение полностью остановлено, происходит то же самое. При этом, если открыть редактор тегов и нажать кнопку Сохранить, появится сообщение, что файл занят другим процессом.

Обновил СДК, скачайте новый Nuget пакет. Теперь, когда вы закончили редактирование, сделайте tagEditor.Dispose(). Это должно освободить ресурсы и разблокировать файл. Либо используйте using (var tagEditor = ....)
Title: Re: C# AIMP SDK 3.60/4.00
Post by: flipworld on February 03, 2022, 13:07:15
Добрый день!
Обнаружил небольшой баг

Code: [Select]
ModifierKeys.Shift | ModifierKeys.Control,//Bug приводит к комбинации Alt+Shift+S
Title: Re: C# AIMP SDK 3.60/4.00
Post by: Gagashaggy on March 14, 2023, 23:16:02
В 64-битном аимпе не работает. Не видит вообще плагин, а при попытке установить из архива выдаёт ошибку "The package has no 64-bit binaries". В Visual Studio поставил целевую платформу x64 - ничего не меняется.