SDE_ERR sdMidiSetMes( handle, midi_mes_ptr, midi_mes, ... )
SDMIDI handle
SDS_MIDI_MES *midi_mes_ptr
const Uint8 midi_mes
...
handle MIDIポートのハンドル midi_mes_ptr MIDIメッセージを格納する変数のポインタ midi_mes MIDIメッセージ ...
SDE_ERR_NOTHING エラーなし SDE_ERR_NO_INIT Sound Library が初期化されていない SDE_ERR_HANDLE_NULL ハンドルがNULL
指定したMIDIポートに送信するMIDIメッセージを設定します。可変長引数になっているのでMIDIメッセージに応じて続けてデータを記述します。 指定可能なMIDIメッセージは次のように定義されています。
定義 意味 SDD_MIDI_MES_NOTE_OFF MIDIノートオフ SDD_MIDI_MES_NOTE_ON MIDIノートオン SDD_MIDI_MES_MONO_PRES MIDIモノプレッシャー SDD_MIDI_MES_PRG_CHG MIDIプログラムチェンジ SDD_MIDI_MES_CTL_CHG MIDIコントロールチェンジ SDD_MIDI_MES_POLY_PRES MIDIポリプレッシャー SDD_MIDI_MES_PITCH_BEND MIDIピッチベンド
MIDIコントロールチェンジを使用するときは下記のマクロ定数を利用できます。
定義 意味 SDD_MIDI_CTL_CHG_LSB MIDIコントロール番号のLSB側のオフセット SDD_MIDI_CTL_CHG_MSB MIDIコントロール番号のMSB側のオフセット SDD_MIDI_CTL_CHG_BANK Bankチェンジ SDD_MIDI_CTL_CHG_MODULATION モジュレーション SDD_MIDI_CTL_CHG_VOL ボリューム SDD_MIDI_CTL_CHG_PAN パンポット SDD_MIDI_CTL_CHG_EXPRESSION エクスプレッション
SDD_MIDI_CTL_CHG_BANKは、SEGA Library 環境ではSDD_MIDI_CTL_CHG_MSBとの論理和である必要があります。 この関数はMIDIメッセージを作成するだけです。送信にはsdMidiSendMes()関数を使用します。
SDMIDI midi_handle; SDS_MIDI_MES midi_mes; Sint8 midi_ch; midi_ch = 0; sdMidiOpen( &midi_handle); /* Set MIDI Channel Program Bank Number */ sdMidiSetMes( midi_handle, &midi_mes, SDD_MIDI_MES_CTL_CHG | midi_ch, SDD_MIDI_CTL_CHG_MSB | SDD_MIDI_CTL_CHG_BANK, 0); sdMidiSendMes( midi_handle, &midi_mes, 0); /* Set MIDI Channel Volume */ sdMidiSetMes( midi_handle, &midi_mes, SDD_MIDI_MES_CTL_CHG | midi_ch, SDD_MIDI_CTL_CHG_VOL, 127); sdMidiSendMes( midi_handle, &midi_mes, 0); /* Set MIDI Channel Panpot */ sdMidiSetMes( midi_handle, &midi_mes, SDD_MIDI_MES_CTL_CHG | midi_ch, SDD_MIDI_CTL_CHG_PAN, 64); sdMidiSendMes( midi_handle, &midi_mes, 0); /* Set MIDI Channel Program Data Number */ sdMidiSetMes( midi_handle, &midi_mes, SDD_MIDI_MES_PRG_CHG | midi_ch, 0x00); sdMidiSendMes( midi_handle, &midi_mes, 0); /* Set MIDI Channel Note On */ sdMidiSetMes( midi_handle, &midi_mes, SDD_MIDI_MES_NOTE_ON | midi_ch, 60, 127); sdMidiSendMes( midi_handle, &midi_mes, 0);
定期的なタイミングで行うアプリケーションで用意したサーバ関数などで、V同期で変化のない値を毎回設定し続けることは効率的なHost Command Bufferの利用方法でないばかりか、Sound Driverの負荷を増やす原因になります。 なるべく行わないでください。
sdMidiSendMes() MIDIポートにMIDIメッセージを送信