Вернее, чем распаковать "архив" с расширением .aimppack?
Connection is established. But when I enter to artist or albums section i see only spinning blue icon. I tried to wait few minutes and nothing changes. What's going on?The plugin doesn't support control of AIMP4 audiolibrary.
В отличие от Remote Control, не вешает АИМП.remote тоже ничего не вешает и web интерфейса там тоже уже давненько нет так то...
Но, к сожалению, не имеет WEB-интерфейса, только приложения для мобильных ОС.
Any plains for Version 4?
I had to drop official support for AIMP 4, unfortunately. The media library format kept changing and the plugin SDK currently does not offer the functionality I require to make the app work. If that changes in the future I may look into supporting it again.
AService: IAIMPServiceMusicLibrary;
...
AService.GetStorageByID(MakeString(AIMPML_LOCALDATASTORAGE_ID), IAIMPMLDataStorage2, FDataStorage);
...
if Supports(FDataStorage, IAIMPMLDataProvider, ADataProvider) then
begin
if Succeeded(ADataProvider.GetData(BuildFieldList, BuildFilter, AData)) then
begin
if Supports(AData, IAIMPMLDataProviderSelection, ASelection) then
repeat
SetString(AValue, ASelection.GetValueAsString(0, ALength), ALength);
...
until not ASelection.NextRow;
end;
end;
function <>.BuildFieldList: IAIMPObjectList;
begin
CoreCreateObject(IAIMPObjectList, Result);
Result.Add(MakeString('FileName'));
Result.Add(MakeString('Title'));
end;
function <>.BuildFilter: IAIMPMLDataFilter;
var
AFieldFilter: IAIMPMLDataFieldFilter;
begin
CheckResult(FDataStorage.CreateObject(IAIMPMLDataFilter, Result));
CheckResult(Result.SetValueAsInt32(AIMPML_FILTERGROUP_OPERATION, AIMPML_FILTERGROUP_OPERATION_AND));
CheckResult(Result.Add(MakeString('Artist'), FArtist, Null, AIMPML_FIELDFILTER_OPERATION_EQUALS, AFieldFilter));
CheckResult(Result.Add(MakeString('Album'), FAlbum, Null, AIMPML_FIELDFILTER_OPERATION_EQUALS, AFieldFilter));
end;
Does IAIMPServiceMusicLibrary::GetStorageByID need to be called from the main thread?
Presumably there's no harm in getting that IAIMPMLDataStorage2 object when the plugin is initialized and holding on to it?
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_ID = _T("ID"); // Int32
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_ADDDED = _T("Added"); // DateTime (Float);
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_ALBUM = _T("Album"); // String, multiple values
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_ALBUMARTIST = _T("AlbumArtist"); // String, multiple values
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_ARTIST = _T("Artist"); // String, multiple values
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_BITDEPTH = _T("BitDepth"); // Int32;
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_BITRATE = _T("Bitrate"); // Int32
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_BPM = _T("BPM"); // Int32;
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_CHANNELS = _T("Channels"); // Int32;
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_COMMENT = _T("Comment"); // String (Memo)
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_COMPOSER = _T("Composer"); // String, multiple values
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_CONDUCTOR = _T("Conductor"); // String
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_COPYRIGHTS = _T("Copyrights"); // String
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_DISKNUMBER = _T("DiskNumber"); // String
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_DURATION = _T("Duration"); // = AIMPML_RESERVED_FIELD_DURATION; // Duration (Float)
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_FILEFORMAT = _T("FileFormat"); // String
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_FILENAME = _T("FileName"); // = AIMPML_RESERVED_FIELD_FILENAME; // FileName (String);
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_FILESIZE =_T("FileSize"); // = AIMPML_RESERVED_FIELD_FILESIZE; // FileSize (Int64);
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_GENRE = _T("Genre"); // String, multiple values
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_LABELS = _T("Labels"); // String, multiple values
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_LASTMODIFICATION = _T("LastModification"); // DateTime (Float)
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_LASTPLAYBACK = _T("LastPlayback"); // DateTime (Float);
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_LYRICIST = _T("Lyricist"); // String, multiple values
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_MOOD = _T("Mood"); // String, multiple values
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_PLAYBACKCOUNT = _T("PlaybackCount"); // Int32
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_PUBLISHER = _T("Publisher"); // String, multiple values
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_RATING = _T("Rating"); // Int32
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_SAMPLERATE = _T("SampleRate"); // Int32
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_TITLE = _T("Title"); // String
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_TRACKNUMBER = _T("TrackNumber"); // String
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_URL = _T("URL"); // String
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_USERMARK = _T("UserMark"); // = AIMPML_RESERVED_FIELD_USERMARK;
static const WCHAR* AIMPML_LOCALDATASTORAGE_FIELD_YEAR = _T("Year"); // String
m_albumArt->Get(fileUriObj, artistObj, albumObj, AIMP_SERVICE_ALBUMART_FLAGS_ORIGINAL | AIMP_SERVICE_ALBUMART_FLAGS_WAITFOR, AIMPServiceAlbumArtReceiveProc, &info, &taskId)
Almost all files have embedded cover art, so I don't see why it should perform an online lookup. Something like AIMP_SERVICE_ALBUMART_FLAGS_OFFLINE would be handy, though.
I plugged in my own image loading code for now (takes less than 60ms on average).
Thanks. That flag doesn't do much in terms of speed, so I'll need to stick to my custom code for now. Maybe I'll use IAIMPServiceAlbumArt as a fallback only.
- Couldn't figure out how to use AIMPML_FILTER_SORTBY (not that important, though, I can easily sort the data myself)
... if the requested value does not exist.
Apart from that I've got most of the functionality working again. Have you got a release date in mind for the next update?
Can you send to me an example or working assembly of plugin? I will check this issue using performance profiler.Sure. Have you got a smartphone or tablet for testing? An iPad would be ideal.
You must set to AIMPML_FILTER_SORTBY name of column (IAIMPString), additionally, set correct value to the AIMPML_FILTER_SORTDIRECTION propertyAh, I didn't set AIMPML_FILTER_SORTBY...
Seems to be a bug. Can you explain in more details, how to reproduce it?I'm retrieving info like this:
int32_t discCount;
if (SUCCEEDED(fileInfo->GetValueAsInt32(AIMP_FILEINFO_PROPID_DISKTOTAL, &discCount))) { ... }
where fileInfo is an IAIMPFileInfo instance I retrieved via AIMP_PLAYLISTITEM_PROPID_FILEINFO from an IAIMPPlaylistItem instance.Sure. Have you got a smartphone or tablet for testing? An iPad would be ideal.
where fileInfo is an IAIMPFileInfo instance I retrieved via AIMP_PLAYLISTITEM_PROPID_FILEINFO from an IAIMPPlaylistItem instance.
Whenever the property doesn't exist, two Delphi execptions (0x0EEDFADE) are thrown.
I'll PM you.
AIMP_FILEINFO_PROPID_DISKNUMBER
Type IAIMPString
Read IAIMPPropertyList.GetValueAsObject(ID, IID_IAIMPString, ..)
Write IAIMPPropertyList.SetValueAsObject(ID, <IAIMPString>)
Ah, in the .chm, not the header files. Got it!
The new plugin for AIMP4 is now officially available.
Здравствуйте! Данное приложение установленное на ios устройство не видит названий треков. Вместо имен файлов вопросительные знаки. Возможно ли это исправить?You're probably getting question marks because your files are not properly tagged.
Your files should have at least an artist and a title tag. The plugin should fall back to using filenames if there are no tags at all, but maybe that's not working for some reason in your case.
The settings look fine. Make sure the firewall is configured to allow incoming TCP connections to AIMP.
Right now only the foobar version supports browsing by folder, sorry. I may add this feature in the future for other players, including AIMP.
Может кому поможет. Была ошибка "connection attempt failed".- У меня было тоже самое, только подключение блокировал встроенный фаервол в винде. Нужно было в настройках дать доступ Aimp после чего всё заработало.
Eset не пропускал. Добавил правило в настройках и всё заработало.
Верните мне Remote control! :(
Приложение очень, очень ограничено в функционале. На практике, это только пауза/пуск/предыдущий трек/следующий трек/перемотка и регулятор громкости. Мне не хватает( Но разработчику всё равно спасибо.
I am using the paid version of MonkeyMote (v. 1.7.2)use v1.1.5 https://www.aimp.ru/?do=catalog&rec_id=1001
Right now only the foobar version supports browsing by folder, sorry. I may add this feature in the future for other players, including AIMP.
As long as your music files are tagged properly, you should be able to find them, though.