#include // winmm.lib ‚ðƒŠƒ“ƒN‚·‚é #pragma comment(lib,"winmm") #define SRATE 8000 //•W–{‰»Žü”g”(1•bŠÔ‚̃Tƒ“ƒvƒ‹”) #define F 400 //Žü”g”(1•bŠÔ‚Ì”gŒ`”) LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { WAVEFORMATEX wfe; static HWAVEOUT hWaveOut; static WAVEHDR whdr; static LPBYTE lpWave; int i,len; DWORD vol; WORD rv,lv; switch(uMsg){ case WM_CREATE: wfe.wFormatTag=WAVE_FORMAT_PCM; wfe.nChannels=1; //ƒ‚ƒmƒ‰ƒ‹ wfe.wBitsPerSample=8; //—ÊŽq‰»ƒrƒbƒg” wfe.nBlockAlign=wfe.nChannels * wfe.wBitsPerSample/8; wfe.nSamplesPerSec=SRATE; //•W–{‰»Žü”g” wfe.nAvgBytesPerSec=wfe.nSamplesPerSec * wfe.nBlockAlign; waveOutOpen(&hWaveOut,WAVE_MAPPER,&wfe,0,0,CALLBACK_NULL); lpWave=(LPBYTE)calloc(wfe.nAvgBytesPerSec,2); //2•b•ª len=SRATE/F; //”g’· for(i=0;i 0xffff)? 0xffff:lv+512; //¶ rv=(rv+512 > 0xffff)? 0xffff:rv+512; //‰E waveOutSetVolume(hWaveOut,MAKELONG(lv,rv)); return 0; case 'K': //‰¹—Ê@‰º‚°‚é waveOutGetVolume(hWaveOut,&vol); lv=LOWORD(vol); rv=HIWORD(vol); lv=(lv-512 < 0)? 0:lv-512; //¶ rv=(rv-512 < 0)? 0:rv-512; //‰E waveOutSetVolume(hWaveOut,MAKELONG(lv,rv)); return 0; } return 0; case WM_DESTROY: waveOutReset(hWaveOut); waveOutUnprepareHeader(hWaveOut,&whdr,sizeof(WAVEHDR)); waveOutClose(hWaveOut); free(lpWave); PostQuitMessage(0); return 0; } return DefWindowProc(hWnd,uMsg,wParam,lParam); } int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow) { WNDCLASS wc; MSG msg; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = __FILE__; if(!RegisterClass(&wc)) return 0; HWND hWnd=CreateWindow( __FILE__,"‚æ‚­Žg‚¤waveOut››ŠÖ”", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL); if(hWnd==NULL) return 0; BOOL bRet; while((bRet=GetMessage(&msg,NULL,0,0))!=0){ if(bRet==-1) break; DispatchMessage(&msg); } return (int)msg.wParam; }