AI生成

B201 SE生成機


ゲーム用のSEを作成するツールです。コードエージェントで作成しています。音がでます。

Game SE Tool

操作

① スライダーを移動させると音が作成されて鳴ります。(自動再生)
② 再生ボタンと音量調整できます。
③ wavなどの形式に出力できます。

サンプルを調整して、再生します。

LIBRARY MANAGER

LIBRARY COMMANDSをクリックするとLIBRARY MANAGERが表示されます。
LIBRARYは、ゲームごとに、使用目的別に管理することを想定した構造にしています。

LIBRARYへの登録
LIBRARY COMMANDSをクリック

presetsのデータは消えず、また操作できないようになっています。

LIBRARY MANAGER とは

メイン画面の 「LIBRARY COMMANDS」 から開くモーダルで、ライブラリの JSON の入出力 と Game / Subtab の整理、一括オーディオ書き出し(ZIP) をまとめて行う画面です。

データの階層は次のとおりです。

ライブラリ全体(IndexedDB 等に保存)→ Game(ゲーム単位)→ Subtab(サブタブ)→ 個別 SE(プリセット項目)

内蔵の 「PRESETS (Fixed library)」 は 読み取り専用 で、ユーザー Game のように追加・削除・リネームはできません。


画面の構成

1. JSON(上部2行)

操作内容
全てエクスポート (.json) / Export Allモーダルで選んでいる Game(ユーザーゲーム) を1本の JSON にまとめてダウンロード。中身は version / type: 'game' / game.name / 各 Subtab とその itemsnameparamsupdatedAt)。アイテムが0件だとエクスポートされません。
インポート (.json)JSON を読み込み、新しいユーザーゲームとして取り込む(インポート時に ID は付け直される)。
名前を付けて保存 (.json)同じく 対象は1つのユーザーゲーム。Chromium 系では保存先を選ぶと 上書き用にファイルと紐づけ できる。
上書き保存 (.json)事前に「名前を付けて保存」で紐づけたファイルに上書き。File System Access API が使えない環境では使えず、トーストで案内される。

注意: ドロップダウンが PRESETS(固定) のままだと、エクスポート系は app.activeUserGameId にフォールバックしますが、PRESETS だけを見ていると ゲーム未選択 になり失敗することがあります。JSON の出し入れの主対象はユーザーゲームです。

2. Selection(Game / Subtab)

  • Game
    • PRESETS (Fixed library) … 内蔵カテゴリのみ。
    • それ以外 … ユーザーが作成した Game。
  • Subtab
    • PRESETS 選び中は 8BIT / REAL / UI / ENV(メインのカテゴリと対応)。
    • ユーザーゲーム選び中は、その Game 内の Subtab 一覧。

このドロップダウンは、エクスポートや Copy/Delete/Rename の「どの Game / Subtab を対象にするか」 の指定に使われます。モーダルが開いているとき、一部操作の前に モーダルの選択が app に同期されます(se-library-ui.js の _syncAppSelectionFromModalIfOpen)。

3. Game 行のボタン

ボタン動き
Copy / Delete / Rename Gameユーザーゲームのみ。PRESETS 中は「Fixed library is read-only」等でブロック。
WAV ZIP / OGG ZIP / MP3 ZIP選んでいるユーザーゲーム全体を ZIP にまとめる。Subtab ごとにフォルダ分けし、ルートに _manifest.md(各 SE のパラメータ要約)。

4. Subtab 行のボタン

ボタン動き
Copy / Delete / Rename Subtabユーザーゲーム+対象 Subtab が必要。PRESETS では編集不可。
WAV ZIP / OGG ZIP / MP3 ZIP現在モーダルで解決した1つの Subtab 内の SE だけを ZIP 化(_manifest.md 付き)。

ZIP 共通: ブラウザに JSZip が読み込まれている必要があります。未読込時はトーストで通知されます。


メイン画面との関係(モーダル外)

モーダル以外でも、Game タブ / Subtab タブ で同じ階層を切り替えられます。

  • + Game / + Subtab で追加(ユーザーゲーム時)。
  • タブは ドラッグ&ドロップで並べ替え可能(Game 同士、Subtab 同士)。

「ライブラリに追加」など 個別プリセットの保存は、アクティブなユーザーゲームと Subtab が決まっている必要があります(未選択だとトーストで案内)。


利用の流れ(例)

  1. バックアップ: 対象 Game をドロップダウンで選ぶ → 全てエクスポート (.json)。
  2. 別環境へ: インポート (.json) でゲームを復元。
  3. 音声だけ大量出力: ゲーム全体なら Game 行の WAV/OGG/MP3 ZIP、1カテゴリだけなら Subtab 行の ZIP。
  4. 構成の複製・整理: ユーザーゲームを選び Copy Game / Copy Subtab、不要なら Delete、名前変更は Rename。
  5. 固定プリセット閲覧: Game を PRESETS にし、Subtab でカテゴリ切替(編集はできない)。

補足(仕様上のポイント)

  • **「全てエクスポート」**は DB 内の全ゲームを1ファイルにまとめる のではなく、選択(またはアクティブ)のユーザーゲーム1つを JSON にしたものです。
  • PRESETS は固定ライブラリのため、JSON の書き出し・ZIP・Game/Subtab の CRUD は ユーザーゲーム向けの動きが中心です。
  • ゲーム削除時は、そのゲームに紐づく JSON ファイルハンドルも解除されます(se-json-fs.js)。

