Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 06.07.2018
Сообщений: 124

MemoryMappedFile и AIMP

11.09.2018, 19:56. Показов 1378. Ответов 2

Студворк — интернет-сервис помощи студентам
У AIMP'a есть файл проекции в котором содержится вся информация о проигрываемом файле.
В делфи я мог так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure THiAsmClass.doGet;
var
  S: string;
  AFile: THandle;
  AInfo: Pointer;
  ABuffer: Pointer; 
begin
  AFile := OpenFileMapping(FILE_MAP_READ, True, AIMPRemoteAccessClass);
  AInfo := MapViewOfFile(AFile, FILE_MAP_READ, 0, 0, AIMPRemoteAccessMapFileSize);
  // AInfo указывает на общую память размером в AIMPRemoteAccessMapFileSize
  
  // Пропускаем структуру TAIMPRemoteFileInfo в начале буфера.
  // После неё лежит имя файла в Юникоде (WideString) с завершающим 0
  ABuffer := Pointer(NativeUInt(AInfo) + SizeOf(TAIMPRemoteFileInfo));
  
  // Приводим простой указатель к указателю на последовательность WideChar
  // символов, оканчивающуюся 0  - PWideChar.
  // Присвоение PWideChar строке S (AnsiString) приводит к:
  // - чтению WideString по указателю до ближайшего 0
  // - преобразованию WideString в AnsiString
  S := PWideChar(ABuffer);
  // Выдаём прочитанную строку
  _hi_OnEvent(onOut, S);
 
  // Убираем после себя
  UnmapViewOfFile(AInfo); 
  CloseHandle(AFile);
end;
,
но вот в Си у меня конкретно проблемы.
Я пытался разными способами

Рылся в инете, нашел только это
Инфа 1
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public AimpTrackInfo CurrentTrackInfo
        {
            get
            {
                // http://www.ramsmusings.com/2013/11/12/memory-mapped-files-with-c/ - Memory Mapped Files with C#
                // http://msdn.microsoft.com/en-us/library/dd267591.aspx - MemoryMappedFile.OpenExisting Method (String, MemoryMappedFileRights)
 
                IntPtr AFile = IntPtr.Zero;
 
                try
                {
                    AFile = Win32.OpenFileMapping(
                        (uint)Win32.FileMapAccess.FileMapRead,
                        true,
                        AimpRemoteNetApi.AIMPRemoteAccessClass);
 
                    if (AFile == IntPtr.Zero) return AimpTrackInfo.EmptyAimpTrackInfo;
 
                    IntPtr AInfo = IntPtr.Zero;
                    try
                    {
                        AInfo = Win32.MapViewOfFile(AFile,
                            Win32.FileMapAccess.FileMapRead,
                            0, 0,
                            (UIntPtr)AimpRemoteNetApi.AIMPRemoteAccessMapFileSize);
 
                        AimpRemoteNetApi.AimpRemoteFileInfoStruct sInfo = (AimpRemoteNetApi.AimpRemoteFileInfoStruct)
                            Marshal.PtrToStructure(AInfo, typeof(AimpRemoteNetApi.AimpRemoteFileInfoStruct));
 
                        return CreateAimpTrackInfo(AInfo, sInfo);
                    }
                    finally
                    {
                        Win32.UnmapViewOfFile(AInfo);
                    }
 
                }
                finally
                {
                    Win32.CloseHandle(AFile);
                }
            }
        }

Инфа 2

AIMP предоставляет доступ внешним приложениям к информации о проигрываемом файле посредством файла проецируемого в память.

Файл имеет имя AIMPRemoteAccessClass и фиксированный размер AIMPRemoteAccessMapFileSize(2048).

Файл хранит содержимое структуры TAIMPRemoteFileInfo(AIMP2_RemoteInfo), после которой следует массив юникодных символов (UTF16), содержащий в себе информацию о композиции: название альбома, имя исполнителя, дата выпуска альбома, имя файла, жанр композиции, название композиции.

Длина каждой из составляющих указана в соответствующих свойствах структуры TAIMPRemoteFileInfo, например: <TAIMPRemoteFileInfo>.AlbumLength, <TAIMPRemoteFileInfo>.GenreLength и т.п.


Инфа 3

C#
1
2
3
4
5
6
7
8
using (var mmf = MemoryMappedFile.OpenExisting("AIMP2_RemoteInfo"))
            {
                byte[] data = new byte[2048];
                using (var accessor = mmf.CreateViewAccessor (2048, 0))
                {
                    
                }
            }
Вот тут как только я не пытался, попробовал почти все функции класса CreateViewAccessor, даже пытался юзать стримы, но всё ровно результат 0, даже просто байта не могу вытянуть из файла проекции. Уже 4 дня голову мучаю, сдался!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.09.2018, 19:56
Ответы с готовыми решениями:

MemoryMappedFile и доступ к реальному файлу
Здравствуйте! Проблема в следующем: создаю MemoryMappedFile, исползуя CreateFromFile(), после чего файл на жёстком диске, который я,...

Считывание данных из ОЗУ (MemoryMappedFile)
Здравствуйте, мне необходимо считать текстовый файл размером в 300мб, посоветовали воспользоваться Memory Mapped File. С записыванием...

Не ясно с MemoryMappedFile
Здравствуйте, есть такой код: using System; using System.Collections.Generic; using System.IO; using...

2
0 / 0 / 0
Регистрация: 06.07.2018
Сообщений: 124
12.09.2018, 17:38  [ТС]
Решил одну проблему, как появилась другая
0
0 / 0 / 0
Регистрация: 06.07.2018
Сообщений: 124
12.09.2018, 17:49  [ТС]

Дальше-хуже!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.09.2018, 17:49
Помогаю со студенческими работами здесь

MemoryMappedFile обмен данными
Эти две функции находятся в разных программах (одна в одной, другая в другой). SetClientData отправляет данные, GetClientData успешно...

Aimp 2
Windows Se7en Максимальная х32 Антвирус DrWeb отключен, плеер добавлен в исключения. Администратор компьютера Дополнительное ПО: ...

5.1 и AIMP
Ребята,у меня такая тема.У меня win7 максимальная,так же стоит аудиосистема 5.1 активная,для воспроизведения музыки пользуюсь AIMPoм,вот...

Aimp тормозит
Привет всем форумчанам!У меня следующая проблема... на ноутбуке была установлена Win7, aimp работал нормально, потом вся система начала...

Зависает Aimp
Очень часто aim ,при проигрывании музыки ,зависает и вылетает,в win 7 x64 ,выскакивает окно , в ней указаны вот эти ошибки, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru