1 (изменено: Тимур, 2012-09-29 15:54:40)

Тема: AHK: Вывод информации о треке из AIMP

Есть у кого-нибудь скрипт о выводе названии исполнителя и трека?

Буду очень благодарен!

2

Re: AHK: Вывод информации о треке из AIMP

Глобальный хоткей на current file info?

3

Re: AHK: Вывод информации о треке из AIMP

Xwansu пишет:

Глобальный хоткей на current file info?

Спасибо, конечно, но нужен скрипт

4

Re: AHK: Вывод информации о треке из AIMP

Если у кого-нибудь есть, поделитесь, пожалуйста))) Очень нужен

5

Re: AHK: Вывод информации о треке из AIMP

Как из AIMP, не знаю, но можно извлечь информацию непосредственно из файла.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Вывод информации о треке из AIMP

teadrinker пишет:

Как из AIMP, не знаю, но можно извлечь информацию непосредственно из файла.

Нужно, чтобы была информация о играющем в текущий момент треке

7

Re: AHK: Вывод информации о треке из AIMP

Нет, не в курсе, как узнать, какой файл звучит, да и AIMP'ом не пользуюсь.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Вывод информации о треке из AIMP

teadrinker пишет:

Нет, не в курсе, как узнать, какой файл звучит, да и AIMP'ом не пользуюсь.

Жаль. Ну может у Вас есть аналогичный скрипт под Winamp? Хотя очень нужен под AIMP

9

Re: AHK: Вывод информации о треке из AIMP

Для Winamp скрипта тоже нет, посмотрю попозже, если будет время.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Вывод информации о треке из AIMP

teadrinker пишет:

Для Winamp скрипта тоже нет, посмотрю попозже, если будет время.

Спасибо Вам большое!

11

Re: AHK: Вывод информации о треке из AIMP

f4

12 (изменено: Irbis, 2012-10-02 20:07:15)

Re: AHK: Вывод информации о треке из AIMP

Есть плагин, записывающий инфо о текущем треке в файл, а его можно и скриптом обработать.
Имеются исходники на Дельфи, там можно поразбирать, как плагин работает, возможно и на AHK переделать получится.

13

Re: AHK: Вывод информации о треке из AIMP

Irbis пишет:

Есть плагин, записывающий инфо о текущем треке в файл, а его можно и скриптом обработать.
Имеются исходники на Дельфи, там можно поразбирать, как плагин работает, возможно и на AHK переделать получится.

Все было бы отлично, если этот плагин был встроен по умолчанию..или хотя бы знать Дельфи )

14

Re: AHK: Вывод информации о треке из AIMP

В файле AIMPSDKRemote.h описаны способы взаимодействия с плеером «извне».
Получение информации о треке:

AIMP_GetTrackInfo() {
    static AIMPRemoteAccessClass := "AIMP2_RemoteInfo"
        , AIMPRemoteAccessMapFileSize := 2048
        , FILE_MAP_READ := 4


    if !hFile := DllCall("OpenFileMapping"
        , "UInt", FILE_MAP_READ
        , "UInt", true
        , "Ptr",  &AIMPRemoteAccessClass)
    {
        return false
    }

    info := DllCall("MapViewOfFile"
        , "Ptr",  hFile
        , "UInt", FILE_MAP_READ
        , "UInt", 0
        , "UInt", 0
        , "Ptr",  AIMPRemoteAccessMapFileSize)

    size := NumGet(info|0, 0, "UInt")
    textOffset := info + size

    albumLen    := NumGet(info|0, 40, "UInt")
    artistLen   := NumGet(info|0, 44, "UInt")
    dateLen     := NumGet(info|0, 48, "UInt")
    fileNameLen := NumGet(info|0, 52, "UInt")
    genreLen    := NumGet(info|0, 56, "UInt")
    titleLen    := NumGet(info|0, 60, "UInt")

    TrackInfo := {
    (Join,
        active     : NumGet(info|0, 4,  "Int")
        bitRate    : NumGet(info|0, 8,  "UInt")
        channels   : NumGet(info|0, 12, "UInt")
        duration   : NumGet(info|0, 16, "UInt")
        fileSize   : NumGet(info|0, 20, "Int64")
        rating     : NumGet(info|0, 28, "UInt")
        sampleRate : NumGet(info|0, 32, "UInt")
        trackID    : NumGet(info|0, 36, "UInt")
        album      : StrGet(textOffset,                    albumLen)
        artist     : StrGet(textOffset += albumLen * 2,    artistLen)
        date       : StrGet(textOffset += artistLen * 2,   dateLen)
        fileName   : StrGet(textOffset += dateLen * 2,     fileNameLen)
        genre      : StrGet(textOffset += fileNameLen * 2, genreLen)
        title      : StrGet(textOffset += genreLen * 2,    titleLen)
    )}

    DllCall("CloseHandle", "Ptr", hFile)
    return TrackInfo
}

