AIMP Forum

AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: HardRock on June 10, 2016, 15:55:19

Title: Плагин синхронизации статистики
Post by: HardRock on June 10, 2016, 15:55:19
Всем привет, хочу сделать свой плагин.
СДК скачал, но там хелпы битые, все страницы пустые, но может это 10ая винда их так открывает.
У меня почти весь опыт это веб и мобильная разработка, для десктопа ничего не делал ни разу, разве что скрипты на яве.

По этому прошу помощи, расскажите пожалуйста с чего начать ?
какое ИДЕ поставить ?
какой язык выбрать ?
есть ли документация по API ?
что делать с пустыми хелпами ?
может я где-то пропустил "Hello, world!" туториал ?

хочу сделать плагин для работы с данными статистики, прослушивания, рейтинги и тд...
то есть в принципе работы с интерфейсом практически нет, разве что настройки какие-то потом придумаю, но то уже такое ...
Title: Re: С чего начать ?
Post by: Soolo on June 10, 2016, 15:58:36
хелпы битые, все страницы пустые, но может это 10ая винда их так открывает.
в свойствах файла нажмите "разблокировать"

какой язык выбрать ?
а на каком умеете?
SDK есть для Delphi и C++

может я где-то пропустил "Hello, world!" туториал ?
Демки есть
Title: Re: С чего начать ?
Post by: HardRock on June 10, 2016, 15:59:59
в свойствах файла нажмите "разблокировать"

спасибо  :)
Title: Re: С чего начать ?
Post by: HardRock on June 10, 2016, 18:26:13
в свойствах файла нажмите "разблокировать"
а на каком умеете?
SDK есть для Delphi и C++
Демки есть

а есть проекты на C++ ?
в СДК демки только на делфи, а от C++ только *.h файлы, или этого должно быть достаточно ?
Title: Re: С чего начать ?
Post by: Artem on June 10, 2016, 18:40:50
а есть проекты на C++ ?
в СДК демки только на делфи, а от C++ только *.h файлы, или этого должно быть достаточно ?

Демок на С++ нет. В принципе, дельфевских демок достаточно для понимания, как это работает
Title: Re: С чего начать ?
Post by: HardRock on June 10, 2016, 20:06:25
Демок на С++ нет. В принципе, дельфевских демок достаточно для понимания, как это работает

