MIDI演奏
0x9n,note,velocityです。0xは16進表記の意味です。n: はチャンネル番号で0..15がmidiのチャンネル1..16に対応します。midiチャンネルは楽器の音色に対応します。


#use RS232(BAUD=31250, xmit=PIN_B5, rcv=PIN_B2)31250はMIDIで規定の伝送速度です。
data[0] = 0x90; // 0x9n n=0..15チャンネル data[1] = 60; // note data[2] = 64; // velocity 0〜127これは、0x90はノートオン(発音)コマンドで、0チャンネル(GM音源ではピアノ音)に、ノート番号60(中央のド)を、強さ64で出力します。続けてノート音コマンドを出せば、音が重なって聞こえます。ここでは。ド、ミ、ソ の音を重ねます。0.5秒の休止後、強さ0のノートオンコマンドで発声を停止します。
//#include <16f88.h>
#include <16f873A.h>
//プログラミング:奥田
#fuses HS, NOWDT, NOPROTECT, NOBROWNOUT, NODEBUG, NOLVP
#use delay(CLOCK=20000000)
#use RS232(BAUD=31250, xmit=PIN_B5, rcv=PIN_B2) // BAUD=312501 ⇒ 1バイトを320usで送信
int data[3];
void SendData();
void main()
{
while(1)
{
// ドの音
data[0] = 0x90; // 0x9n n=0..15チャンネル
data[1] = 60; // note
data[2] = 64; // velocity 0〜127
SendData();
// レの音
data[0] = 0x90; // 0x9n n=0..15チャンネル
data[1] = 64; // note
data[2] = 64; // velocity 0〜127
SendData();
// ミの音
data[0] = 0x90; // 0x9n n=0..15チャンネル
data[1] = 67; // note
data[2] = 64; // velocity 0〜127
SendData();
delay_ms(500);
data[0] = 0x90; // 0x9n n=0..15チャンネル
data[1] = 60; // note
data[2] = 0; // velocity 0〜127
SendData();
data[0] = 0x90; // 0x9n n=0..15チャンネル
data[1] = 64; // note
data[2] = 0; // velocity 0〜127
SendData();
data[0] = 0x90; // 0x9n n=0..15チャンネル
data[1] = 67; // note
data[2] = 0; // velocity 0〜127
SendData();
delay_ms(500);
}
}
// データを送る
void SendData()
{
int i;
for(i=0; i<3; i++) putc(data[i]);
}