From 864081102a5f252415f41950b3039a896b4ae9c5 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Mon, 8 Oct 2012 18:43:29 +0000 Subject: Awkwars's plugins - welcome to our trunk git-svn-id: http://svn.miranda-ng.org/main/trunk@1822 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Watrack/docs/m_music.inc | 404 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 404 insertions(+) create mode 100644 plugins/Watrack/docs/m_music.inc (limited to 'plugins/Watrack/docs/m_music.inc') diff --git a/plugins/Watrack/docs/m_music.inc b/plugins/Watrack/docs/m_music.inc new file mode 100644 index 0000000000..1850de52ba --- /dev/null +++ b/plugins/Watrack/docs/m_music.inc @@ -0,0 +1,404 @@ +{$IFNDEF M_MUSIC} +{$DEFINE M_MUSIC} + +// defined in interfaces.inc +//const MIID_WATRACK:MUUID='{FC6C81F4-837E-4430-9601-A0AA43177AE3}'; + +type + pSongInfoA = ^tSongInfoA; + tSongInfoA = packed record + artist :PAnsiChar; + title :PAnsiChar; + album :PAnsiChar; + genre :PAnsiChar; + comment :PAnsiChar; + year :PAnsiChar; + mfile :PAnsiChar; // media file + kbps :dword; + khz :dword; + channels :dword; + track :dword; + total :dword; // music length + time :dword; // elapsed time + wndtext :PAnsiChar; // window title + player :PAnsiChar; // player name + plyver :dword; // player version + icon :THANDLE; // player icon + fsize :dword; // media file size + vbr :dword; + status :integer; // WAT_MES_* const + plwnd :HWND; // player window + // video part + codec :dword; + width :dword; + height :dword; + fps :dword; + date :int64; + txtver :PAnsiChar; + lyric :PAnsiChar; + cover :PAnsiChar; + volume :dword; + url :PAnsiChar; // player homepage + winampwnd:HWND; + end; +type + pSongInfo=^tSongInfo; + tSongInfo = packed record + artist :pWideChar; + title :pWideChar; + album :pWideChar; + genre :pWideChar; + comment :pWideChar; + year :pWideChar; + mfile :pWideChar; // media file + kbps :dword; + khz :dword; + channels :dword; + track :dword; + total :dword; // music length + time :dword; // elapsed time + wndtext :pWideChar; // window title + player :pWideChar; // player name + plyver :dword; // player version + icon :THANDLE; // player icon + fsize :dword; // media file size + vbr :dword; + status :integer; // WAT_MES_* const + plwnd :HWND; // player window + // video part + codec :dword; + width :dword; + height :dword; + fps :dword; + date :int64; + txtver :pWideChar; + lyric :pWideChar; + cover :pWideChar; // cover path + volume :dword; + url :PWideChar; // player homepage + winampwnd:HWND; + end; + pSongInfoW = pSongInfo; + tSongInfoW = tSongInfo; + +const + // result codes + WAT_RES_UNKNOWN = -2; + WAT_RES_NOTFOUND = -1; + WAT_RES_ERROR = WAT_RES_NOTFOUND; + WAT_RES_OK = 0; + WAT_RES_ENABLED = WAT_RES_OK; + WAT_RES_DISABLED = 1; + // internal + WAT_RES_NEWFILE = 3; + WAT_RES_NEWPLAYER = 4; + +// result for MS_WAT_GETMUSICINFO service +const + WAT_PLS_NORMAL = WAT_RES_OK; + WAT_PLS_NOMUSIC = WAT_RES_DISABLED; + WAT_PLS_NOTFOUND = WAT_RES_NOTFOUND; + +const + WAT_INF_UNICODE = 0; + WAT_INF_ANSI = 1; + WAT_INF_UTF8 = 2; + WAT_INF_CHANGES = $100; + +const + MS_WAT_INSERT:PAnsiChar = 'WATrack/Insert'; + MS_WAT_EXPORT:PAnsiChar = 'WATrack/Export'; + +const +{ + wParam : WAT_INF_* constant + lParam : pointer to pSongInfo (Unicode) or pSongInfoA (ANSI/UTF8) + Affects: Fill structure by currently played music info + returns: WAT_PLS_* constant + note: pointer will be point to global SongInfo structure of plugin + warning: Non-Unicode data filled only by request + if lParam=0 only internal SongInfo structure will be filled + Example: + var p:pSongInfo; + PluginLink^.CallService(MS_WAT_GETMUSICINFO,0,dword(@p)); +} + MS_WAT_GETMUSICINFO:PAnsiChar = 'WATrack/GetMusicInfo'; +{ + wParam:0 + lParam : pointer to pSongInfo (Unicode) + Affects: Fill structure by info from file named in SongInfo.mfile + returns: 0, if success + note: fields, which values can't be obtained, leaves old values. + you must free given strings by miranda mmi.free +} + MS_WAT_GETFILEINFO:PAnsiChar = 'WATrack/GetFileInfo'; + +{ + wParam: encoding (WAT_INF_* consts, 0 = WAT_INF_UNICODE) + lParam: codepage (0 = ANSI) + Returns Global unicode SongInfo pointer or tranlated to Ansi/UTF8 structure +} + MS_WAT_RETURNGLOBAL:PAnsiChar = 'WATrack/GetMainStructure'; + +//!! DON'T CHANGE THESE VALUES! +const + WAT_CTRL_FIRST = 1; + + WAT_CTRL_PREV = 1; + WAT_CTRL_PLAY = 2; + WAT_CTRL_PAUSE = 3; + WAT_CTRL_STOP = 4; + WAT_CTRL_NEXT = 5; + WAT_CTRL_VOLDN = 6; + WAT_CTRL_VOLUP = 7; + WAT_CTRL_SEEK = 8; // lParam is new position (sec) + + WAT_CTRL_LAST = 8; + +{ + wParam: button code (WAT_CTRL_* const) + lParam: 0, or value (see WAT_CTRL_* const comments) + Affects: emulate player button pressing + returns: 0 if unsuccesful +} + MS_WAT_PRESSBUTTON:PAnsiChar = 'WATrack/PressButton'; + +{ + Get user's Music Info +} + MS_WAT_GETCONTACTINFO:PAnsiChar = 'WATrack/GetContactInfo'; + +// ------------ Plugin/player status ------------ + +{ + wParam: 1 - switch off plugin + 0 - switch on plugin + -1 - switch plugin status + 2 - get plugin version + other - get plugin status + lParam: 0 + Affects: Switch plugin status to enabled or disabled + returns: version, old plugin status, 0, if was enabled +} + MS_WAT_PLUGINSTATUS:PAnsiChar = 'WATrack/PluginStatus'; + + ME_WAT_MODULELOADED:PAnsiChar = 'WATrack/ModuleLoaded'; + +const + WAT_EVENT_PLAYERSTATUS = 1; // WAT_PLS_* const + WAT_EVENT_NEWTRACK = 2; // SongInfo ptr + WAT_EVENT_PLUGINSTATUS = 3; // 0-enabled; 1-dis.temporary; 2-dis.permanent + WAT_EVENT_NEWPLAYER = 4; // + WAT_EVENT_NEWTEMPLATE = 5; // TM_* constant + +{ + Plugin or player status changed: + wParam: type of event (see above) + lParam: value +} + ME_WAT_NEWSTATUS:PAnsiChar = 'WATrack/NewStatus'; + +// ---------- Popup module ------------ + +{ + wParam: not used + lParam: not used + Affects: Show popup or Info window with current music information + note: Only Info window will be showed if Popup plugin disabled +} + MS_WAT_SHOWMUSICINFO:PAnsiChar = 'WATrack/ShowMusicInfo'; + +// --------- Statistic (report) module ------------- + +{ + wParam: pointer to log file name or NIL + lParam: pointer to report file name or NIL + Affects: Create report from log and run it (if option is set) + returns: 0 if unsuccesful + note: if wParam or lParam is a NIL then file names from options are used +} + MS_WAT_MAKEREPORT :PAnsiChar = 'WATrack/MakeReport'; +// MS_WAT_MAKEREPORTW:PAnsiChar = 'WATrack/MakeReportW'; + +{ + wParam, lParam - not used + Affects: pack statistic file +} + MS_WAT_PACKLOG:PAnsiChar = 'WATrack/PackLog'; + +{ + wParam: not used + lParam: pointer to SongInfo +} + MS_WAT_ADDTOLOG:PAnsiChar = 'WATrack/AddToLog'; + +// ----------- Formats and players ----------- + +// media file status + +const + WAT_MES_STOPPED = 0; + WAT_MES_PLAYING = 1; + WAT_MES_PAUSED = 2; + WAT_MES_UNKNOWN = -1; + +const + WAT_ACT_REGISTER = 1; + WAT_ACT_UNREGISTER = 2; + WAT_ACT_DISABLE = 3; + WAT_ACT_ENABLE = 4; + WAT_ACT_GETSTATUS = 5; // not found/enabled/disabled + WAT_ACT_SETACTIVE = 6; + WAT_ACT_REPLACE = $10000; // can be combined with WAT_REGISTERFORMAT + +const + // flags + WAT_OPT_DISABLED = $00000001; // registered but disabled + WAT_OPT_ONLYONE = $00000002; // can't be overwriten + WAT_OPT_PLAYERINFO = $00000004; // song info from player + WAT_OPT_WINAMPAPI = $00000008; // Winamp API support + WAT_OPT_CHECKTIME = $00000010; // check file time for changes + WAT_OPT_VIDEO = $00000020; // only for format registering used + WAT_OPT_LAST = $00000040; // (internal-Winamp Clone) put to the end of queue + WAT_OPT_FIRST = $00000080; // (internal) + WAT_OPT_TEMPLATE = $00000100; // (internal) + WAT_OPT_IMPLANTANT = $00000200; // use process implantation + WAT_OPT_HASURL = $00000400; // (player registration) URL field present + WAT_OPT_CHANGES = $00000800; // obtain only chaged values + // (volume, status, window text, elapsed time) + WAT_OPT_APPCOMMAND = $00001000; // Special (multimedia) key support + WAT_OPT_CHECKALL = $00002000; // Check all players + WAT_OPT_KEEPOLD = $00004000; // Keep Old opened file + WAT_OPT_MULTITHREAD = $00008000; // Use multithread scan + WAT_OPT_SINGLEINST = $00010000; // Single player instance + WAT_OPT_PLAYERDATA = $00020000; // (internal) to obtain player data + +type + tReadFormatProc = function(var Info:tSongInfo):boolean; cdecl; + pMusicFormat = ^tMusicFormat; + tMusicFormat = packed record + proc :tReadFormatProc; + ext :array [0..7] of AnsiChar; + flags:cardinal; + end; + +const +{ + wParam: action + lParam: pointer to tMusicFormat if wParam = WAT_ACT_REGISTER, + else - pointer to extension string (ANSI) + returns: see result codes +} + MS_WAT_FORMAT:PAnsiChar = 'WATrack/Format'; + +{ + wParam: pointer to SongInfo structure (plwind field must be initialized) + lParam: flags + Affects: trying to fill SongInfo using Winamp API +} + MS_WAT_WINAMPINFO:PAnsiChar = 'WATrack/WinampInfo'; + +{ + wParam: window + lParam: LoWord - command; HiWord - value +} + MS_WAT_WINAMPCOMMAND:PAnsiChar = 'WATrack/WinampCommand'; + +type + tInitProc = function():integer;cdecl; + tDeInitProc = function():integer;cdecl; + tStatusProc = function(wnd:HWND):integer;cdecl; + tNameProc = function(wnd:HWND;flags:integer):pWideChar;cdecl; + tCheckProc = function(wnd:HWND;flags:integer):HWND;cdecl; + tInfoProc = function(var SongInfo:tSongInfo;flags:integer):integer;cdecl; + tCommandProc = function(wnd:HWND;command:integer;value:integer):integer;cdecl; + + pPlayerCell = ^tPlayerCell; + tPlayerCell = packed record + Desc :PAnsiChar; // Short player name + flags :cardinal; + Icon :HICON; // can be 0. for registration only + Init :pointer; // tInitProc; can be NIL. initialize any data + DeInit :pointer; // tDeInitProc; can be NIL. finalize player processing + Check :pointer; // tCheckProc; check player + GetStatus:pointer; // tStatusProc; can be NIL. get player status + GetName :pointer; // tNameProc; can be NIL. get media filename + GetInfo :pointer; // tInfoProc; can be NIL. get info from player + Command :pointer; // tCommandProc; can be NIL. send command to player + URL :PAnsiChar; // only if WAT_OPT_HASURL flag present + Notes :PWideChar; // any tips, notes etc for this player + end; + +const +{ + wParam: action + lParam: pointer to tPlayerCell if wParam = WAT_ACT_REGISTER, + else - pointer to player description string (ANSI) + returns: player window handle or value>0 if found + note: If you use GetName or GetInfo field, please, do not return empty + filename even when mediafile is remote! +} + MS_WAT_PLAYER:PAnsiChar = 'WATrack/Player'; + +// --------- Last FM --------- + +{ + Toggle LastFM scrobbling status + wParam,lParam=0 + Returns: previous state +} +const + MS_WAT_LASTFM:pAnsiChar = 'WATrack/LastFM'; + +{ + Get Info based on currently played song + wParam: pLastFMInfo + lParam: int language (first 2 bytes - 2-letters language code) +} +type + pLastFMInfo = ^tLastFMInfo; + tLastFMInfo = packed record + request:cardinal; // 0 - artist, 1 - album, 2 - track + artist :pWideChar; // artist + album :pWideChar; // album or similar artists for Artist info request + title :pWideChar; // track title + tags :pWideChar; // tags + info :pWideChar; // artist bio or wiki article + image :pAnsiChar; // photo/cover link + similar:pWideChar; + release:pWideChar; + trknum :cardinal; + end; +const + MS_WAT_LASTFMINFO:pAnsiChar = 'WATrack/LastFMInfo'; + +// --------- Templates ---------- + +const +{ + wParam: 0 (standard Info) or pSongInfo + lParam: Unicode template + returns: New Unicode (replaced) string +} + MS_WAT_REPLACETEXT:PAnsiChar = 'WATrack/ReplaceText'; + +{ + event types for History + Blob structure for EVENTTYPE_WAT_ANSWER: + Uniciode artist#0title#0album#0answer +} +const + EVENTTYPE_WAT_REQUEST = 9601; + EVENTTYPE_WAT_ANSWER = 9602; + EVENTTYPE_WAT_ERROR = 9603; + EVENTTYPE_WAT_MESSAGE = 9604; + +const +{ + wParam: 0 or parent window + lParam: 0 + note: Shows Macro help window with edit aliases ability +} + MS_WAT_MACROHELP:pAnsiChar = 'WATrack/MacroHelp'; + +{$ENDIF M_MUSIC} -- cgit v1.2.3