буду пытаться. раз больше ничего не остаётся, просто делфи вообще не использовал ниразу
Title: Re: С чего начать ?
Post by: esprit on June 10, 2016, 21:17:03
Можете посмотреть в этой (https://www.aimp.ru/forum/index.php?topic=52150.0) теме. Там есть ссылки на исходники плагинов на С++.
Title: Re: С чего начать ?
Post by: HardRock on June 13, 2016, 19:17:01
Можете посмотреть в этой (https://www.aimp.ru/forum/index.php?topic=52150.0) теме. Там есть ссылки на исходники плагинов на С++.

Спасибо, один плагин всё таки получилось сбилдить и подключить к аимпу)

А теперь я смотрю в АПИ, и уже начинаю сомневаться что там есть то что мне нужно, через апи есть возможность получить доступ к статистике воспроизведения и вообще делать с нею какие-то манипуляции ?
Title: Re: С чего начать ?
Post by: Artem on June 13, 2016, 19:51:54
через апи есть возможность получить доступ к статистике воспроизведения и вообще делать с нею какие-то манипуляции ?

Доступ есть. Манипуляции - нет (разве что оценку выставить). Какие манипуляции нужны?
Title: Re: С чего начать ?
Post by: HardRock on June 13, 2016, 21:03:28
Доступ есть. Манипуляции - нет (разве что оценку выставить). Какие манипуляции нужны?

на первых порах хотелось бы разобраться как получить/установить рейтинг, количество прослушиваний, оценку

и еще нужен путь к файлу на диске

идея плагина состоит в том, чтобы он занимался синхронизацией статистики между разными устройствами,
беда в том что я вебом и немного мобильной разработкой занимаюсь уже давно, а в десктопных делах на c++ опыта нету совсем
Title: Re: С чего начать ?
Post by: Artem on June 13, 2016, 21:19:40
на первых порах хотелось бы разобраться как получить/установить рейтинг, количество прослушиваний, оценку

идея плагина состоит в том, чтобы он занимался синхронизацией статистики между разными устройствами,

Синхронизацию вы сделать не сможете. Поскольку рейтинг и количество прослушиваний доступны только для чтения. Рейтинг вообще рассчитывается динамически по истории воспроизведения.

беда в том что я вебом и немного мобильной разработкой занимаюсь уже давно, а в десктопных делах на c++ опыта нету совсем

Разве есть принципиальная разница?
Title: Re: С чего начать ?
Post by: HardRock on June 13, 2016, 21:49:49
Синхронизацию вы сделать не сможете. Поскольку рейтинг и количество прослушиваний доступны только для чтения. Рейтинг вообще рассчитывается динамически по истории воспроизведения.

Разве есть принципиальная разница?

плохо :(
мне всегда не хватало общей базы по своим любимым песням, нельзя же в голове удержать всё что ты когда-то любил слушать, очень хочется всё это централизовать, хотя бы для себя, но уверен это много кому интересно


читать C++ сложно, без подготовки :)
Title: Re: С чего начать ?
Post by: HardRock on June 15, 2016, 18:55:51
По найденным примерам кое как собрал до кучи код, скомпилось всё, но почему-то плагин не появляется в списке аимпа.

почти точно такой же плагин из другого примера сработал нормально и добавился в плеер, а этот мой вариант никак не хочет :(

Если не сложно, посмотрите пожалуйста в исходники, в чём может быть проблема ?
Title: Re: С чего начать ?
Post by: esprit on June 15, 2016, 19:14:26
У вас не указан Module Definition File (см. картинку ниже). ПКМ на пункте проекта (а не солюшена), в появившемся окне в разделе "Linker/Input" укажите нужный файл (в данном случае exports.def). Только перед этим лучше сверху в поле "Configuration" задать как "All Configurations", чтобы дважды не указывать этот файл.
(http://i.imgur.com/SbK7dtL.png)
 
Можно экспортировать функции без всяких def файлов, но у меня не получалось. Если хотите - погуглите, такой способ будет проще.
Title: Re: С чего начать ?
Post by: HardRock on June 15, 2016, 19:21:39
У вас не указан Module Definition File (см. картинку ниже). ПКМ на пункте проекта (а не солюшена), в появившемся окне в разделе "Linker/Input" укажите нужный файл (в данном случае exports.def). Только перед этим лучше сверху в поле "Configuration" задать как "All Configurations", чтобы дважды не указывать этот файл.
(http://i.imgur.com/SbK7dtL.png)
 
Можно экспортировать функции без всяких def файлов, но у меня не получалось. Если хотите - погуглите, такой способ будет проще.
Зарботало !
спасибо огромное )
файл этот есть но я не шарил что его куда-то нужно прописать :)
Title: Re: С чего начать ?
Post by: HardRock on July 04, 2016, 16:18:07
Еще раз всем привет.

Продолжаю разбираться что к чему.
Для начала хочу разобраться в каждом нужном мне куске логики, чтобы потом всё собрать до кучи.
Недели 3 назад разбирался с sqlite на C++, вроде всё получилось, запросы выполнялись без проблем.
Потом я был занят работой, и вот сегодня снова сел поковыряться, и теперь у меня конект срабатывает нормально, но когда выполняю запрос получаю "database is locked".

В коде ничего поменять не успел.

вот теперь не знаю, как быть если плеер лочит по своему желанию базу, и из плагина к ней никак не подключится, то всё пропало (

Версия 4.02, 1725
Title: Re: С чего начать ?
Post by: Soolo on July 04, 2016, 16:26:50
Еще раз всем привет.

Продолжаю разбираться что к чему.
Для начала хочу разобраться в каждом нужном мне куске логики, чтобы потом всё собрать до кучи.
Недели 3 назад разбирался с sqlite на C++, вроде всё получилось, запросы выполнялись без проблем.
Потом я был занят работой, и вот сегодня снова сел поковыряться, и теперь у меня конект срабатывает нормально, но когда выполняю запрос получаю "database is locked".

В коде ничего поменять не успел.

вот теперь не знаю, как быть если плеер лочит по своему желанию базу, и из плагина к ней никак не подключится, то всё пропало (

Версия 4.02, 1725
Да. Во время работы плеера база заблокирована.
Что вы хотите делать с базой? Распишите подробно
Title: Re: С чего начать ?
Post by: HardRock on July 04, 2016, 16:34:19
Да. Во время работы плеера база заблокирована.
Что вы хотите делать с базой? Распишите подробно

для начала нужно получать информацию о расположении файлов в библиотеке и посчитать им уникальный хеш, потом всё это дело сохранить в таблицу и отравить на сервер
затем буду пытаться добиться что бы на разных устройствах одни и те же файлы узнавались по посчитанному хешу, ведь он должен совпадать, тогда останeтся только синхронизировать изменения связанные со статистикой прослушивания
Title: Re: С чего начать ?
Post by: Artem on July 04, 2016, 19:29:41
для начала нужно получать информацию о расположении файлов в библиотеке и посчитать им уникальный хеш,

Это плохая идея. Время от времени структура базы меняется, иногда даже кардинально.

затем буду пытаться добиться что бы на разных устройствах одни и те же файлы узнавались по посчитанному хешу, ведь он должен совпадать, тогда останeтся только синхронизировать изменения связанные со статистикой прослушивания

Хеш будет совпадать только в том случае, если человек скопировал конкретно этот файл на свое устройство. Если в файле были поправлены теги, или он с более высоким битрейтом - хеш будет другим.
Title: Re: С чего начать ?
Post by: HardRock on July 05, 2016, 11:14:03
Это плохая идея. Время от времени структура базы меняется, иногда даже кардинально.

Хеш будет совпадать только в том случае, если человек скопировал конкретно этот файл на свое устройство. Если в файле были поправлены теги, или он с более высоким битрейтом - хеш будет другим.

я думал сделать свою таблицу, можно конечно сделать свою базу, но тогда нужен доступ хотя бы для чтения данных

как вариант скопировать файл базы целиком, и работать с ним, потом удалять его и копировать по новому по мере надобности, но это костыль

с хешом я уже всё продумал, для mp3 буду делать хеш аудио даты, игнорируя теги, а у flac есть метатег с хешом, главное хотя бы эти 2 основных формата сделать

в общем чтение из базы нужно, без него никак
Title: Re: Плагин синхронизации статистики
Post by: JD on July 05, 2016, 11:57:49
Не проще ли на всех устройствах использовать одинаковую структуру каталогов для музыки?
Никаких плагинов не надо тогда, достаточно синхронизировать файл базы (это элементарно, хоть через облако).
Всё прозрачно работает и никаких костылей.
Title: Re: Плагин синхронизации статистики
Post by: HardRock on July 05, 2016, 12:23:15
Не проще ли на всех устройствах использовать одинаковую структуру каталогов для музыки?
Никаких плагинов не надо тогда, достаточно синхронизировать файл базы (это элементарно, хоть через облако).
Всё прозрачно работает и никаких костылей.

у меня дома музыки около терабайта, а на рабочем ноуте гиг 50 ...
если я домашнюю базу вставлю в ноут, что произойдёт когда аимп не найдёт файлы ?
и что будет если, на ноуте появится новая музыка, а дома еще нет ?
не думаю что это стабильное решение

в идеале конечно иметь общее хранилище музыки, но аимп всё равно на каждом устройстве свой
Title: Re: Плагин синхронизации статистики
Post by: JD on July 05, 2016, 13:05:02
у меня дома музыки около терабайта, а на рабочем ноуте гиг 50 ...
если я домашнюю базу вставлю в ноут, что произойдёт когда аимп не найдёт файлы ?
и что будет если, на ноуте появится новая музыка, а дома еще нет ?
не думаю что это стабильное решение

в идеале конечно иметь общее хранилище музыки, но аимп всё равно на каждом устройстве свой
Да ничего не произойдёт. Снимите галку "удалять несуществующие" и всё.
Ну появится на ноуте новая музыка, Вы хотите её в базу добавить или нет? Если хотите, то рано или поздно всё равно же принесёте музыкальные файлы с ноута на комп. А если не хотите, зачем вообще тогда что-то синхронизировать, если у Вас априори разные библиотеки.
Вы же то же самое решение предлагаете, только закостыленное
Title: Re: Плагин синхронизации статистики
Post by: HardRock on July 05, 2016, 13:30:56
Да ничего не произойдёт. Снимите галку "удалять несуществующие" и всё.
Ну появится на ноуте новая музыка, Вы хотите её в базу добавить или нет? Если хотите, то рано или поздно всё равно же принесёте музыкальные файлы с ноута на комп. А если не хотите, зачем вообще тогда что-то синхронизировать, если у Вас априори разные библиотеки.
Вы же то же самое решение предлагаете, только закостыленное

они не совсем разные, просто на ноуте лежит то что слушаю в последнее время

дома структура аудиотеки может поменяться

копировать каждый раз базу - штука стрёмная, и больше похожа на костыль
об этом нужно помнить, и постоянно это делать. какая уже тут автоматизация ?

с плагином намного лучше, поставил, настроил и забыл

если идея не нравится, я никого не заставляю в ней участвовать
мне давно хотелось сделать такую штуку, и попыток было много разных. но универсального решения всё еще нет
Title: Re: Плагин синхронизации статистики
Post by: JD on July 05, 2016, 13:46:57
Ну вот смотрите, Вы хотите по уникальному признаку найти файл в домашней базе и подкрутить статистику.
Ваш признак - хэш, которому доверять нельзя, как уже здесь выяснили. Я предлагаю в качестве уникального признака путь до файла - даже если теги поменяются, ничего страшного не произойдёт.
Далее. Не нужно помнить/каждый раз копировать базу, это-то как раз должно быть автоматически, в первом же моём сообщении специально указано. Положил базу в облако - и забыл. Послушал дома, пришёл на работу - БД уже синхронизирована, послушал на работе, пришёл домой - все новые прослушивания на месте. Ни надо ни о чём думать.

Короче, считаю спор непродуктивным, если Вам кажется плагинный вариант проще - пожалуйста, надеюсь что-то выйдет.

Я не говорю, что Ваша идея плоха. Нет, цель Вы преследуте благую. Я толкую о том, что в текущих реалиях плагин писать не имеет смысла, можно решить проблему подручными средствами.
Пока AIMP не научится сам делать что-то такое - все решения будут костыльными (Вы же всё равно доступ к БД в плагине не получите).
Верно заметили, что универсального решения нет. Нужна поддержка от раззработчиков AIMP'а.

Удачи.
Title: Re: Плагин синхронизации статистики
Post by: HardRock on July 05, 2016, 15:24:39
Ну вот смотрите, Вы хотите по уникальному признаку найти файл в домашней базе и подкрутить статистику.
Ваш признак - хэш, которому доверять нельзя, как уже здесь выяснили. Я предлагаю в качестве уникального признака путь до файла - даже если теги поменяются, ничего страшного не произойдёт.
Далее. Не нужно помнить/каждый раз копировать базу, это-то как раз должно быть автоматически, в первом же моём сообщении специально указано. Положил базу в облако - и забыл. Послушал дома, пришёл на работу - БД уже синхронизирована, послушал на работе, пришёл домой - все новые прослушивания на месте. Ни надо ни о чём думать.

Короче, считаю спор непродуктивным, если Вам кажется плагинный вариант проще - пожалуйста, надеюсь что-то выйдет.

Я не говорю, что Ваша идея плоха. Нет, цель Вы преследуте благую. Я толкую о том, что в текущих реалиях плагин писать не имеет смысла, можно решить проблему подручными средствами.
Пока AIMP не научится сам делать что-то такое - все решения будут костыльными (Вы же всё равно доступ к БД в плагине не получите).
Верно заметили, что универсального решения нет. Нужна поддержка от раззработчиков AIMP'а.

Удачи.

я объяснил что хеш делается по аудио дате файла, игнорируя всё остальное, никакая метадата не участвует, и хеш получается стабильным, это распространённая практика

всё еще нужен доступ к базе, или альтернатива ему
Title: Re: Плагин синхронизации статистики
Post by: Artem on July 05, 2016, 16:09:15
я объяснил что хеш делается по аудио дате файла, игнорируя всё остальное, никакая метадата не участвует, и хеш получается стабильным, это распространённая практика

Простой хеш тут не подходит - допустим, вы заменили файл более качественным или переизданием. Есть специальные алгоритмы расчета слепка аудиоданных, которые не берут во внимание громкость и отклонения в пределах шумов.

Что же касается синхронизации
Прямой доступ к базе - это плохо:
1. Структура базы может меняться от версии к версии.
2. Фонотека предусматривает не только локальные файлы, но и совершенно другие источники данных. К ним вы напрямую доступ уже не получите.

На сколько я понял, то на текущий момент вам нужно лишь получить список полных путей для всех файлов, что проиндексированы фонотекой, так?
Title: Re: Плагин синхронизации статистики
Post by: HardRock on July 11, 2016, 11:22:41
Простой хеш тут не подходит - допустим, вы заменили файл более качественным или переизданием. Есть специальные алгоритмы расчета слепка аудиоданных, которые не берут во внимание громкость и отклонения в пределах шумов.

Что же касается синхронизации
Прямой доступ к базе - это плохо:
1. Структура базы может меняться от версии к версии.
2. Фонотека предусматривает не только локальные файлы, но и совершенно другие источники данных. К ним вы напрямую доступ уже не получите.

На сколько я понял, то на текущий момент вам нужно лишь получить список полных путей для всех файлов, что проиндексированы фонотекой, так?

да, нужны пути к физическим файлам, еще нужна возможность обновлять количество прослушиваний и оцентку

по поводу хеша, я думал над таким вариантом, нашёл пару либ, на эту тему
но всё таки одинаковые песни с разным уровнем громкости, или разной датой релиза, тоже нужно отличать, помню часто сам выбирал из десятка вариантов, одной и той же песни, тот в котором громкость по больше + версия не урезанная, или лайв версия

хеш по аудио дате сделать легче, а сравнение по слепку можно будет добавить как опцию