製品ページの例のとおり、AI に「強く弾くほど、反復が長く続くエフェクトを作りたい」と頼み、できたエフェクトを弾いてから、AI 自身にモニタの記録を読ませて確かめました。
AI はエフェクトを書いて MIDIFabric の確認(Check)を通し、提出すると自動で登録されました。弾いた後、AI はルーティングの構成とモニタの記録を MCP で読み、反復の回数、同じ音を弾き直したときの止め方、鍵盤を押さえたままのときの扱いまで、出力された MIDI で確かめました。ログを貼り付ける必要はありませんでした。ただ、AI に確かめられるのは出した MIDI までで、どう聞こえるかは、弾いた私たちの耳で確かめるしかありませんでした。続けて頼んだ「弱く弾いたときは短く、音程の変化はノブで」という変更も、同じように AI が書いて確かめました。
AI とのやり取りは、記事の最後に全文をそのまま載せています。
頼んだこと
使った AI のツールは Claude Code(モデルは Claude Opus 5.5)で、MIDIFabric とは MCP でつないでいます。MIDIFabric の設定 > AI では、提出されたエフェクトの自動登録と、モニタとルーティングの読み取りをオンにしました。読み取りは、どちらも初期設定ではオフです。
頼んだのは、次の一文です。
強く弾くほど、反復が長く続くエフェクトを作りたい
この実演の前にあったこと
同じ日に、同じ依頼を一度試しています。そのときの最初の版は、弾いてみると二つの問題がありました。同じ音を続けて弾くと、前の反復の Note Off が新しい音を数ミリ秒で切ってしまうこと。反復を同じ割合で弱めていたので、後半の反復が聞こえないほど小さくなること。どちらも、確認(Check)は通っていて、弾いて初めて分かりました。
今回の AI は、その経緯を知っている同じ会話の中で作業しました。そのため、最初の版から二つの問題を避けた設計になっています。この記事は「AI の最初の試みがどうなるか」の記録ではなく、作成から確認までの流れの記録です。また、この会話は MIDIFabric の開発用の環境で、MCP 以外の情報も読める状態でした。利用者の環境での実演は、別に行う予定です。
AI がしたこと
- MIDIFabric の作成ガイドを読み直しました。作業の手順には、新しく「ルーティングとモニタの読み取りで、実際の動きを確かめる」が加わっていました。
- 「Velocity Repeat」というエフェクトを書き、確認(Check)にかけました。エラーも警告もありませんでした。
- 提出してよいかを私たちに確かめてから、提出しました。自動登録により、そのままライブラリに登録されました。AI は登録されたエフェクトを読み出し、コードが提出したものと同じであることを確かめました。

