-
есть bass.dll, как при помощи нее проиграть файл из ресурса, без сохранения на диск? модули (mod.xm,it..) проигрываются успешно, если их компилить как moduledata (через rc файл), типа: SU MODULEDATA "SU.MOD" а потом загружать так:
Resource:=TResourceStream.Create(gInstance,'SU','MODULEDATA'); GetMem(Data,Resource.Size);Resource.Read(Data^, Resource.Size); BASS_MusicLoad(true,Data,0,Resource.Size,BASS_MUSIC_RAMPS or BASS_MUSIC_SURROUND or l,0);
а вот mp3 и другие из плагинов так не хотят, вываливается ошибка (пробовал вместо MusicLoad использовать Bass_StreamCreateFile(true, ... , и ресурс как rcdata загружать.
Идеи есть?
-
-
ага, зафурычило так: BASS_StreamCreateFile(True,Resource.Memory,0,Resource.Size,0);
-
и так BASS_StreamCreateFile(True,Data,0,Resource.Size,0);
странно, вроде проверял такой вариант...
-
-
По аналогии для аудио модулей может кому пригодится.
var hRes : HRSRC; dwSize : DWORD; hLoad : HGLOBAL; lpLock : Pointer; hModule: HMUSIC; begin hRes := FindResourceW(HInstance, MAKEINTRESOURCEW(IDM_ABOUT_DEMO), MAKEINTRESOURCEW(RT_RCDATA)); if (hRes <> 0) then try dwSize := SizeOfResource(HInstance, hRes); if (dwSize <> 0) then try hLoad := LoadResource(HInstance, hRes); if (hLoad <> 0) then try lpLock := LockResource(hLoad); if (lpLock <> nil) then try hModule := BASS_MusicLoad(TRUE, lpLock, 0, dwSize, BASS_SAMPLE_LOOP, 0); if (hModule <> 0) then BASS_ChannelPlay(hModule, TRUE); except end; except end; except end; except end; // if (hModule <> 0) then BASS_MusicFree(hModule); if (hLoad <> 0) then try if (lpLock <> nil) then try finally UnlockResource(HGLOBAL(lpLock)); end; finally FreeResource(hLoad); end; end;
|