音楽を多重起動するには?
Posted: 2007年10月30日(火) 17:04
3Dゲームとかで一片に敵を倒すと、敵の断末魔が重なって聞こえてきますが、
あのように、同じ音を多重起動するにはどうすればいいんでしょうか?
分かり難いかもしれませんが、どうぞよろしくお願いします。
一応考えて見ましたが、どこが悪いのかわかりません。
#define _WIN32_WINNT 0x400
#include<windows.h>
#define PRT_CLASS "Prt_Class"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASSEX wcex;
HWND hWnd;
MSG msg;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wcex.lpszMenuName=NULL;
wcex.lpszClassName=PRT_CLASS;
wcex.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
RegisterClassEx(&wcex);
hWnd=CreateWindow(PRT_CLASS,
"親ウィンドウ",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
640,
480,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
static ThreadParam param;
DWORD dwID;
static MCI_OPEN_PARMS mop;
int iErr;
TCHAR strErr[255];
switch(message){//音楽
case WM_CREATE:
mop.dwCallback=(DWORD)hWnd;
mop.lpstrDeviceType=(LPCTSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
mop.lpstrElementName=TEXT("test.wav");
iErr=mciSendCommand(NULL,MCI_OPEN,
MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_OPEN_ELEMENT,
(DWORD)&mop);
if(iErr){
mciGetErrorString(iErr,strErr,1024);
MessageBox(hWnd,strErr,NULL,MB_OK);
return(-1);
}
return(0);
case WM_LBUTTONDOWN:
param.mop=mop;
param.owner=hWnd;
CreateThread(NULL,0,ThreadFunc,(LPVOID)¶m,0,&dwID);
//mciSendCommand(mop.wDeviceID,MCI_PLAY,0,0);
return(0);
case WM_RBUTTONDOWN:
mciSendCommand(mop.wDeviceID,MCI_STOP,0,0);
mciSendCommand(mop.wDeviceID,MCI_SEEK,
MCI_SEEK_TO_START,0);
return(0);
case WM_DESTROY:
mciSendCommand(mop.wDeviceID,MCI_CLOSE,0,0);
PostQuitMessage(0);
return(0);
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
}