midi_in_poll

受信メッセージの取得

midi_in_poll var_got, var_status, var_d1, var_d2

var_got    ... 取得結果フラグ (int 変数: 1=取得成功 / 0=バッファ空)
var_status ... 結果のステータスバイト (int 変数)
var_d1     ... データ1 (int 変数)
var_d2     ... データ2 (int 変数)

(プラグイン / モジュール : hspmidi.dll)

解説

内部リングバッファから 1 件取り出します。
  var_got = 1 ... 取得成功 (status/d1/d2 に値が入る)
  var_got = 0 ... バッファ空 (status/d1/d2 は 0)

status には「チャンネル付きステータスバイト」(例: $90 ch0 Note On)
がそのまま入ります。チャンネル分離が必要な場合は
  ch = st & $0F
  kind = st & $F0
のようにマスクしてください。

例 (受信ループ):
  midi_in_open 0
  midi_in_start
  *poll
    midi_in_poll got, st, d1, d2
    if got {
      kind = st & $F0
      ch   = st & $0F
      if kind == MIDI_NOTE_ON  : mes strf("ON  ch%d note=%d vel=%d", ch, d1, d2)
      if kind == MIDI_NOTE_OFF : mes strf("OFF ch%d note=%d vel=%d", ch, d1, d2)
      goto *poll
    }
    await 5
    goto *poll

情報

プラグイン / モジュールhspmidi.dll
バージョン1.0
作成日2026-04-15
著作者IronHSP / hspmidi
URLhttps://github.com/inovia/IronHSP
備考hspmidi.dll は Windows の winmm (midiOut* / midiIn*) を使った
MIDI 入出力プラグインです。ショートメッセージ (Note On/Off,
Program Change 等) の送受信のみサポートします。SysEx は v1 では非対応。

#include "hspmidi.as" ; 直接使用
#include "iron_midi.hsp" ; note_name("C4") 等の便利 cfunc 付き

制約 (v1):
- MIDI out / in それぞれハンドルは同時 1 個のみ
- MIDI in はワーカースレッド callback → 内部リングバッファ (1024)
に蓄え、HSP 側は midi_in_poll で取り出すポーリング式
- SysEx / MIM_LONGDATA は未対応

戻り値規約:
0 ... 成功
負 ... 失敗 (winmm の MMRESULT を負符号化したもの)
タイプ拡張命令
グループhspmidi ― MIDI in
対応環境
  • その他 : Win32 / Win64
hs ファイルhsphelp\hspmidi.hs