MCIを利用したMIDIの楽曲例です。簡単にドレミ音を再生できるようにしようとしていたのですが、某所に7行MMLプレーヤというものが。。→here
//----------------------------------------------------------------- // melody.c: // MCIデバイスのMIDI再生の例 // Last Update: <2004/11/27 15:58:12 A.Murakami> //----------------------------------------------------------------- #include <stdio.h> #include <windows.h> #include <mmsystem.h> //----------------------------------------------------------------- enum DOREMI_KEY { DO=0,RE=2,MI=4,FA=5,SO=7,RA=9,SI=11 }; enum DOREMI_EXT_KEY { S=1,UP=12,DOWN=-12,END=-1 }; //----------------------------------------------------------------- // melody //----------------------------------------------------------------- static int doremi_uta[] = { DO,RE,MI,DO,MI,DO,MI,RE,MI,FA,FA,MI,RE,FA, MI,FA,SO,MI,SO,MI,SO,FA,SO,RA,RA,SO,FA,RA, SO,DO,RE,MI,FA,SO,RA,RA,RE,MI,FA,SO,RA,SI, SI,MI,FA,SO,RA,SI,UP+DO,S+SI,SI,RA,FA,SI,SO,UP+DO,END }; //----------------------------------------------------------------- int play_n(int melody[]); void play_melody(int melody[]); int midi_set(); void midi_end(); void midi_play(int note); //----------------------------------------------------------------- // midi 演奏 HMIDIOUT hMidiOut; int main() { int cmd=0; if(midi_set()){ printf("** playing melody\n"); play_melody(doremi_uta); midi_end(); printf("** end melody.\n"); } return 0; } void play_melody(int melody[]) { int i; for(i=0;i<play_n(melody);i++){ midi_play(melody[i]); Sleep(4000/10); } } int play_n(int melody[]) { int i=0; while(melody[i++]!=END); return --i; } int midi_set() { if(!midiOutGetNumDevs()) return 0; // MIDI音源を使用できない if(midiOutOpen(&hMidiOut,-1,0,0,0)) return 0; // MIDI音源がすでに使用されているか、 // その他の理由で使用できない return 1; } void midi_end() { midiOutReset(hMidiOut); midiOutClose(hMidiOut); } void midi_play(int note) { midiOutShortMsg(hMidiOut,0x7F3C90+note*0x100); } |
** playing melody ** end melody. |