如何用程序获取MIDI输出设备名
如何用程序获取MIDI输出设备名,如何选择其中某个作音源 使用 midiOutGetDevCaps 即可。#include<stdio.h>
#include<tchar.h>
#include<Windows.h>
int print_device(UINT nDevId)
{
MIDIOUTCAPSA midiCaps; // 设备信息
if(midiOutGetDevCapsA(nDevId, &midiCaps, sizeof midiCaps) == MMSYSERR_NOERROR)
{
printf("制造商标识:%u\n", midiCaps.wMid);
printf("产品标识:%u\n", midiCaps.wPid);
printf("驱动版本:%u.%u\n", HIBYTE(midiCaps.vDriverVersion), LOBYTE(midiCaps.vDriverVersion));
printf("产品名:%s\n", midiCaps.szPname);
printf("MIDI输出方式:");
switch(midiCaps.wTechnology)
{
case MOD_MIDIPORT:
printf("MIDI硬件端口\n");break;
case MOD_SYNTH:
printf("合成器\n");break;
case MOD_SQSYNTH:
printf("方波合成器\n");break;
case MOD_FMSYNTH:
printf("FM合成器\n");break;
case MOD_MAPPER:
printf("微软MIDI波表\n");break;
case MOD_SWSYNTH:
printf("软件合成器\n");break;
default:
printf("未知原理\n");break;
}
if(midiCaps.wTechnology != MOD_MIDIPORT) // 端口不存在合成声音数量概念
{
printf("内部合成器支持的声音数量:%u\n", midiCaps.wVoices);
printf("内部合成器支持的最大同时播放音符数:%u\n", midiCaps.wNotes);
}
printf("响应的通道的掩码:0x%04X\n", midiCaps.wChannelMask);
if(midiCaps.dwSupport)
{
printf("支持的功能:(0x%04X)\n", midiCaps.dwSupport);
if((midiCaps.dwSupport & MIDICAPS_CACHE) == MIDICAPS_CACHE)
{
printf("\t补丁缓存\n");
}
if((midiCaps.dwSupport & MIDICAPS_LRVOLUME) == MIDICAPS_LRVOLUME)
{
printf("\t左右声道音量控制\n");
}
else if((midiCaps.dwSupport & MIDICAPS_VOLUME) == MIDICAPS_VOLUME)
{
printf("\t音量控制\n");
}
if((midiCaps.dwSupport & MIDICAPS_STREAM) == MIDICAPS_STREAM)
{
printf("\t流式输出\n");
}
}
return 1;
}
else
{
printf("获取该设备信息失败。\n");
return 0;
}
}
int main(int argc, char**argv)
{
UINT numDevs; // 设备个数
UINT i;
numDevs = midiOutGetNumDevs(); // 取得设备个数
printf("MIDI设备个数:%u\n", numDevs);
for(i = 0; i < numDevs; i++)
{
printf("================================\n");
printf("第 %u 个设备的信息:\n", i + 1);
print_device(i);
}
printf("================================\n");
printf("微软内置波表合成器(MIDI_MAPPER):\n");
print_device(MIDI_MAPPER);
return 0;
}
如果要选择其中一个作为音源的话,在调用midiOutOpen()函数打开MIDI设备的时候uDeviceID这个参数填写指定的设备编号就行。注意设备编号是从0开始数的。 我废了很大的精力才知道要用midiOutGetDevCaps这个 API函数。站长对MIDI类好像很有研究啊,发的这方面的文章都是很难在其它的地方找到的资料。我研究了一下站长的那个VB MIDI播放器,找到了从任意位置播放的一个思路,不知站长是否有兴趣听听。 :):):):):):):)
页:
[1]