AI Builder のログには、受け取りと自動登録の成功が、同じ秒の中に並んでいます。Apply を押す操作はありません。
反復の回数は弾いたベロシティに比例し、反復は回を追うごとに均等に弱くなって、最後の回が「弾いた強さ × Tail」になります。
-- Map MIDI 1.0 velocity (1-127) to a repeat count between 1 and max_repeats.
local function repeat_count(velocity, max_repeats)
local count = math.floor(velocity / 127 * max_repeats + 0.5)
return math.max(1, math.min(max_repeats, count))
end
-- Fade evenly over this chain: the last repeat plays at Tail x the played velocity.
local level = data.tail ^ (data.index / data.repeats)
そのほか、鍵盤ごとに反復を一つだけ持ち、同じ音を弾き直したら前の反復を止めます。押さえたまま反復が始まったら、反復がその音を引き継ぎ、後で鍵盤を離したときの Note Off は捨てます。操作パネルには、Interval(ノブ、初期値 150 ms)、Max Repeats(8)、Tail(0.35)、Gate(0.5)が並びます。
AI が確かめたこと
ルーティングに置いて Apply し、弾いたら「弾きました」とだけ伝えました。
AI はまずルーティングの構成を読み、KeyStep Pro → Velocity Repeat → JUNO-D8 の経路が有効で、設定が初期値のままであることを確かめました。次にモニタの記録を読みました。記録が多かったので 2 回に分けて読み、欠落も一時停止もないことも確かめています。
| 弾いた音 | 反復の回数 | 反復のベロシティ |
|---|---|---|
| G3 v88 | 6 | 74、62、52、44、37、31 |
| G3 v114 | 7 | 98、84、73、63、54、46、40 |
| C3 v103 | 6 | 86、73、61、51、43、36 |
| G3 v127 | 8 | 111、98、86、75、66、58、51、44 |
どれも計算どおりで、最後の反復は弾いた強さのほぼ 0.35 倍です。反復の間隔は約 150 ms、1 回の長さは約 75 ms でした。
- 同じ音の弾き直し。 G3 の反復の途中で G3 を弾き直すと、鳴っていた反復の Note Off が新しい音の直前に出て、古い反復の残りは出ませんでした。新しい音が古い Note Off に切られることはありませんでした。
- 違う音の重なり。 C3 と E3 の反復は、並んで進んでも互いに影響しませんでした。
一つ、確かめられていないことがありました。AI は、どの音も 1 回目の反復(150 ms 後)より前に鍵盤を離していたことに気づき、押さえたまま弾いてほしいと頼んできました。
押さえたまま弾いた 4 音(B3 は約 4.4 秒)では、1 回目の反復の時点で元の音が止まり、反復が音を引き継ぎました。鍵盤を離したときの Note Off は、4 回ともモニタに「blocked」(エフェクトが受け取って先へ送らなかった)と記録され、出力されていませんでした。
耳で確かめたこと
モニタで分かるのは、出した MIDI までです。JUNO-D8 で弾いてみると、強く弾いたときは長く続き、最後の反復までちゃんと聞こえました。
続けて頼んだこと
製品ページの例の続きを、そのまま頼みました。
弱く弾いたときは、もう少し短く。音程の変化もノブで調整したい
AI は登録済みのエフェクトを読み直しました。パネルの配置は、私たちがアプリで整えた後でした。AI はその配置を残したまま、二つを足しました。
- Velocity Curve(1〜3、初期値 2)。 回数を
round((ベロシティ / 127) ^ Curve × Max Repeats)で決めます。強く弾いたときは今までどおり最大まで反復し、弱いときと中くらいのときは少なくなります。1 にすると、前の版と同じ回数に戻ります。 - Pitch Step(ノブ、−12〜+12 半音、初期値 0)。 反復のたびに、その半音ずつ音程をずらします。MIDI の音域を出たら、反復を止めます。

AI は、音程をずらした反復が、別に押さえている鍵盤と同じ音になると、その音を止めてしまうことがある点も、注意として挙げていました。確認(Check)を通し、私たちの了承を得て更新として提出すると、自動で反映されました。AI はルーティングを読み、置いてあるエフェクトの定義の版が上がって、二つの設定が加わったことを確かめました。
弾いた後、AI はモニタの記録を読み、回数を前の版と比べました。
| 弾いた音 | 反復の回数 | 前の版なら |
|---|---|---|
| A3 v37 | 1 | 2 |
| G3 v50 | 1 | 3 |
| A3 v63 | 2 | 4 |
| C4 v99 | 5 | 6 |
| B3 v127 | 8 | 8 |
一方、音程は変わっていませんでした。AI はルーティングを読んで Pitch Step が 0 のままであることを示し、ノブを回してから弾くよう頼みました。+2 にして弾くと、反復のたびに全音ずつ上がり、Note Off もずらした音程に出ていました。
| 弾いた音 | 反復 |
|---|---|
| B3 v72 | 3 回:C#4 → D#4 → F4 |
| B3 v127 | 8 回:C#4 → D#4 → F4 → G4 → A4 → B4 → C#5 → D#5 |
B3 と C4 を強く続けて弾き、上がっていく反復が二つ重なっても、互いに切り合いませんでした。
回数の決め方を聞く
最後に、製品ページの例の 3 つ目を聞きました。
この Lua は、弾く強さから反復の回数をどう決めている?
AI は、登録されているコードを読み直してから答えました。回数は、鍵盤を押した瞬間に repeat_count という関数で一度だけ決まります。
local function repeat_count(velocity, max_repeats, curve)
local count = math.floor((velocity / 127) ^ curve * max_repeats + 0.5)
return math.max(1, math.min(max_repeats, count))
end

