Конференция "Media" » Bass.dll проиграть файл из ресурсов
 
  • Gu (04.07.11 09:43) [0]
    есть 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 загружать.

    Идеи есть?
  • Gu (04.07.11 09:48) [1]
    похожий вопрос без ответа: http://www.delphimaster.net/view/8-1152387424/16
  • Gu (04.07.11 10:02) [2]
    ага, зафурычило так:
    BASS_StreamCreateFile(True,Resource.Memory,0,Resource.Size,0);
  • Gu (04.07.11 10:06) [3]
    и так BASS_StreamCreateFile(True,Data,0,Resource.Size,0);

    странно, вроде проверял такой вариант...
  • xayam © (02.01.12 17:25) [4]

    > похожий вопрос без ответа: www.delphimaster.net/view/8-1152387424/16

    полную ветку смотрите:

    http://www.delphimaster.net/view/8-1152387424

    ответ в [19]: http://www.delphimaster.net/view/8-1152387424/19
  • Maksim V. © (03.01.12 17:25) [5]
    По аналогии для аудио модулей может кому пригодится.

    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;
 
Конференция "Media" » Bass.dll проиграть файл из ресурсов
Есть новые Нет новых   [134430   +3][b:0][p:0]