Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* i686-w64-mingw32-gcc main.c -lwinmm */
- /* WATCOM=/opt/watcom PATH=$WATCOM/binl:$PATH INCLUDE=$WATCOM/h:$WATCOM/h/win LIB=$WATCOM/lib286:$WATCOM/lib286/dos wcl -bcl=windows main.c -q mmsystem.lib */
- #include <windows.h>
- #include <mmsystem.h>
- #include <stdlib.h>
- void error(const char* str)
- {
- MessageBox(0, str, "", 0);
- exit(1);
- }
- static int done = 0;
- void CALLBACK _export waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
- {
- if (uMsg == WOM_DONE)
- {
- done = 1;
- }
- }
- int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- HWAVEOUT hout;
- PCMWAVEFORMAT format;
- WAVEHDR* block;
- int result;
- FARPROC callback;
- char* buffer;
- OFSTRUCT ofstruct;
- HFILE file;
- if ((file = OpenFile("test.wav", &ofstruct, OF_READ)) == HFILE_ERROR) {
- error("CreateFile failed");
- }
- block = (WAVEHDR*)LocalAlloc(0, 8000 + sizeof(WAVEHDR));
- buffer = (char*)block + sizeof(WAVEHDR);
- block->dwBufferLength = 8000;
- block->lpData = buffer;
- if (_lread(file, buffer, 8000) == HFILE_ERROR)
- {
- error("ReadFile failed");
- }
- format.wf.wFormatTag = WAVE_FORMAT_PCM;
- format.wf.nChannels = 1;
- format.wf.nSamplesPerSec = 11025;
- format.wf.nBlockAlign = 1;
- format.wf.nAvgBytesPerSec = 11025;
- format.wBitsPerSample = 8;
- callback = MakeProcInstance((FARPROC)waveOutProc, hInstance);
- if (callback == NULL)
- {
- error("MakeProcInstance failed");
- }
- if ((result = waveOutOpen(&hout, WAVE_MAPPER, (LPWAVEFORMAT)&format, (DWORD)callback, 0, CALLBACK_FUNCTION)) != MMSYSERR_NOERROR)
- {
- char errorMsg[256];
- waveOutGetErrorText(result, errorMsg, sizeof(errorMsg));
- MessageBox(0, errorMsg, "waveOutOpen Error", 0);
- error("waveOutOpen failed");
- }
- waveOutPrepareHeader(hout, block, sizeof(WAVEHDR));
- waveOutWrite(hout, block, sizeof(WAVEHDR));
- while(!done)
- {
- }
- error("success!");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment