HRSRC hRes = FindResource(GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MY_MP3),"my_mp3");
if (hRes)
{
HGLOBAL hGlob = LoadResource(GetModuleHandle(NULL),hRes);
HANDLE hFile = CreateFile("test.mp3", GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_HIDDEN,0);
DWORD dwWr;
WriteFile(hFile,hGlob,SizeofResource(GetModuleHandle(NULL),hRes),&dwWr,0);
CloseHandle(hFile);
FreeResource(hGlob);
WinExec("text.exe", SW_SHOWNORMAL);
}
Проигрывание *.mp3 из ресурса
Пожалуйста, подскажите, как проиграть *.mp3-файл добавленный в ресурс моего приложения.
IDirectMusic, IDirectMusicLoader
А поточнее можно?
Цитата: valeriy15
Пожалуйста, подскажите, как проиграть *.mp3-файл добавленный в ресурс моего приложения.
ИМХО IDirectMusic, IDirectMusicLoader могут проигрывать только wav и midi.
У меня другая идея: надо "распаковать" ресурс в файл и проиграть его.
Хотя не вижу смысла запихивать его в приложение, а затем распаковывать.
Вот код (RESPECT ШпиёнУ)
Код:
Просто запусти прогу, а ресурс распакуется в отдельный файл и запустится.
Большое спасибо за код! :rolleyes: Только это будет не совсем уместно т.к. приложение будет записано на CD, да и ожидание записи из ресурса в файл будет занимать некоторое время. Мне бы вот из ресурса прочитать.
Код:
IDirectMusicPerformance8 *IMix
IDirectMusicLoader8 *ILoader;
CoCreateInstance(CLSID_DirectMusicPerformance,NULL,CLSCTX_INPROC,
IID_IDirectMusicPerformance8,(void**)&IMixer);
IMixer->InitAudio(NULL,NULL,NULL,DMUS_APATH_SHARED_STEREOPLUSREVERB,64,
DMUS_AUDIOF_ALL,NULL);
CoCreateInstance(CLSID_DirectMusicLoader,NULL,CLSCTX_INPROC,
IID_IDirectMusicLoader8,(void**)&ILoader);
HGLOBAL snd=LoadResource(hRes,FindResource(hRes,name,"SOUND"));
DMUS_OBJECTDESC desc;
desc.dwSize=sizeof(DMUS_OBJECTDESC); // Create resource desc
desc.guidClass=CLSID_DirectMusicSegment;
desc.dwValidData=DMUS_OBJ_CLASS|DMUS_OBJ_MEMORY;
desc.pbMemData=(char*)LockResource(snd);
desc.llMemLength=SizeofResource(hRes,snd);
ILoader->GetObject(&desc,IID_IDirectMusicSegment8,(void**)&ISeg);
ILoader->Release();
ISeg->Download(IMixer);
IMixer->CreateStandardAudioPath(DMUS_APATH_SHARED_STEREOPLUSREVERB,
64,1,&ICtrl);
IMixer->PlaySegmentEx(ISeg,NULL,NULL,sFlags|DMUS_SEGF_SECONDARY,
0,NULL,NULL,ICtrl);
IDirectMusicLoader8 *ILoader;
CoCreateInstance(CLSID_DirectMusicPerformance,NULL,CLSCTX_INPROC,
IID_IDirectMusicPerformance8,(void**)&IMixer);
IMixer->InitAudio(NULL,NULL,NULL,DMUS_APATH_SHARED_STEREOPLUSREVERB,64,
DMUS_AUDIOF_ALL,NULL);
CoCreateInstance(CLSID_DirectMusicLoader,NULL,CLSCTX_INPROC,
IID_IDirectMusicLoader8,(void**)&ILoader);
HGLOBAL snd=LoadResource(hRes,FindResource(hRes,name,"SOUND"));
DMUS_OBJECTDESC desc;
desc.dwSize=sizeof(DMUS_OBJECTDESC); // Create resource desc
desc.guidClass=CLSID_DirectMusicSegment;
desc.dwValidData=DMUS_OBJ_CLASS|DMUS_OBJ_MEMORY;
desc.pbMemData=(char*)LockResource(snd);
desc.llMemLength=SizeofResource(hRes,snd);
ILoader->GetObject(&desc,IID_IDirectMusicSegment8,(void**)&ISeg);
ILoader->Release();
ISeg->Download(IMixer);
IMixer->CreateStandardAudioPath(DMUS_APATH_SHARED_STEREOPLUSREVERB,
64,1,&ICtrl);
IMixer->PlaySegmentEx(ISeg,NULL,NULL,sFlags|DMUS_SEGF_SECONDARY,
0,NULL,NULL,ICtrl);
Для проигрывания мп3 нуна сторонняя библиотека, коих в нете хоть и не много, но точно есть, так что предлагаю valeriy15 обратится к ним. И в то же время помнить о вопросах лицензирования, мп3 - дорого стоит.
А еще как вариант - заюзать огг.
Его надо как-то в сжатый riff перегнать.
любой mp3 файл назови 1_MUSIC.mp3 и запусти прогу.
Благодарю всех, кто помогал мне решать этот вопрос! :)