Skip to content

Repository files navigation

Tone Lab

Tone Labは、参考のギター音と自分の演奏を比較し、音響特徴の差を「明るさ・太さ・アタック・圧縮感・粗さ」という調整可能な言葉へ変換するWebアプリです。

現在のリリース: Tone Lab 2.0

絶対的な音質点数を付けるアプリではありません。同じフレーズ・近い録音条件を前提に、参考音に対して自分の音がどちらへ、どの程度ずれているかを示します。

2.0でできること

  • WAV / MP3 / FLAC / OGGファイルの比較
  • ブラウザのマイク・USBオーディオ入力から直接録音
  • 長い参考音から比較区間を選択し、ループ再生
  • 最大5秒の開始位置ずれを自動補正
  • クリッピング、極端な低音量、音量差、一致度不足の警告
  • 5つの質感差を-100〜+100で相対表示
  • 波形の音量エンベロープと平均周波数分布を重ねて表示
  • 位置同期・音量マッチ付きA/B試聴
  • 差が大きい上位3項目の優先調整プラン
  • 同じ参考音に対する複数テイクの履歴と前回比
  • 直近最大3テイクの中央値、ばらつき、軸別信頼度
  • 調整前後を隠して聴くブラインドA/B
  • 参考音・録音・解析結果をブラウザ内ライブラリへ保存して再開
  • 聴感評価JSONを複数読み込み、軸別一致率や誤判定候補を集計
  • 演奏中の直近4秒を継続比較するリアルタイムモード
  • Markdown / JSON / CSV / 印刷による結果保存

起動方法

Docker Desktopを起動し、リポジトリ直下で実行します。

git switch main
git pull
docker compose up --build

停止するときは、起動したターミナルでCtrl+Cを押します。

基本的な使い方

  1. 参考音を選び、必要なら比較区間を指定する
  2. 自分の音をファイル選択またはブラウザ録音で用意する
  3. 「2つの音を比較する」を押す
  4. 位置合わせ・入力状態・A/B試聴を確認する
  5. 優先調整プランの1項目だけを変更する
  6. 「この参考音で次のテイク」から再録音・再比較する
  7. 複数テイクの代表値と信頼度を確認する
  8. 2テイク以上ある場合はブラインドA/Bで調整前後を確認する

最初の通常比較が完了すると、参考音とセッションが端末内ライブラリへ保存されます。

リアルタイム比較

通常比較を1回行い、参考区間を確定した後に利用できます。

  • AudioWorkletで入力音声を取得
  • 直近4秒を約1秒ごとに既存APIで比較
  • 無音時は解析を保留
  • 解析中に次のリクエストを重ねない
  • 最大5回の結果を中央値で統合し、表示の揺れを抑える
  • 停止時の最後の区間を通常テイクとしてセッションへ保存

マイク利用にはlocalhostまたはHTTPS、ブラウザのマイク許可、AudioWorklet対応ブラウザが必要です。利用できない場合も通常のファイル比較・録音比較へ戻れます。

比較条件

結果の信頼性は、次の条件が近いほど高くなります。

  1. 同じフレーズを使う
  2. ギター単体の音を使う
  3. 演奏テンポと音価をなるべく揃える
  4. 極端なマスタリング済み音源を避ける
  5. 30秒以内の素材を使う

開始位置は最大5秒まで自動補正します。別演奏の途中で生じるテンポずれやタイムストレッチは補正しません。

データとプライバシー

  • 比較APIへ送った音源は一時ファイルとして扱い、解析終了後に削除します。
  • 参考音、各テイク、解析結果、ブラインド回答はブラウザのIndexedDBへ保存できます。
  • ブラウザ内ライブラリは端末・ブラウザごとの保存で、クラウド同期しません。
  • ユーザー登録、サーバー側データベース、外部分析送信はありません。
  • ライブラリ画面からセッション単位または全件を削除できます。

ブラウザの保存領域を消去すると、端末内ライブラリも削除されます。必要な結果はMarkdown / JSON / CSVとして別途保存してください。

指標の意味

指標 主な判断材料
明るさ スペクトル重心、2kHz以上の割合
太さ 250Hz〜2kHzのエネルギー割合
アタック オンセット強度
圧縮感 短時間ダイナミックレンジ、クレストファクター
粗さ 帯域内スペクトル平坦度、ゼロ交差率

各指標は複数の物理特徴を組み合わせたルールベースの相対値です。唯一の正解設定ではなく、調整方向を絞るために使います。

構成

apps/web       Next.js / TypeScript / Web Audio / IndexedDB
services/api   FastAPI / librosa / NumPy
docs           仕様・採否判断・最終確認手順
.github        API / Web / Docker実行CI

通常比較の処理は次のとおりです。

ファイル選択またはブラウザ録音
  → 必要なら参考区間をWAVへ切り出し
  → APIで一時保存・デコード
  → 開始位置の自動補正
  → 入力品質チェック
  → 音響特徴抽出
  → 5軸の相対差へ変換
  → 調整プラン・グラフ・A/B・履歴を表示
  → ブラウザ内セッションへ保存

ローカル開発

API

Python 3.12を推奨します。

cd services/api
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
uvicorn app.main:app --reload

Web

別ターミナルで実行します。

cd apps/web
npm install
npm run dev

自動テスト

Pull Requestとmainへのpushで、次をGitHub Actionsが検証します。

  • API単体・統合テスト
  • Webの純粋計算ロジック単体テスト
  • ESLint
  • Next.js production build
  • Docker ComposeでWeb/APIを実際に起動
  • 自動生成WAVを比較APIへ送るE2Eスモークテスト

質感指標だけを手元で検証するCLIもあります。

cd services/api
PYTHONPATH=. python scripts/validate_metrics.py path/to/source.wav

2.0に含めないもの

  • バンドミックスからギターだけを自動分離すること
  • 外部動画サイトから音源を取得すること
  • SNS動画から使用機材を断定すること
  • 別テンポの演奏をタイムストレッチして一致させること
  • あらゆる人に共通する絶対的な質感スコア
  • 人間評価を学習した機械学習モデル
  • HX Stompへプリセットを直接転送すること

ギター抽出アシストは、正解ギターステムを持つ利用許諾済み評価データが不足しているため2.0では不採用としました。判断の詳細はdocs/GUITAR_EXTRACTION_DECISION.mdを参照してください。

最終確認はdocs/REVIEW_CHECKLIST.md、詳細仕様はdocs/MVP.md、変更点はCHANGELOG.mdを参照してください。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages