Pascal使用TMediaPlayer播放MIDI文件时的错误
如题,报错的错误信息是:
Project Project1.exe raised exception class EMCIDeviceError with message '使用的 MCI 设备不支持指定的命令。'. Process stopped. Use Step or Run to continue.
多方查找后,终于找到原因:MediaPlayer的Shareable设置为True导致的,改为False即播放成功。
结论1:Midi设备不能使用Shareable。
结论2:单个进程,注意是单个进程只能打开一个Midi设备,即只能同时播放一个Midi文件。
结论3:结论2的原因是MIDI设备使用的是一个HMIDIOUT的句柄,这个句柄在单个进程中是全局且唯一的,所以如果需要突破结论2的限制,实际上只需要共用一个全局的HMIDIOUT的句柄即可。从另一角度看的话,这相当于在一个MIDI设备上播放了多个音轨而已。有关本结论的代码已不适合使用TMediaPlayer播放器控件,请自行处理。
结论4:这个不是Pascal的Bug,应该属于Windows的特性!
以上为详细折腾结果,仅供参考。