hello to all
i am making the MIDI palyer if Windows mobile. i am refering this

http://www.ifihadadollarforeverytime...site.com/Midi/

i managed to get it compiled . however it return MMSYSERR_ERROR

does any body encontered the same problem! here is the code
Code:
bool CMIDIDlg::playMidi(CString name)
{
	AfxMessageBox(name);
#ifdef PLAY_MIDI
	struct miditrack seq[MAXTRKS];
	CFile f;
	f.Open(name.GetBuffer(), CFile::modeRead | CFile::shareDenyWrite);
	unsigned char * p = new unsigned char[f.GetLength()+1];
	f.Read(p, f.GetLength());

	int tracks = readmidi(p, f.GetLength(), seq);

	WAVEFORMAT_MIDI wfm; // WAVEFORMATEX
	memset(&wfm,0,sizeof(wfm));
	wfm.USecPerQuarterNote=263157;
//	wfm.USecPerQuarterNote=1000000;
	wfm.TicksPerQuarterNote=(p[12]<<8) | p[13];//480
//	wfm.TicksPerQuarterNote= 100;

	int j = parseMidiData(0, &wfm.USecPerQuarterNote, &wfm.TicksPerQuarterNote, 0, seq);

	wfm.USecPerQuarterNote=263157;
//	wfm.USecPerQuarterNote=1000000;
	wfm.TicksPerQuarterNote=480;
//	wfm.TicksPerQuarterNote=100;

	if (j < 48) 
	{
		MMRESULT Result;
		HWAVEOUT hWaveOut;
		HANDLE hEvent;

		hEvent=CreateEvent( NULL,TRUE,FALSE,NULL);
		wfm.wfx.wFormatTag=WAVE_FORMAT_MIDI;
		wfm.wfx.nChannels=1;
		wfm.wfx.nSamplesPerSec=32;
		wfm.wfx.nAvgBytesPerSec=32;
		wfm.wfx.nBlockAlign=sizeof(WAVEFORMAT_MIDI_MESSAGE);
		wfm.wfx.wBitsPerSample=16;
		wfm.wfx.cbSize=WAVEFORMAT_MIDI_EXTRASIZE;

		

		Result = waveOutOpen(&hWaveOut, WAVE_MAPPER, (LPWAVEFORMATEX)&wfm, (DWORD)waveOutProc, (DWORD)hEvent, CALLBACK_FUNCTION);



		if (Result!=MMSYSERR_NOERROR) 
		{
			DWORD i = GetLastError();
			return false;
		}

		waveOutSetVolume(hWaveOut, 0x7777 );

		WAVEFORMAT_MIDI_MESSAGE MidiMessage[48];
		/*
		WAVEFORMAT_MIDI_MESSAGE * MidiMessage;
		MidiMessage = new WAVEFORMAT_MIDI_MESSAGE[48];
		//*/

		parseMidiData(MidiMessage, 0, 0, 0, seq);

		MidiMessage[j].DeltaTicks=0;
		MidiMessage[j].MidiMsg=0;
		j++;

		f.Close();

		delete [] p;

		//s.Format(L"created %d midi messages", j);
		//MessageBox(s);

		WAVEHDR WaveHdr;
		WaveHdr.lpData = (LPSTR)&MidiMessage;
		WaveHdr.dwBufferLength = sizeof(WAVEFORMAT_MIDI_MESSAGE) * j;
		WaveHdr.dwFlags = 0;
		WaveHdr.dwLoops = 1;
		Result = waveOutPrepareHeader(hWaveOut,&WaveHdr,sizeof(WaveHdr));
		if (Result != MMSYSERR_NOERROR)
			MessageBox(L"waveOutPrepareHeader failed");
		else {
			Result = waveOutWrite(hWaveOut,&WaveHdr,sizeof(WaveHdr));
			if (Result != MMSYSERR_NOERROR)
				MessageBox(L"waveOutWrite failed");
			else {
				WaitForSingleObject(hEvent,10000);
			}
			Result = waveOutUnprepareHeader(hWaveOut,&WaveHdr,sizeof(WaveHdr));
		}
		waveOutReset(hWaveOut);
		Result = waveOutClose(hWaveOut);
		//delete [] MidiMessage;

		return true;
	} else {
		f.Close();
		delete [] p;
		return false;
	}
#else
	return false;
#endif
}
with regards