/* Wave音源で音を鳴らす 2001/ 5/ 4 宍戸 輝光 */ #include HINSTANCE hInst; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HWND hwMain; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow){ MSG msg; WNDCLASSEX wndclass; // ウインドウクラス設定 wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(hInstance,"APP_ICON"); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "CWindow"; wndclass.hIconSm = NULL; RegisterClassEx(&wndclass); // ウインドウクラス登録 hwMain = CreateWindow("CWindow","音を鳴らす", WS_OVERLAPPEDWINDOW | WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT, 280,120,NULL,NULL,hInstance,NULL); while (GetMessage(&msg,NULL,0,0)) { /* メッセージループ */ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static LPBYTE lpBuf; static HWAVEOUT hWOut; static WAVEHDR wh; static WAVEFORMATEX wf; int i; switch (iMsg) { case WM_CREATE: lpBuf=(LPBYTE)GlobalAlloc(GPTR,8000); for (i=0;i<8000;i++) { /* 波形データ作成 */ if ((i % 10)<5) lpBuf[i]=192; else lpBuf[i]=64; } wf.wFormatTag=WAVE_FORMAT_PCM ; wf.nChannels=1; wf.nSamplesPerSec=8000; wf.nAvgBytesPerSec=8000; wf.nBlockAlign=1 ; wf.wBitsPerSample=8 ; wf.cbSize=0 ; waveOutOpen(&hWOut,WAVE_MAPPER,&wf,(DWORD)hwnd,0,CALLBACK_WINDOW); wh.lpData=lpBuf; wh.dwBufferLength=8000; wh.dwBytesRecorded=0; wh.dwUser=0; wh.dwFlags=0; wh.dwLoops=1; wh.lpNext=NULL ; wh.reserved=0 ; waveOutPrepareHeader(hWOut,&wh,sizeof(WAVEHDR)); waveOutWrite(hWOut,&wh,sizeof(WAVEHDR)); return 0; case MM_WOM_DONE: /* 再生終了 */ waveOutClose(hWOut); return 0 ; case MM_WOM_CLOSE: /* デバイスクローズ */ waveOutUnprepareHeader(hWOut,&wh,sizeof(WAVEHDR)); GlobalFree(lpBuf); return 0; case WM_DESTROY : // 終了処理 PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,iMsg,wParam,lParam); }