#0022026-03-08Yomibito Shirazu

APIプレイグラウンドの設計思想

インフラ透明化と「コマンド生成器」という逆転の発想

API designDXinfrastructurephilosophy
1.

前提の誤り — 普通のAPIプレイグラウンド

GeminiにAPIプレイグラウンドの仕様を聞いたとき、最初の回答は「パラメータ入力フォーム」「整形されたレスポンス表示」「複数言語のコードスニペット」という一般的な内容だった。悪くはない。しかしそれは「JSONを返すWebサービス」の話であって、マスタリングAPIの話ではなかった。

「音楽のマスタリングサービスのAPIだ」と訂正すると、今度は「ドラッグ&ドロップでWAVをアップロード」「波形ビジュアライザー」「A/Bテスト機能」という回答が返ってきた。それも違う。

問題の本質はファイル形式でも非同期処理でもない。
「なぜAPIにしているのか」という設計思想を、Geminiは最後まで理解していなかった。
2.

マスタリングAPIが特殊な理由

aimastering.devをAPIとして提供している理由は、スケーラビリティでも料金体系でもない。ユーザーの音声ファイルを自分のインフラに通過させることがユーザーにとってのデメリットだからだ。

「脆弱で担保できないファイルのアップローダーやダウンローダーやCloud Runなどを通過させることが逆にユーザーにとってデメリット」——これが設計思想の核心だ。

転送速度の低下
自分のサーバーがボトルネックになる
セキュリティリスク
不安定な中継にユーザーデータが経由する
単一障害点
自分のインフラがダウンすると全員に影響

つまり、APIプレイグラウンドが「ブラウザ上でWAVをアップロードして再生する」という機能を持つことは、その設計思想と真っ向から矛盾する。

3.

「私のインフラを通すな」という設計思想

Geminiがようやく理解したのは、3回目の訂正を経てからだった。 「私のインフラがボトルネック(単一障害点)やリスク要因になること自体を排除したい」という意図。

この思想を突き詰めると、プレイグラウンドの役割は根本から変わる。「ここで試す場所」ではなく「ユーザーの環境で実行させるための準備をする場所」になる。

設計の核心:
制御面(API命令)はサーバーを通る。データ面(音声ファイル)はユーザー環境から直接エンジンへ。

aimastering.devのサイトに「Source Code: Own the engine」という項目がある。923行の物理演算DSP、Jiles-Athertonトランスモデル、Koren真空管方程式、Studerテープエミュレーション——これらをユーザー自身のインフラで動かすという選択肢を提供している。

プレイグラウンドはその購入前の「検品所」でもある。「このロジックは信頼に値するか?」を確認させる場所だ。

4.

逆転の発想 — コマンド生成器

理想のプレイグラウンドには「Runボタン」がメインに置かれない。代わりに「Copy to Terminal」ボタンが中央に鎮座する。

UIで target_lufsgenre を変更するたびに、下のcURLスニペットがリアルタイムで書き換わる。

Ship in 4 lines.bash
curl -X POST \
  /api/v1/master \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@track.wav" \
  -F "target_lufs=-14" \
  -F "genre=techno"
Responsejson
{
  "job_id": "mst_a8f3...",
  "status": "processing",
  "analysis": {
    "lufs_in": -18.2,
    "lufs_target": -14.0,
    "agents_agreed": true,
    "consensus_score": 0.94
  }
}

この4行がaimastering.devのAPIの完全な姿だ。解析、合議、DSP——すべてが1回のコールに収まっている。プレイグラウンドはこの4行を「ユーザーのマシンで今すぐ叩けるコマンド」として渡すことが最大の役割になる。

一般的なAPIプレイグラウンドaimastering.dev(理想)
「うちのサーバーで動かしてね」「君のDockerで動かすとこうなるよ」
「APIキーを買ってね」「このエンジン(923行)を所有してね」
「データはうちに保存されるよ」「4行のcURLで君の環境から直接叩けるよ」
「AIが適当に良くするよ」「3モデルが合議して物理演算の解を出すよ」
5.

合議(Negotiation)の透明化

aimastering.devのコアは「3エージェントによるNash均衡合議」だ。平均値ではなく交渉だ、というのがサイトの言葉だった。

Agent A — Spectral Analyst
"Your low-mids are 3dB too warm for Beatport."
周波数バランス・共鳴ピーク・スペクトルチルトを40次元で解析
Agent B �� Dynamic Expert
"Compress the bus 1.5dB more for streaming."
ダイナミックレンジ・トランジェント・ラウドネス分布を評価
Agent C — Tonal Surgeon
"Widen above 8kHz, mono below 200Hz."
倍音・ステレオイメージ・トーナルクラリティを判定

プレイグラウンドにおける「合議の可視化」は、ユーザーが自分のローカル環境からAPIを叩く価値を確信させるための根拠になる。「サーバーで何かが処理された」ではなく「知能が動いた」という事実をレスポンスJSONで直接確認できる。

