##### 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