Результат работы функции — ассоциативный массив, содержащий в соответствующих полях всю доступную информацию о файле, или 0, если «что-то пошло не так».

Space::
    track := AIMP_GetTrackInfo()
    MsgBox % track.artist " — " track.title
    return

При нажатии пробела — «вывод названия исполнителя и трека».

15 (изменено: serzh82saratov, 2013-05-16 08:41:34)

Re: AHK: Вывод информации о треке из AIMP

creature.ws
Супер!

А возможно получить весь текущий плейлист желательно состоящий из полных путей, и запустить нужный из них на проигрывание?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Вывод информации о треке из AIMP

получить весь текущий плейлист

В AIMPSDKRemote.h нет упоминаний о подобном.

17

Re: AHK: Вывод информации о треке из AIMP

А где лежит AIMPSDKRemote.h, я его ненашёл.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

18

Re: AHK: Вывод информации о треке из AIMP

Первая ссылка в гугле

19

Re: AHK: Вывод информации о треке из AIMP

Первая ссылка в гугле

Как всегда, очки на носу потерял Подумал что файл должен быть в папке с программой.

Так понял что есть ещё оконные сообщения, но непонял как ими пользоватся:


WM_USER := 0x400
WM_AIMP_PROPERTY := WM_USER + 0x77
AIMP_RA_PROPVALUE_GET := 0 
AIMP_RA_PROPERTY_VERSION := 0x10

/* 
// Messages, which you can send to window with "AIMPRemoteAccessClass" class
// You can receive Window Handle via FindWindow function (see MSDN for details)
// + How to:
//     GET:  SendMessage(Handle, WM_AIMP_PROPERTY, PropertyID | AIMP_RA_PROPVALUE_GET, 0);
//     SET:  SendMessage(Handle, WM_AIMP_PROPERTY, PropertyID | AIMP_RA_PROPVALUE_SET, NewValue);
//
//     Receive Change Notification:
//       1) You should register notification hook using AIMP_RA_CMD_REGISTER_NOTIFY command
//       2) When property will change you receive WM_AIMP_NOTIFY message with following params:
//          WParam: AIMP_RA_NOTIFY_PROPERTY (Notification ID)
//          LParam: Property ID
*/

SendMessage, WM_AIMP_PROPERTY, AIMP_RA_PROPERTY_VERSION | AIMP_RA_PROPVALUE_GET, 0, , AIMP3
MsgBox % ErrorLevel
Return

Структура сообщения неверная, и что-то про окно "AIMPRemoteAccessClass", может не то окно указываю.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20 (изменено: creature.ws, 2013-05-16 15:04:07)

Re: AHK: Вывод информации о треке из AIMP

Константа AIMPRemoteAccessClass содержит имя класса окна в которое следует отправлять упомянутые сообщения.

21

Re: AHK: Вывод информации о треке из AIMP

creature.ws
Спасибо, понял.
Узнать громкость:

SendMessage, 0x0400+0x77, 0x50 , , , ahk_class AIMP2_RemoteInfo
MsgBox % ErrorLevel

Установить громкость:

SendMessage, 0x0400+0x77, 0x50 | 1, 100, , ahk_class AIMP2_RemoteInfo

Ещё вопрос, как использовать это: "AIMP_RA_NOTIFY_TRACK_INFO = AIMP_RA_NOTIFY_BASE + 1" так понял оно тоже должно получать инфо о треке?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22 (изменено: creature.ws, 2013-05-17 14:53:16)

Re: AHK: Вывод информации о треке из AIMP

«Оно» — id, передаваемый в wParam окну, слушающему WM_AIMP_NOTIFY. Зарегистрировать окно скрипта в качестве получателя уведомлений о (в часности) смене трека можно с помощью WM_AIMP_COMMAND и AIMP_RA_CMD_REGISTER_NOTIFY.

+ -

Я плеером обсуждаемым не пользуюсь, в допиливании полноценной библиотеки не заинтересован.

23

Re: AHK: Вывод информации о треке из AIMP

Вот, что у меня получилось)


DetectHiddenWindows, on
IfWinExist, ahk_class Winamp v1.x ; проверяем включен ли АИМП
{
    SendMessage, 0x400,, 104,, ahk_class Winamp v1.x ; проверяем не стоит ли на паузе
    if ErrorLevel = 1
    {
        WinGetTitle, Title, ahk_class Winamp v1.x ; получаем заголовок окна; он содержит имя исполнителя и название песни
        FoundPos := RegExMatch(Title, ". ") 
        StringTrimLeft, FoundPos, Title, FoundPos+1
        StringTrimRight, Title, FoundPos, 8    ; обрезаем и записываем в переменную Title
    }
}
Space::
msgbox %Title%
return

24

Re: AHK: Вывод информации о треке из AIMP

Браво. Код из сообщения #14 написан зря.

