Sound Library - MIDIモジュールコントロール関数

sdMidiSetMes

MIDIポートに送信するMIDIメッセージを作成

書式

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メッセージを送信

sdMidiSetMes
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000