For MS Smartphone 2003 platform,it is really not an easy thing to deal with MIDI playback.Here are several solutions,but every way has its own problems.
1.Use SDK raw API.
Refer to http://homepages.inspire.net.nz/~gambit/Midi/
Problem:
-Rough playback quality.It is only a prototype.When I tested with that source code,the playback quality is so rough.I spent some time to modify that source code and failed to fix the problem.
BTW: The problem of B in that article is due to the code:
WaveHdr.lpData = (LPSTR)&MidiMessage; //If changed to (LPSTR)MidiMessage,
dynamic memory allocation should work.As we know,for array,&MidiMessage is equal to
MidiMessage,but for pointer it is different.
2.Port open midi source projects to Smartphone platform
I've found two open midi source projects which are very good.One is Timidity and the other is WildMidi. Many famous games such as Quake and Duke3D uses Timdity to play midi sound.
Problems:
-It will take some time.
-It will add much more footprint to your application installation package due to its usage of GUS patches.
3.Buy midi codec
Currently it seems some company sells midi codec for MS Windows Mobile Platform.
Problems:
-It will take some money.Usually those companies want a lot of money.So it is the least recommended.
4.Use existing library API
I spent some time to analysis the midi issue of the default player within Dopod565 itself. I found that the player uses a DLL library ----midilib2.dll which is in \Windows directory.The export information of midilib2.dll is attached later.
MIDI_GetDuration
MIDI_GetExtensionInfo
MIDI_GetInfo
MIDI_GetPosition
MIDI_GetStatus
MIDI_GetVendorID
MIDI_GetVolume
MIDI_GetWaveOut
MIDI_Load
MIDI_Pause
MIDI_Play
MIDI_Resume
MIDI_SetVolume
MIDI_Stop
MIDI_Unload
fp_MIDI_GetDuration
fp_MIDI_GetExtensionInfo
fp_MIDI_GetInfo
fp_MIDI_GetPosition
fp_MIDI_GetStatus
fp_MIDI_GetVendorID
fp_MIDI_GetVolume
fp_MIDI_GetWaveOut
fp_MIDI_Load
fp_MIDI_Pause
fp_MIDI_Play
fp_MIDI_Resume
fp_MIDI_SetVolume
fp_MIDI_Stop
fp_MIDI_Unload
The DLL file is not open to public for use.For DLL files,we could only get function name information,and we couldn't find function declarations including parameters and return type.
I think the best way to handle MIDI playback problem is to ask for handset provider's
technical support and ask them to open midi API(For Dopod565,the API of midilib2.dll).