o
odin.langpkg.dev
packages / library / odin-libremidi

odin-libremidi

84ec4e4library

No description provided.

No license · updated 2 months ago

odin-libremidi

Odin bindings for libremidi — クロスプラットフォーム MIDI ライブラリ (hot-plug / MIDI 1.0 / MIDI 2.0 UMP 対応)。

OS Backend Status
macOS CoreMIDI
Linux ALSA 🚧
Windows WinMM 🚧

Requirements

  • Odin dev-2026-05+
  • CMake 3.22+
  • Xcode CLT (macOS)

Build

git clone https://github.com/jcelerier/libremidi.git
make libremidi          # → macos/libremidi.a (静的、推奨)
make libremidi-shared   # → macos/libremidi.dylib (動的)

Run examples

make macos_version       # version 表示
make macos_list_ports    # ポート列挙
make macos_hotplug       # hot-plug 監視
make macos_midi_in       # MIDI 入力受信

動的リンクは make LIBREMIDI_SHARED=true macos_hotplug

Usage

自分のプロジェクトで使う場合は本リポジトリを vendor し、ビルド済みの macos/libremidi.a も同梱する。

import lr "vendor/odin-libremidi"

最小の hot-plug receiver は example/hotplug.odin 参照。重要なポイント:

  1. proc "c" コールバック内では先頭で context = g_ctx を必ず実行
  2. macOS では CoreMIDI 通知のために CFRunLoopRun() 等で runloop を回す
  3. Port_Metadata は使い終わったら port_metadata_destroy で解放

Regenerate bindings (任意)

export ODIN_C_BINDGEN=/path/to/odin-c-bindgen/bindgen
make regen-bindings

出力 (bindgen/output/) を手動で libremidi.odin にマージする。

Troubleshooting

  • CoreMIDI シンボル未解決: makeodin run を使うこと。odin build 直叩きなら -extra-linker-flags:"-lc++ -framework CoreMIDI -framework CoreFoundation -framework CoreAudio" を付ける
  • @rpath/libremidi.dylib 読み込めない: 静的リンクを使うか -Wl,-rpath,@executable_path/../macos を追加
  • 入力ポートが見つからない: Audio MIDI Setup で IAC Driver を online にして確認
  • hot-plug が発火しない: CFRunLoop を回していない

License

  • odin-libremidi: (TBD)
  • libremidi (同梱バイナリ): BSD-3-Clause — macos/LIBREMIDI_LICENSE.md

See also