#include <windows.h> #include <stdio.h> typedef union _midi { DWORD dwData; BYTE bData[4]; } MIDI; void printtable(void); int main(int argc,char **argv) { unsigned long result,device; HMIDIOUT handle; unsigned char key; MIDI midi; printf("initlizing .../n"); result=midiOutOpen(&handle,0,0,0,CALLBACK_NULL); if(result) { printf("There is an error opening the default MIDI out device!/n"); } else printtable(); if(argc==1) { puts("0~7 for piano/nyou can try 0~126 for different instruments/n"); printf("instrument num:"); scanf("%u",&device); } if(argc==2) { sscanf(argv[1],"%u",&device); } midi.bData[1]=device; midi.bData[0]=0xc0; midi.bData[3]=0; midi.bData[3]=0; midiOutShortMsg(handle,midi.dwData); midiOutSetVolume(handle,0xffffffff); midiOutGetVolume(handle,&result); // printf("current volume 0x%x/n",result); while(TRUE) { key=getch(); switch(key) { case 'a': midiOutShortMsg(handle, 0x00603C90); // Sleep(1000); break; case 's': midiOutShortMsg(handle, 0x00603E90); // Sleep(1000); break; case 'd': midiOutShortMsg(handle, 0x00604090); // Sleep(1000); break; case 'f': midiOutShortMsg(handle, 0x00604190); // Sleep(1000); break; case 'j': midiOutShortMsg(handle, 0x00604390); // Sleep(1000); break; case 'k': midiOutShortMsg(handle, 0x00604590); // Sleep(1000); break; case 'l': midiOutShortMsg(handle, 0x00604790); // Sleep(1000); break; case 'z': midiOutShortMsg(handle, 0x00603090); // Sleep(1000); break; case 'x': midiOutShortMsg(handle, 0x00603290); // Sleep(1000); break; case 'c': midiOutShortMsg(handle, 0x00603490); // Sleep(1000); break; case 'v': midiOutShortMsg(handle, 0x00603590); // Sleep(1000); break; case 'm': midiOutShortMsg(handle, 0x00603790); // Sleep(1000); break; case ',': midiOutShortMsg(handle, 0x00603990); // Sleep(1000); break; case '.': midiOutShortMsg(handle, 0x00603b90); // Sleep(1000); break; case 'q': midiOutShortMsg(handle, 0x00604890); // Sleep(1000); break; case 'w': midiOutShortMsg(handle, 0x00604a90); // Sleep(1000); break; case 'e': midiOutShortMsg(handle, 0x00604c90); // Sleep(1000); break; case 'r': midiOutShortMsg(handle, 0x00604d90); // Sleep(1000); break; case 'u': midiOutShortMsg(handle, 0x00604f90); // Sleep(1000); break; case 'i': midiOutShortMsg(handle, 0x00605190); // Sleep(1000); break; case 'o': midiOutShortMsg(handle, 0x00605390); // Sleep(1000); break; case '+': if(result>=0xfefffeff) break; result+=0x01000100; midiOutSetVolume(handle,result); printf("set volume to 0x%x/n",result); break; case '-': if(result<=0x01000100) break; result-=0x01000100; midiOutSetVolume(handle,result); printf("set volume to 0x%x/n",result); break; case ' ': goto finish; default: break; } } /* Now let's turn off those 3 notes */ finish: midiOutShortMsg(handle, 0x00003C90); midiOutShortMsg(handle, 0x00004090); midiOutShortMsg(handle, 0x00004390); /* Close the MIDI device */ midiOutClose(handle); return 0; } void printtable(void) { char table[]="Q/tW/tE/tR/t/tU/tI/tO/n"/ "C2/tD2/tE2/tF2/t/tG2/tA2/tB2/n"/ "A/tS/tD/tF/t/tJ/tK/tL/n"/ "C1/tD1/tE1/tF1/t/tG1/tA1/tB1/n"/ "Z/tX/tC/tV/t/tM/t,/t./n"/ "C0/tD0/tE0/tF0/t/tG0/tA0/tB0/n"; puts(table); printf("space to escape/n"); }