View on GitHub

clap-mml-play-server

clap-mml-play-server

音色の鍵盤追従の測定

drum/percussion の分類には、マレット系やDexedのPERCSYNのように旋律を弾ける音色が混ざります。音色名では見分けられないため、実際に鳴らして「noteを変えると音高がついてくるか」(tracks_keyboard)を測ります。結果はcat-music-patterns/patch-pitch-tracking.jsonで共有し、各アプリがtrueの音色をleadへ移します。判定に音色名は使いません。

流れ

段 置き場 役割
1音色の計測 このrepoのprobe-pitch-tracking patch文字列からprobe-voicingと同じ経路でpluginを選んで鳴らし、判定を出す。pluginは問わない
対象選択と一括計測 clap-mml-render-tuiのcmrt build-pitch-tracking cmrtのcatalogからdrumのpercussion行の音色を選び、1音色ごとに上を子プロセスで起動して表を書く
共有 cat-music-patterns/patch-pitch-tracking.json 生成コマンドと形式は同repoのREADMEを参照
表示 cat-plugin-player・cmrt・cat-smf-editor 照合はclap-mml-render-tuiのcmrt-patches(pitch_tracking)を共有する

対象選択をこのrepoに置かないのは、drum行の分類(PatchRoleIndex)がclap-mml-render-tuiにあり、そちらがこのrepoのcmrt-coreに依存しているためです。このrepoから呼ぶと依存が循環します。1音色ごとに子プロセスにするのは、1つのpluginが落ちても全件の計測を止めないためです。

1音色の計測

cargo run --release -p clap-mml-realtime-play-server -- probe-pitch-tracking --patch "patches_factory/Percussion/Drum One.fxp" --json

--patchはcatalogの表示名(patches_dirからの相対パス、Dexedはcartridge.syx/番号 名前)か絶対パスです。音声デバイスは開かず、config・catalog・音色stateを書き換えません。--jsonの出力は{ "patch", "tracks_keyboard", "observations": [{ "note", "frequency_hz" }] }で、推定できなかったnoteのfrequency_hzはnullです。

判定条件

48kHz・256frames、MIDI note 48・49・55・60、velocity 100・CC1=0で鳴らします。noteごとに新しいinstanceを作り(前のnoteの余韻を次の窓へ持ち込まないため)、4block空回ししてからnote-onし、約500msを録ります。

音高はYINの累積平均正規化差分で推定し、明瞭な基音を持たないFM系の音のために、Hann窓FFTのスペクトルの山の移動も見ます。次のどちらかならtracks_keyboard=trueです。

解析範囲は35〜2000Hzです。閾値は校正していません。

制限