25

Re: AHK: Вывод информации о треке из AIMP

creature.ws пишет:

Браво. Код из сообщения #14 написан зря.

Отнюдь не зря! Из кода, который в посте #14 можно извлечь всю информацию о треке. А из поста #23 - только имя исполнителя и название песни

26

Re: AHK: Вывод информации о треке из AIMP

creature.ws пишет:

В файле AIMPSDKRemote.h описаны способы взаимодействия с плеером «извне».
Получение информации о треке:

AIMP_GetTrackInfo() {
    static AIMPRemoteAccessClass := "AIMP2_RemoteInfo"
        , AIMPRemoteAccessMapFileSize := 2048
        , FILE_MAP_READ := 4


    if !hFile := DllCall("OpenFileMapping"
        , "UInt", FILE_MAP_READ
        , "UInt", true
        , "Ptr",  &AIMPRemoteAccessClass)
    {
        return false
    }

    info := DllCall("MapViewOfFile"
        , "Ptr",  hFile
        , "UInt", FILE_MAP_READ
        , "UInt", 0
        , "UInt", 0
        , "Ptr",  AIMPRemoteAccessMapFileSize)

    size := NumGet(info|0, 0, "UInt")
    textOffset := info + size

    albumLen    := NumGet(info|0, 40, "UInt")
    artistLen   := NumGet(info|0, 44, "UInt")
    dateLen     := NumGet(info|0, 48, "UInt")
    fileNameLen := NumGet(info|0, 52, "UInt")
    genreLen    := NumGet(info|0, 56, "UInt")
    titleLen    := NumGet(info|0, 60, "UInt")

    TrackInfo := {
    (Join,
        active     : NumGet(info|0, 4,  "Int")
        bitRate    : NumGet(info|0, 8,  "UInt")
        channels   : NumGet(info|0, 12, "UInt")
        duration   : NumGet(info|0, 16, "UInt")
        fileSize   : NumGet(info|0, 20, "Int64")
        rating     : NumGet(info|0, 28, "UInt")
        sampleRate : NumGet(info|0, 32, "UInt")
        trackID    : NumGet(info|0, 36, "UInt")
        album      : StrGet(textOffset,                    albumLen)
        artist     : StrGet(textOffset += albumLen * 2,    artistLen)
        date       : StrGet(textOffset += artistLen * 2,   dateLen)
        fileName   : StrGet(textOffset += dateLen * 2,     fileNameLen)
        genre      : StrGet(textOffset += fileNameLen * 2, genreLen)
        title      : StrGet(textOffset += genreLen * 2,    titleLen)
    )}

    DllCall("CloseHandle", "Ptr", hFile)
    return TrackInfo
}

Результат работы функции — ассоциативный массив, содержащий в соответствующих полях всю доступную информацию о файле, или 0, если «что-то пошло не так».

Space::
    track := AIMP_GetTrackInfo()
    MsgBox % track.artist " — " track.title
    return

При нажатии пробела — «вывод названия исполнителя и трека».

Дайте код, пожалуйста, на AHK 1.0.48.05 (Не L)

27 (изменено: creature.ws, 2013-05-17 18:18:20)

Re: AHK: Вывод информации о треке из AIMP

Дайте код, пожалуйста, на AHK 1.0.48.05 (Не L)

И чтоб под windows 95 работал. 4 года с окончания поддержки — слишком малый срок для отказа от приложения.

28

Re: AHK: Вывод информации о треке из AIMP

creature.ws пишет:

Дайте код, пожалуйста, на AHK 1.0.48.05 (Не L)

И чтоб под windows 95 работал. 4 года с окончания поддержки — слишком малый срок для отказа от приложения.

Я до сих пор на нем работаю

29

Re: AHK: Вывод информации о треке из AIMP

«Оно» — id, передаваемый в wParam окну, слушающему WM_AIMP_NOTIFY. Зарегистрировать окно скрипта в качестве получателя уведомлений о (в часности) смене трека можно с помощью WM_AIMP_COMMAND и AIMP_RA_CMD_REGISTER_NOTIFY.

Спасибо, буду пробовать.

Я плеером обсуждаемым не пользуюсь, в допиливании полноценной библиотеки не заинтересован.

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

Отнюдь не зря! Из кода, который в посте #14 можно извлечь всю информацию о треке. А из поста #23 - только имя исполнителя и название песни

23 тоже не зря, я и неподумал про то что у аимп есть другие окна кроме ahk_class TAIMPMainForm, а окон у него оказалось 25 штук. Единственно что одного параметра ahk_class Winamp v1.x может быть недостаточно, например главное окно kmplayer тоже имеет такой класс, и нетолько kmplayer. Я бы записал как "ahk_class Winamp v1.x  ahk_exe AIMP3.exe".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

30

Re: AHK: Вывод информации о треке из AIMP

creature.ws, спасибо Вам за помощь