サンプルプラグイン
外部 API を使う独立した .aux2 のサンプルです。共有 MIDI から BPM・拍子・小節・ノート数などを取得してテキスト表示します。サンプルとそのビルド(xmake)は公開リポ midi-info-api に同梱されており、本体には submodule(external/midi-info-api)として取り込んでいます。
- ソース:
external/midi-info-api/samples/api-sample/MidiApiSample.cpp(この 1 ファイルのみ・コア非依存) - 依存: AviUtl2 SDK と 公開ヘッダ
MidiInfoAPI.h(MIT・別リポ / submoduleexternal/midi-info-api)だけ
ビルド
xmake と AviUtl2 SDK(filter2.h / plugin2.h)が必要です。SDK は AviUtl 作者の配布ページから入手できます。
- ページ: https://spring-fragrance.mints.ne.jp/aviutl/
- 直接DL: https://spring-fragrance.mints.ne.jp/aviutl/aviutl2_sdk.zip
展開先(filter2.h などがある場所)を AVU2_SDK_DIR に指定してビルドします。
bash
xmake build MidiInfoApiSampleビルド後、AVU2_PLUGIN_DIR(既定 C:\ProgramData\aviutl2\Plugin)に MidiApiSample.aux2 がコピーされます。MidiInfoApiSample は既定ビルド対象外なので、明示的に指定したときだけビルドされます。
公開リポ
midi-info-api単体でもxmake buildでサンプルをビルドできます(同じくAVU2_SDK_DIRが必要)。
使い方
MidiInfoObject.aux2(本体)とMidiApiSample.aux2(サンプル)の両方をプラグインフォルダに入れて AviUtl2 を起動。- タイムラインに MIDI Source を置いて
.midを読み込む(=共有 MIDI が確定)。 - MIDI API Sample(カテゴリ
MIDI Info)を置くと、共有 MIDI の情報が表示されます。
API が見つからない場合は画面に「API not found」と出るので、連携の有無がすぐ分かります。
実装のポイント
API の取得(初回のみ解決してキャッシュ)
cpp
const MidiInfoAPI* get_api() {
static const MidiInfoAPI* api = [] () -> const MidiInfoAPI* {
HMODULE h = GetModuleHandleW(L"MidiInfoObject.aux2");
if (!h) return nullptr;
auto fn = reinterpret_cast<MidiInfo_GetAPI_Fn>(
GetProcAddress(h, MIDIINFO_GETAPI_SYMBOL));
return fn ? fn(MIDIINFO_API_VERSION) : nullptr;
}();
return api;
}取得 → 表示 → 解放
cpp
double t = api->get_shared_time(); // MIDI Source に同期
if (!(t == t)) t = video->object->time; // NaN なら自分の時刻
MidiInfoAnalysis* an = api->acquire(nullptr); // 共有 MIDI
if (api->is_ok(an)) {
uint8_t num, den; api->signature_at(an, t, &num, &den);
// bpm_at / bar_number_at / count_at / nps_at / total_notes ... を表示
}
api->release(an); // 必ず解放テキストは GDI でビットマップ化していますが、note_spans を使えば独自のピアノロールなどのビジュアライザも作れます。
自作プラグインへの組み込み
配布物としては MidiInfoAPI.h の 1 ファイルをコピーすれば十分です。リンク不要(GetProcAddress で実行時解決)。詳細は 概要・はじめかた と 関数リファレンス を参照してください。