順に、ベロシティを 127 で割って 0〜1 にし、Velocity Curve で累乗し、Max Repeats を掛けて四捨五入し、最後に 1 以上 Max Repeats 以下に収めます。今の設定(Max Repeats 8、Velocity Curve 2)では、v29 が 1 回、v72 が 3 回、v99 が 5 回、v127 が 8 回で、モニタで数えた回数と合っていました。反復の途中でスライダーを動かしても、鳴っている反復の回数は変わらず、次に弾いた音から反映されることも説明していました。
分かったこと
- AI がモニタを読めると、確かめる作業がはかどる。 前の試みでは、私たちがログを貼り付け、AI がそれを数えていました。今回は「弾きました」と伝えるだけで、AI が記録を読み、回数や止め方を数えました。足りない確認(押さえたままの場合)にも、AI が自分で気づきました。
- 設定の値も、AI が確かめられる。 音程が変わらなかったとき、AI はルーティングを読んで、ノブが 0 のままだと示しました。記録だけを見ていたら、エフェクトの不具合と区別できなかったかもしれません。
- それでも、聞こえ方は人が確かめる。 記録が正しくても、音として狙いどおりかは別です。前の試みでは、記録は書いたとおりなのに、後半が小さすぎて聞こえないという問題がありました。
- 確認(Check)が通ることと、狙いどおりに鳴ることは別。 これは前の試みと同じです。
AI とのやり取り(そのまま)
上の実演での会話を、そのまま載せます。「ユーザー」が私たちです。私たちが入力した言葉も、AI の返事も、手を加えていません。サイトや記事についての、実演と関係のないやり取りは省きました。AI が会話の裏で呼んだ MCP の道具(登録、ルーティングやモニタの読み取り)は、会話には出てきません。
AI とのやり取りを開く(全文)
ユーザー
強く弾くほど、反復が長く続くエフェクトを作りたい
AI(Claude Code)
「Velocity Repeat」を書き、MIDIFabric の確認(Check)にかけました。エラーも警告もなく通っています。まだ提出はしていません。
今回の版について、先にお伝えしておくことがあります。 私はこの会話で、前の版の問題をすでに知っています。たとえば、同じ音の反復が互いを切る問題や、後半が聞こえなくなる問題です。それを知らないふりをして同じ失敗を書き直すと、作られた実演になります。そのため最初から直した設計で書きました。今回の実演で確かめられるのは、作成 → Check → 登録 → ルーティングとモニタの読み取りでの確認、という流れです。「AI の最初の試みがどうなるか」の検証にはなりません。それは、空のフォルダで起動した別のセッションで確かめる必要があります。
動き
- 回数: 弾いたベロシティに比例します。計算は
round(velocity / 127 × Max Repeats)で、最低1回です。 - 大きさ: 回を追うごとに均等に弱まり、最後の反復が「弾いた強さ × Tail」になります(初期値 0.35)。強く弾いたときも、最後までしっかり聞こえます。
- 同じ音を弾き直したとき: 前の反復を止め、鳴っている反復の Note Off も取り消してからすぐ止めます。
- 押さえたまま反復が始まったとき: 反復がその音を引き継ぎ、後で手を離したときの Note Off は捨てます。
- 操作パネル: Interval(ノブ、初期値 150 ms)、Max Repeats(8)、Tail(0.35)、Gate(0.5)です。
- MIDI 2.0 のノート: 加工せず、そのまま通します。
提出してよいですか? 自動登録がオンなら、提出するとそのまま登録されます。登録されたら、ルーティングに置いてください。置いていただいたら、私がルーティングを読んで、置き場所と設定値を確かめます。
ユーザー
提出してください
AI(Claude Code)
提出したところ、そのまま自動で登録されました。
- 提出: MIDIFabric が受け取りました。Check は指摘なし、候補の版は 1 です。
- 登録: MCP で読み出して確かめました。ライブラリに「Velocity Repeat」が入っていて(ID
1E05E02D-…)、登録された Lua のコードは提出したものと同じです。
次の手順をお願いします。
-
配置: ルーティングで、鍵盤とシンセのあいだに「Velocity Repeat」を置き、Apply してください。鍵盤とシンセの組み合わせは自由です。前回と同じなら、KeyStep Pro か Prophet Rev2 から、内蔵音源か JUNO-D8 へつなぎます。
-
私の確認: 置いて Apply したら教えてください。ルーティングを読んで、配置、接続、設定値を確かめます。
-
試す: 確認ができたら、モニタを一度クリアしてから、次の三つを弾いてください。
- 弱く1回
- 強く1回
- 同じ音を続けて強く2〜3回
弾いたら「弾きました」とだけ教えてください。モニタの記録は私が読んで数えます。
ユーザー
配置してApplyして、弾いてみました、MIDIのログを確認
AI(Claude Code)
MCP でルーティングとモニタを読み、確かめました。記録は全部で 222 件で、2ページに分けて全件を読みました。欠落は 0 件、一時停止はなく、途中で切れた記録もありません。
ルーティング
- KeyStep Pro → Velocity Repeat → Midi Out 2(MIDI4x4 経由の JUNO-D8)につながっていて、Route 1 で有効です。
- 設定は初期値のままでした(Interval 150 ms、Max Repeats 8、Tail 0.35、Gate 0.5)。
反復の回数と大きさ: すべて計算どおりでした。
| 弾いた音 | 計算した回数 | モニタで数えた反復 |
|---|---|---|
| G3 v76 | 5 | 62, 50, 40, 33 の後、弾き直しで止まった(下記) |
| G3 v88 | 6 | 74, 62, 52, 44, 37, 31 |
| G3 v94 | 6 | 79, 66, 56, 47, 39 の後、弾き直しで止まった(下記) |
| G3 v114 | 7 | 98, 84, 73, 63, 54, 46, 40 |
| C3 v103 | 6 | 86, 73, 61, 51, 43, 36 |
| E3 v102 | 6 | 86, 72, 60, 51, 43, 36 |
| G3 v127 | 8 | 111, 98, 86, 75, 66, 58, 51, 44 |
- 最後の反復は、どれも「弾いた強さ × 0.35」になっています(v127 なら 44)。前回のように、聞こえないほど小さい回はありません。
- 間隔は約 150 ms、反復1回の長さは約 75 ms(Gate 0.5)でそろっています。
同じ音を弾き直したとき(2回)
- G3 の反復の途中で G3 を弾き直すと、鳴っていた反復の Note Off が新しい音の直前(0.4 ms 以内)に出て、新しい音が始まりました。
- 古い反復の残りと、予約されていた古い Note Off は出ていません。新しい音が古い Note Off に切られることはなく、どの反復も約 75 ms 鳴っています。前回 0.01〜5 ms で切られていた問題は、直っています。
違う音が重なったとき: C3 と E3 の反復が並行して進みましたが、互いに干渉していません。
その他: 弾いている途中のチャンネルプレッシャー(D0)は、そのまま通っていました。
まだ確かめられていないこと
- 鍵盤を押さえたまま反復が始まった場合: 今回は、どの音も1回目の反復(150 ms 後)より前に離していました(80〜116 ms)。押さえたままの引き継ぎは、まだ動いていません。確かめるなら、1音を 0.5 秒ほど押さえたまま弾いてください。
- 耳で聞いた鳴り方: モニタで分かるのは、出した MIDI までです。JUNO-D8 でどう聞こえたか(強く弾いたときに長く続くと感じたか)を教えてください。
ユーザー
押さえたまま弾いてみました、ログを確認
AI(Claude Code)
押さえたまま弾いた場合も、狙いどおりに動いていました。新しい記録 146 件を全部読みました。欠落はなく、一時停止もしていません。
押さえたまま反復が始まった4音: すべて同じ動きでした。1回目の反復の時点で、元の音を止めてから(Note Off)、反復の音を鳴らしています。後で鍵盤を離したときの Note Off は、出力されていません。
| 弾いた音 | 押さえていた時間 | 反復(すべて計算どおり) | 離したときの Note Off |
|---|---|---|---|
| B3 v109 | 約 4.4 秒 | 7回(94, 81, 70, 60, 51, 44, 38) | 出力なし |
| E3 v86 | 約 0.5 秒 | 5回(70, 57, 46, 37, 30) | 出力なし |
| F3 v86 | 約 0.2 秒 | 5回(70, 57, 46, 37, 30) | 出力なし |
| G3 v39 | 約 1 秒 | 2回(23, 14) | 出力なし |
- 離したときの Note Off: 4回とも、モニタに「blocked」(Velocity Repeat が受け取って先へ送らなかった)として記録されています。エフェクトが意図して止めたことが、記録から直接分かります。
- 反復が切れていないか: B3 の反復が続いているあいだに E3、F3、G3 を弾きましたが、どの音の反復も約 75 ms ずつ鳴り、互いに切っていません。
- 比較: 最後の F3 v112 は1回目の反復より前に離しています。この場合は、離したときの Note Off がそのまま出ていました。前回の確認と同じ動きです。
ほかに記録に出ていたもの A-88MK2 の MIDI 2.0 のノートが、Arpeggiator1 と Echo1 を通っていました。この経路はルーティングでオフになっているので、機器へは出ていません。Velocity Repeat とは関係ありません。
ここまでで確かめられたこと
- 弾く強さで回数が変わること
- 最後の反復まで聞こえる大きさに保たれること
- 同じ音を弾き直したときに、前の反復を止めること
- 違う音の反復が互いに干渉しないこと
- 押さえたまま反復が始まったときに、反復が音を引き継ぎ、離したときの Note Off を止めること
いずれも、MIDI の出力として確かめました。
残っているのは、耳で聞いた結果です。モニタで分かるのは出した MIDI までで、JUNO-D8 でどう聞こえたかは分かりません。強く弾いたときに長く続くと感じたか、気になる点がなかったかを教えてください。
ユーザー
強く弾くと長く続いて、ちゃんと聞こえました
ユーザー
弱く弾いたときは、もう少し短く。音程の変化もノブで調整したい
AI(Claude Code)
2つ目の依頼「弱く弾いたときは、もう少し短く。音程の変化もノブで調整したい」に合わせて、Velocity Repeat を直しました。MIDIFabric の確認(Check)は、エラーも警告もなく通っています。まだ提出はしていません。
直した内容
-
弱く弾いたときは短く: 新しく Velocity Curve のスライダーを足しました(1〜3、初期値 2)。回数の計算を
round((ベロシティ / 127) ^ Curve × Max Repeats)に変えました。カーブをかけると、強く弾いたときは今までどおり最大まで反復し、弱いときと中くらいのときは回数が減ります。弾いたベロシティ 今の回数 直した後(Curve 2) 29 2 1 50 3 1 76 5 3 94 6 4 114 7 6 127 8 8 Curve を 1 にすると、今と同じ回数に戻ります。「短く」の度合いを、このスライダーで調整できます。
-
音程の変化をノブで: Pitch Step のノブを足しました(−12〜+12 半音、初期値 0)。反復のたびに、この半音ずつ音程が上下します。たとえば +2 なら、C3 を弾くと D3、E3、F#3…と上がっていきます。MIDI の音域(0〜127)を超えたら、その時点で反復を止めます。初期値の 0 では、今までどおり同じ音で反復します。
パネルの配置 アプリで整えていただいた配置(スタイル real と各部品の位置)は、そのまま残しました。Pitch Step のノブは Interval のノブの下に、Velocity Curve のスライダーは Tail の下に置いています。
気になる点 Pitch Step で音程を動かすと、反復の音が、別に押さえている鍵盤と同じ音になることがあります。その場合、反復の Note Off が、押さえている音を止める可能性があります。
既存の Velocity Repeat の更新として提出してよいですか? 自動登録で、そのまま更新されるはずです。登録されたら、私がルーティングで設定値を確かめます。弾いていただいた後は、モニタで回数と音程の動きを数えます。
ユーザー
提出してください
AI(Claude Code)
更新版を提出し、自動で反映されたことをルーティングを読んで確かめました。
- 提出: MIDIFabric が受け取りました。候補の版は 2 で、Check も指摘なしでした。今回は
editing_conflictは出ていません。 - 反映: ルーティングに置いてある Velocity Repeat は、定義の版が 1 から 2 に上がっていました。新しい設定項目が二つ加わっています。
- Velocity Curve 2
- Pitch Step 0
- 残ったもの: 置き場所(KeyStep Pro → Velocity Repeat → JUNO-D8)と、ほかの設定(Interval 150 ms、Max Repeats 8、Tail 0.35、Gate 0.5)はそのままです。
次の手順をお願いします。
- Pitch Step を設定する: 操作パネルの Pitch Step のノブを、たとえば +2(反復のたびに全音ずつ上がる)にしてください。0 のままだと、音程の変化は確かめられません。
- モニタをクリアして、次の三つを弾く:
- 弱く1回(ベロシティ 50 前後)
- 中くらいで1回(80 前後)
- 強く1回
- 知らせる: 弾いたら「弾きました」とだけ教えてください。私がルーティングで Pitch Step の値を確かめ、モニタで回数と音程を数えます。前の版と比べて、弱いときに短くなったかも確かめます。
ユーザー
弾きました、ログを確認
AI(Claude Code)
ルーティングとモニタを読んで確かめました。「弱く弾いたときは短く」は狙いどおりに動いています。ただ、音程の変化は今回の演奏では確かめられませんでした。
モニタをクリアしていなかったので、前回の確認より後に記録された 118 件だけを読み分けました。欠落はありません。
弱く弾いたときの回数(Velocity Curve 2)
| 弾いた音 | 今回の反復 | 前の版なら |
|---|---|---|
| A3 v37 | 1回(13) | 2回 |
| G3 v50 | 1回(18) | 3回 |
| A3 v63 | 2回(37, 22) | 4回 |
| C4 v99 | 5回(80, 65, 53, 43, 35) | 6回 |
| B3 v127 | 8回(111, 98, 86, 75, 66, 58, 51, 44) | 8回 |
- 弱いときと中くらいのときは回数が減り、強いときは今までどおり8回でした。最後の反復は、どれも弾いた強さの約 0.35 倍です。
- B3 の1回目は、3回反復したところで弾き直したので、新しい系列が8回やり直しました。
- B3 を2回とも押さえたまま弾いた引き継ぎも、正しく動いています。離したときの Note Off は「blocked」と記録されていました。
- B3 と C4 の反復が重なっても、互いに干渉していません。
音程の変化は、まだ確かめられていません。
- ルーティングを読むと、Pitch Step は 0 のままでした。
- モニタでも、反復の音程は全部弾いた音と同じです。
パネルで Pitch Step のノブを回していなければ、これは正常な動きです。
ノブを回したかどうか、教えてください。
- 回していなかった場合: Pitch Step を +2 などにしてから、もう一度弾いてください。モニタで音程の上がり方を数えます。
- 回していた場合: 値がルーティングに反映されていないことになります。パネルの操作か、設定値の読み取りの不具合として、原因を調べます。
ユーザー
Pitch Stepを+2にして弾きました、ログを確認
AI(Claude Code)
Pitch Step +2 で、音程の変化も狙いどおりに動いていました。ルーティングを読むと Pitch Step は 2 になっていて、モニタの新しい記録 120 件(欠落なし)を全部読みました。
| 弾いた音 | 反復(音程とベロシティ) |
|---|---|
| B3 v72 | 3回: C#4 v51 → D#4 v36 → F4 v25 |
| B3 v29 | 1回: C#4 v10 |
| E3 v25 | 1回: F#3 v9 |
| B3 v127 | 8回: C#4 → D#4 → F4 → G4 → A4 → B4 → C#5 → D#5(111 から 44 へ) |
| C4 v127 | 8回: D4 → E4 → F#4 → G#4 → A#4 → C5 → D5 → E5(111 から 44 へ) |
- 音程: 反復のたびに全音(2半音)ずつ上がっています。
- Note Off: それぞれ、ずらした後の音程に出ていました。鳴りっぱなしの音はありません。
- 回数と大きさ: Velocity Curve 2 の計算どおりです。弱く弾いたときは1回で終わっています。
- 重なり: B3 と C4 を強く続けて弾き、二つの上がっていく反復が重なっても、互いに切り合っていません。
これで、製品ページの2つ目の依頼「弱く弾いたときは、もう少し短く。音程の変化もノブで調整したい」は、MIDI の出力で確かめられました。耳ではどう聞こえたかも、よければ教えてください。
続けるなら、製品ページの3つ目「この Lua は、弾く強さから反復の回数をどう決めている?」があります。これは質問なので、エフェクトは変えずに、登録されているコードを読んで説明します。
ユーザー
この Lua は、弾く強さから反復の回数をどう決めている?
AI(Claude Code)
回数は、登録されているコードの repeat_count という関数が、鍵盤を押した瞬間に一度だけ決めています。
local function repeat_count(velocity, max_repeats, curve)
local count = math.floor((velocity / 127) ^ curve * max_repeats + 0.5)
return math.max(1, math.min(max_repeats, count))
end
計算は4段階です。
- 強さを 0〜1 にする: ベロシティを 127 で割ります。v127 なら 1.0、v64 なら約 0.5 です。
- カーブをかける: その値を Velocity Curve の値で累乗します。初期値の 2 なら二乗です。1 未満の値は累乗すると小さくなり、弱い音ほど大きく縮みます。1.0(最も強い)は何乗しても 1.0 のままです。
- 最大回数を掛けて丸める: Max Repeats を掛け、
+ 0.5してから小数を切り捨てます。つまり四捨五入です。 - 範囲に収める: 結果を 1 以上、Max Repeats 以下に収めます。どんなに弱く弾いても、反復は最低1回あります。
今の設定(Max Repeats 8、Velocity Curve 2)では、次のようになります。
| ベロシティ | (v/127)² | ×8 | 回数 |
|---|---|---|---|
| 29 | 0.05 | 0.4 | 1(最低1回) |
| 72 | 0.32 | 2.6 | 3 |
| 99 | 0.61 | 4.9 | 5 |
| 127 | 1.00 | 8.0 | 8 |
モニタで数えた回数は、この表と合っています(v29 は1回、v72 は3回、v99 は5回、v127 は8回)。
補足
- 決めるタイミング: 回数は押した瞬間に決まり、その音の反復を作るときに保存されます。反復の途中でスライダーを動かしても、鳴っている反復の回数は変わりません。次に弾いた音から反映されます。
- 大きさは別の計算: 各回のベロシティは、回数とは別に
Tail ^ (何回目 / 回数)で決めています。回数が何回でも、最後の回が「弾いた強さ × Tail」になるように、均等に弱めています。 - Velocity Curve を 1 にしたとき: 単純な比例(ベロシティ / 127 × Max Repeats)になります。最初の依頼のときの版と同じ回数です。
MIDIFabric について
MIDIFabricは、Codex や Claude Code のように利用者が自分で動かす AI のツールと連携します。AI が作るのは道具で、弾くのは利用者です。AI にモニタやルーティングを読ませるかどうかは、利用者が設定で決めます。