consensus_minutes — full disclosurejson
{
  "consensus_minutes": {
    "agent_a": {
      "role": "Spectral Analyst",
      "finding": "Low-mids too warm (+3dB). Adjusting tilt.",
      "target_lufs": -14.0,
      "eq_delta": { "250hz": -2.8, "500hz": -1.1 }
    },
    "agent_b": {
      "role": "Dynamic Expert",
      "finding": "Dynamic range exceeds target. Requesting 1.5dB compression.",
      "target_lufs": -14.2,
      "comp_ratio": 2.1
    },
    "agent_c": {
      "role": "Tonal Surgeon",
      "finding": "Widen above 8kHz, mono below 200Hz.",
      "stereo_width_8k": 1.35,
      "mono_below_200hz": true
    },
    "arbiter": {
      "method": "weighted_median",
      "final_target_lufs": -14.1,
      "unresolved_tensions": ["stereo_width vs low_end_density"],
      "confidence": 0.94
    }
  }
}

unresolved_tensions フィールドが存在することが重要だ。合議で決着がつかなかった部分を隠さずログに残す設計は、システムの透明性を担保し、エンジニアが信頼できる根拠になる。

6.

ソースコード販売との接続

aimastering.devはAPIサービスに留まらない。923行の物理演算DSPを$79(Regular)または$299(Extended / SaaS・再配布)で購入できる。

Regular$79
1 project
  • ·DSP engine
  • ·Analysis engine
  • ·Docker compose
  • ·Deploy guide
  • ·MIT core
Extended$299
SaaS / redistribute
  • ·SaaS / redistribute
  • ·DSP engine
  • ·Analysis engine
  • ·Docker compose
  • ·Deploy guide

プレイグラウンドで処理結果を確認したユーザーは「このロジックを自分のインフラで動かしたい」という動機を持てる。プレイグラウンドはAPIのデモ機ではなく、ソースコード購入への「納得プロセス」でもある。

公開リポジトリの理想構造text
aimastering-dev/
│
├ server/
│  ├ middleware/
│  ├ models/
│  ├ routers/
│  ├ services/
│  └ main.py
│
├ docs/
│  ├ quickstart.md
│  ├ api-reference.md
│  ├ authentication.md
│  └ error-codes.md
│
├ README.md
├ Dockerfile
├ local_mastering.py      ← ここがプレイグラウンドの「本命出力」
├ test_local_dsp.py
├ .gitignore
└ .gitattributes

ルートに local_mastering.py が存在することが思想���核心だ。プレイグラウンドでパラメータを設定すると、このファイルの設定変数がリアルタイムに書き換わってダウンロード可能になる——それが「コマンド生成器」の完成形だ。

7.

理想仕様まとめ

議論を経て収斂した、aimastering.devのAPIプレイグラウンドが備えるべき仕様。

01
Copy to Terminal ボタンをメインに
Runボタンは確認用。本命はユーザーが自分のターミナルに貼り付けて実行する4行のcURL。UIでパラメータを変更するたびにコードがリアルタイムで更新される。
02
合議議事録(Consensus Minutes)の全開示
3エージェントが何を議論し、Arbiterがどう裁定したかのJSONを全文公開。未解決の緊張(unresolved_tensions)も隠さず表示する。
03
local_mastering.py の動的生成
プレイグラウンドで設定したパラメータを反映した local_mastering.py をその場でダウンロード可能にする。ユーザーのローカル環境への最短距離。
04
No-Storage Pledge の明示
「処理後、バイナリは即座に破棄される」をレスポンスヘッダで証明する。私のインフラはデータを預からない。
05
14段階DSP信号経路の可視化
各物理モデリングステージ(Transformer / Tube / Tape等)がAIの目標値を受けてどの程度の処理を行っているかをメーター表示。「ブラックボックスなAI」ではなく「決定論的な物理演算」であることを証明する。
8.

評価確認 — インチキではないか?

最終的にGeminiに「音響解析Geminiと合議の部分がインチキではないか?」と確認させた。回答は明確だった。

評価結果: インチキではない。

根拠1: GPT-5.4(Engineer)/ Claude Opus(Structure Guard)/ Gemini Pro(Form Analyst)の役割分担がコードに直接定義されており、各エージェントが同一の analysis_json を読んで独立した target_envelopes を出力する構造。

根拠2: consensus_arbiter.py は平均値ではなく「重み付き中央値」を採用。1モデルの暴走を防ぐ Hard Constraint Filtering が実装済み。

根拠3: AIはDSPのノブを直接操作しない。「目標仕様書」を出力し、Control Layer が物理演算パラメータに変換するという二段構えの設計。Jiles-Atherton / Koren 等の数式は確かにDSPステージとして定義されている。

「10年の音響研究成果」という言葉が誇張でないことは、923行の物理演算と、合議システムのアーキテクチャが示している。プレイグラウンドはその信頼性を証明する場になる。

結論として、開発者として伝えたいことは一文に収まる:

"Don't trust my infrastructure. Trust this logic. Run it in your environment."

— 私のインフラは信じるな。このロジックを信じろ。君の環境で動かせ。