struct SDS_MIDI_STAT { Sint16 rev; Sint8 m_Vol; Sint8 m_Pan; Sint8 m_FxInLev; Sint8 m_DrctLev; Sint16 m_Pitch; Sint16 m_SeqSpeed; Uint32 m_SeqTotalBeatTime; Sint32 m_SeqCurAdr; Uint32 m_Err; Uint32 m_Flg; }; typedef struct SDS_MIDI_STAT SDS_MIDI_STAT;
rev リザーブ領域 m_Vol ポートのボリューム値 m_Pan ポートのパンポット値 m_FxLev ポートのFXレベル m_DrctLev ポートのダイレクトレベル m_Pitch ポートのピッチ値 m_Speed ポートのスピード値 m_TotalBeatTime 再生しているサウンドデータの総拍数 m_CurAdr 再生しているサウンドデータのカレントポインタ m_Err 各種エラー m_Flg 各種フラグ
MIDIポートのステータス情報のデータタイプです。メンバ m_Flgには次のビットが設定されます。該当ビットが立っていると対応する機能を実行中ということになります。
SDD_PORT_FLG_PLAY MIDI Sequence Dataの再生中 SDD_PORT_FLG_PAUSE MIDI Sequence Dataの再生を一時停止中 SDD_PORT_FLG_CHG_VOL ボリューム設定中(フェード処理中) SDD_PORT_FLG_CHG_SPEED スピード設定中(フェード処理中) SDD_PORT_FLG_CHG_PITCH ピッチ設定中(フェード処理中) SDD_PORT_FLG_CHG_PAN パンポット設定中(フェード処理中) SDD_PORT_FLG_TROUBLE エラー発生時
メンバ m_Errには次のビットが設定されます。該当ビットが立っていると対応するエラーが発生しているということになります。
定義 意味 SDD_PORT_ERR_PRIORITY 現在再生しているサウンドデータのプライオリティより新たに再生しようとしたサウンドデータのプライオリティが低いとき SDD_PORT_ERR_REQUEST_NUM サウンドデータの再生リクエストを受けたが実行できない場合(例えば存在しないバンク番号や存在しないデータ番号を指定した場合など) SDD_PORT_ERR_DATA_ID_ERR 再生しようとしたサウンドデータのデータIDおよびバンクIDに異常があるとき SDD_PORT_ERR_VER_ERR サウンドデータのバージョンが正しくないとき(古いもしくは新しい) SDD_PORT_ERR_MIDI_BUF_NO_ENOUGH MIDIシーケンサもしくはサウンドライブラリからMIDI音源に対してメッセージを送信したときにバッファがオーバフローしたとき SDD_PORT_ERR_MIDI_SEQ_BUF_NO_ENOUGH MIDIシーケンサがMIDI音源に対してメッセージを送信したいがバッファフローのために送信できない時のスタックがオーバフローしたとき SDD_PORT_ERR_SLOT_NO_ENOUGH MIDIシーケンサもしくはサウンドライブラリからMIDI音源に対してメッセージを送信したときにバッファがオーバフローしたとき
/* * ハンドルgMidiHandleのポートでMIDI Sequence Dataを再生中かどうか調べる */ SDS_MIDI_STAT stat; sdMidiGetStat( gMidiHandle, &stat) if ( stat.m_Flg & SDD_PORT_FLG_PLAY) { /* * MIDI Sequence Dataを再生中 */ }
MIDI音源のポートに対してボリュームなど各種設定を行おうとした場合、Sound Driverのステータスはすぐに変化しませんので、 sdMidiGetStat()関数で取得したステータスが意図しない値の場合があります。 ステータスが変化するのはSound LibraryがHost CommandをSound Driverに送信し、それをSound Driverが解析し、正常に実行された後になります。
sdMidiGetStat() MIDIポートのステータスの取得 sdMidiGetStat() MIDIポートのステータスの取得