以上が、現在のコードベースに基づく LIBRARY MANAGER の仕様と使い方の整理です。

AI生成

概要

✦ AI SE GENERATOR は、自然言語の説明から Web Audio 合成用パラメータ(単一レイヤーまたは複数レイヤー) を LLM に生成させ、メインの シンセエディタの状態 に載せる機能です。ヘッダーの 「✦ AI 生成」 でモーダルを開きます。


仕様

入出力の形

  • 入力: ユーザーが書いた プロンプト(日本語・英語どちらでも可。UI言語に応じてシステムプロンプト側で「テキストフィールドは英語で」等が付く)。
  • 出力: LLM は JSON のみ(マークダウンやコードフェンスなし)を返すよう指示されているが、実装は コードブロック内の JSON や 先頭の {...} も抽出してパースする(_extractJsonRaw)。

単一レイヤー(デフォルト)
wavefrequencyattackdecaysustainreleasesweepcutoffresonancedistortionreverbvibratoduration に加え、メタとして namenameEndesc
パース後、数値は _clampSynthFields で 許容レンジにクランプ(例: frequency 20–2000、duration 50–5000 ms など)。

レイヤーモード
layers 配列。各要素に mix(0–1)、delayMs(0–5000)、muted、上記と同系の合成パラメータ。
最大レイヤー数は UI で 2〜4(プロンプトの {{MAX_LAYERS}} に反映)。実際に採用するのは 先頭から最大 N 件(slice(0, cap))。

対応プロバイダ(PROVIDER_CONFIG)

Provider接続先の考え方
Google (Gemini)OpenAI 互換エンドポイント generativelanguage.googleapis.com/v1beta/openai に Bearer で chat/completions
Groqapi.groq.com/openai/v1
OpenAIapi.openai.com/v1
Anthropicapi.anthropic.com/v1/messages(専用形式)。ブラウザから叩くため anthropic-dangerous-direct-browser-access: true ヘッダーを付与。
OpenRouteropenrouter.ai/api/v1HTTP-Referer に現在ページ URL を付与。

モデル一覧は 組み込みリスト か、/models を API キー付きで取得した結果をキャッシュ(24 時間 TTL)。「— カスタム入力 —」 でモデル ID を直接指定可能。

Groq とサーバープロキシ(重要)

独自の Groq キーを入力すると、そのキーで直接 Groq API に送る(プロキシより優先)。

トークン上限

  • OpenAI 互換: 単一 4096、レイヤー 6144。
  • Anthropic: 単一 1024、レイヤー 4096。

ローカル保存

localStorage に プロバイダ、API キー(プロバイダ別)、モデル選択、モデル一覧キャッシュ、レイヤーモード、最大レイヤー数 を保存。
ヘルプ文言では 「当アプリのサーバーにはキーを送らない」 と説明されているが、実際の推論は各クラウド API(および Groq プロキシ利用時はその PHP サーバー)にリクエストとして届く点は利用者が理解しておく必要がある。

プレビューと適用

  • プレビュー: 直近の生成結果を state に反映し playSE()(モーダルは開いたまま)。
  • エディタに適用: 同様に反映したうえで モーダルを閉じるし、トーストで名前を表示。
    単一レイヤー時は replaceLayersWithSingleFromFlat() でレイヤー UI を単一に揃える。レイヤー時は applyLayersFromAiParsed

ライブラリへの自動保存はしない。 適用後、通常どおり 「ライブラリに追加」 等で保存する。


使い方(手順)

  1. 「✦ AI 生成」 をクリックしてモーダルを開く。
  2. 「API 設定」 を開き、Provider と API キー(Groq でプロキシ利用なら空でも可)、モデルを選ぶ。必要なら ↻ でモデル一覧を更新。
  3. テキストエリアに 作りたい SE を具体的に書く。下の 例文チップ を押すとプロンプトに流し込める。
  4. 複雑な音にしたいときは 「レイヤーで生成」 をオンにし、最大 2〜4 レイヤーを指定。
  5. 「✦ 生成する」 を押す。成功すると結果カードに名前・説明・タグ(またはレイヤー一覧)が出る。
  6. 「プレビュー」 で試聴、問題なければ 「エディタに適用」 でメイン画面のパラメータに反映。
  7. 以降はエディタで微調整し、WAV/OGG 書き出しやライブラリ保存へ。

トラブル時の目安

  • レイヤーモードで layers が返ってこない → エラーメッセージどおり、再生成するかレイヤーをオフにする。
  • Groq + キーなしで「サーバー起動中」 → プロキシの起動待ち。しばらく待って再試行。
  • CORS / ブラウザ直叩き → Google・Groq・OpenAI・OpenRouter はブラウザから各 API に fetch。Anthropic は公式がブラウザ利用を許容する設定とヘッダー前提。環境・ポリシーによってはブロックされる場合がある。

まとめ

項目内容
目的自然言語 → シンセパラメータ(単一 or 多層)
開き方ヘッダー「✦ AI 生成」
必須プロンプト。多くの組み合わせでは 各社 API キー(Groq はプロキシ経由でキー省略可)
生成後プレビュー/エディタ適用。ライブラリ保存は別操作
設定の保存場所localStorage(キー含む)

以上が、現在のコードベースに沿った AI 生成の仕様と使い方 です。

サンプルデータ

シューティングゲーム

shooting_game.json

コメント