Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > C/C++: Системное программирование и WinAPI > Воспроизведение Mid файлов из ресурса


Автор: Dr.Ace 08.03.05, 18:14
:( Люди как воспроизвести миди файл из ресурса програмы ?

Знаю как воспроизводить из файла :
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    // 1.
    MCIHwnd = MCIWndCreate(Application->Handle, HInstance, NULL, "test.mid");
    MCIWndPlay(MCIHwnd);
    // 2.
    mciSendString("open ding.mid .... ",NULL, 0, NULL); //точно не помню
    mciSendString("play snd repeat",NULL, 0, NULL);

А как это сделать из ресурса програмы ???

Автор: SpawnProduction 08.03.05, 18:16
Хм, вот тут работу с ресурсами обсуждали - Вставка битмапов из ресурса

Добавлено
Правда вот запустить midi придётся далеко не с помощью mciSendString

Так, а зачем вообще в ресурсы midi загоняешь ?

Автор: Dr. Ace 08.03.05, 18:25
Для того чтоб прога была махонькой и компактной, а не з кучей файлов ! Ээ, некоторые люди умеют это делать 8-)...

Автор: SpawnProduction 08.03.05, 18:27
Цитата Dr. Ace @
Для того чтоб прога была махонькой и компактной, а не з кучей файлов !

Хм, ну тогда сам exe будет большой :)

Автор: Dr.Ace 08.03.05, 18:30
Не очень. Где-то 300К(WinApi) или 800К (С++Builder) :)

Автор: SpawnProduction 08.03.05, 18:35
Мне такое один умный человек посоветовал...
Цитата
со временем ты поймешь, что чем больше разных модулей в программе(а не все в одной куче), тем лучше, из-за того, что приложение при загрузке будет меньше весить, будет легче сопровождаться, развертываться и обновляться.

Автор: Dr.Ace 08.03.05, 18:41
Может вы и правы. Но вопрос не о том, сколько оно будет весить :D, а том как это заделать ...

Автор: P.O.D 08.03.05, 21:27
Вроде как именно midi файл не получится.

Автор: Dr.Ace 08.03.05, 21:55
Цитата P.O.D @
Вроде как именно midi файл не получится.

8-) Ну не знаю ... По теории не знаю, а вот файлик который доказывает обратное (голая практика) накину :wacko: Факты вещь упрямая !

Автор: P.O.D 09.03.05, 09:33
Dr.Ace, да. Я совсем забыл про кряки ;) Там кстати xm файл, но все равно интересно. Сейчас посмотрим...

Добавлено
1. http://www.delphifr.com/codes/JOUER_XM_EN_PEU_DE_CODE_-NO_DLL-/23849.aspx
2. http://www.wasm.ru/src/4/ufmod.zip

Автор: -vja^m7- 09.03.05, 10:31
Не, господа, вы не правы!
Когда один экзешник и его размер меньше 2-3 мб, то это рулит!
Зачем на маленький проект юзать кучу фигни? И еще, ексли используется файл
ресурсов, то те ресурсы, которые не юзаются, не подгружаются в оперативу, а учитывая небольшой размер проги, то все ок :)

ps: asm forever!

Автор: CBP 10.03.05, 10:24
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    #define WIN32_LEAN_AND_MEAN
     
    #include <dmusici.h>
     
    #define IDR_RCDATA_MID  12345
     
    #pragma comment(lib, "dxguid")
    #pragma comment(lib, "ole32")
    #pragma comment(lib, "user32")
     
    IDirectMusicLoader* g_pLoader = NULL;
    IDirectMusicPerformance* g_pPerformance = NULL;
    IDirectMusicSegment* g_pSegment = NULL;
     
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    CoInitialize(NULL);
     
    CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, IID_IDirectMusicLoader, (void**)&g_pLoader);
    CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC, IID_IDirectMusicPerformance, (void**)&g_pPerformance);
     
    g_pPerformance->Init(NULL, NULL, NULL);
    g_pPerformance->AddPort(NULL);
     
    HMODULE hModule = GetModuleHandle(NULL);
    HRSRC hResource = FindResource(hModule, MAKEINTRESOURCE(IDR_RCDATA_MID), RT_RCDATA);
    HGLOBAL hData = LoadResource(hModule, hResource);
     
    DMUS_OBJECTDESC desc = {sizeof(DMUS_OBJECTDESC)};
    desc.pbMemData = (BYTE*)LockResource(hData);
    desc.llMemLength = SizeofResource(hModule, hResource);
    desc.guidClass = CLSID_DirectMusicSegment;
    desc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_MEMORY;
     
    g_pLoader->GetObject(&desc, IID_IDirectMusicSegment, (void**)&g_pSegment);
    g_pSegment->SetParam(GUID_Enable_Auto_Download, -1, 0, 0,(void *)g_pPerformance);
     
    g_pPerformance->PlaySegment(g_pSegment, 0, 0, NULL);
    MessageBox(NULL, "Click OK to Stop.", "Playing MIDI...", MB_OK);
    g_pPerformance->Stop(g_pSegment, NULL, 0, 0);
     
    g_pPerformance->CloseDown();
    g_pLoader->Release();
    g_pPerformance->Release();
    g_pSegment->Release();
     
    CoUninitialize();
    return 0;
    }

гы, люблю из пушки по воробьям лупить... картечью %)

Добавлено
.rc
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    12345   RCDATA  "GIMN2.MID"

Автор: wareznick 07.07.09, 20:53
а на делфях код? а чо за хедер такой <dmusici.h> ??

Автор: kanes 07.07.09, 21:01
Цитата wareznick @
а на делфях код?

а самому написать? или спрашивай в соответствующем разделе: Delphi: Multimedia

Цитата wareznick @
чо за хедер такой <dmusici.h> ??

один из хедеров DirectX Audio

Автор: wareznick 08.07.09, 11:11
я то си-синтаксис понимаю и на сях программил. Меня интересует такое на Делфях и через АПИ

Автор: kanes 08.07.09, 11:17
Цитата wareznick @
Меня интересует такое на Делфях и через АПИ

а это через кого? :D
здесь же используется DirectX Audio, какая разница на чем программить в данном случае?

Автор: Muran 14.07.09, 04:24
Цитата wareznick @
а на делфях код? а чо за хедер такой <dmusici.h> ??


а повежливее?? >:(

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)