Skip to content

Alicey0719/SoundGraffiti

Repository files navigation

Sound Graffiti

Audio Meter

概要

Sound Graffitiは、ブラウザ上で動作するオーディオメーターアプリケーションです。放送基準(EBU R128 / ITU-R BS.1770-4)に準拠したLUFS測定、スペクトラム解析、ステレオフィールド表示などの機能を提供します。

機能

メーター類

1. LUFS Meter (Integrated Loudness)

ITU-R BS.1770-4 / EBU R128準拠のラウドネスメーター

グラフ表示:

  • 緑のバー (Integrated): 開始からの統合ラウドネス(ゲート処理済み)
  • 黄色のバー (Short-term): 直近3秒間の短期ラウドネス
  • オレンジのバー (Momentary): 直近400msの瞬時ラウドネス
  • 青い横線: ターゲット基準値(変更可能)

数値表示:

  • Integrated: 全体の平均ラウドネス(放送・配信の基準値)
  • Short-term: 直近のラウドネス変化を捉える
  • Momentary: 瞬間的なピークを検出
  • LRA: ラウドネス幅(ダイナミックレンジの指標)

プラットフォーム別推奨基準値:

  • 放送 (EBU R128): -23 LUFS
  • YouTube: -14 LUFS
  • Spotify: -14 LUFS
  • Apple Music: -16 LUFS
  • Twitch: -14 LUFS
  • Amazon Music: -14 LUFS

使い方:

  • ヘッダーの「Target」から配信先に応じた基準値を選択
  • Integratedがターゲット基準値付近なら適正レベル
  • Short-termで瞬間的な音量変化を監視
  • LRAが高い:ダイナミック、低い:圧縮された音

2. True Peak Meter

オーバーサンプリングによる真のピーク値測定

グラフ表示:

  • 緑〜黄〜オレンジ〜赤: レベルによるグラデーション
  • 青い縦線: ピークホールド(過去2秒の最大値)
  • オレンジの縦線(0dB): クリッピング境界線

数値表示:

  • Peak L / Peak R: 左右チャンネルの最大ピーク値(dBTP)

使い方:

  • 0 dBTP超過でクリッピング(歪み)発生のリスク
  • 放送基準: -1 dBTP以下推奨
  • D/A変換時のオーバーシュートを検出

3. VU Meter

アナログスタイルのボリュームユニットメーター

グラフ表示:

  • アナログ針: L/R独立のVUメーター
  • 緑の針: -20〜0 VU(安全範囲)
  • オレンジの針: 0〜+3 VU(注意)
  • 赤い針: +3 VU超過(過大入力)
  • 青い0マーク: 基準レベル(0 VU)

数値表示:

  • VU値: -20〜+6 VUの範囲で表示(高レベル音源対応)

使い方:

  • 0 VU = -18 dBFS(デジタル換算)
  • 針が0 VU付近で揺れるのが理想的
  • +3 VU超過は過大入力(YouTube等の高レベル音源では+3〜+6 VUになることがある)
  • アナログミキサーのVUメーターを再現

4. Spectrum Analyzer

FFT解析による周波数スペクトラム表示

グラフ表示:

  • 紫のグラデーション: 周波数成分の強度
  • 横軸: 20Hz〜20kHz(DAW/ミキサーEQ風の対数スケール)
  • 縦軸: -80dB〜0dB
  • 低域を圧縮し、中高域(1kHz〜)により多くのスペースを割り当て

使い方:

  • 低域(20-200Hz): キックドラム、ベース
  • 中域(200-2kHz): ボーカル、楽器
  • 高域(2k-20kHz): シンバル、倍音
  • 特定周波数の突出を視覚的にチェック

5. Stereo Field

ステレオイメージとフェーズ相関の可視化

左側 - ステレオフィールド:

  • 円形グラフ: L/R/M/Sの音像定位
  • M(上): モノラル成分
  • L(左)/R(右): ステレオ成分
  • S(下): サイド成分
  • 青い点: 音の位置(リアルタイム)

右側 - Phase Correlation:

  • 緑のバー: 正の相関(+1)= 完全同相(モノラル)
  • 黄色のバー: 中間(0付近)= 良好なステレオ
  • オレンジ〜赤のバー: 負の相関(-1方向)= 逆相(要注意)

数値表示:

  • +1.0: 完全なモノラル
  • 0.0: 理想的なステレオ
  • -1.0: 完全な逆相(モノラル化で音が消える)

使い方:

  • Correlationが-1に近い場合、モノラル再生で位相キャンセル発生
  • ステレオの広がりと相関のバランスをチェック

6. Loudness History

ラウドネスの時系列変化グラフ

グラフ表示:

  • 緑のライン: Integrated Loudness
  • 黄色のライン: Short-term Loudness
  • オレンジのライン: Momentary Loudness
  • 青い横線: ターゲット基準線(変更可能)
  • 横軸: 時間(約30秒分)

使い方:

  • 楽曲全体のラウドネス変化を確認
  • 急激な音量変化を視覚的に検出
  • ターゲット基準値との乖離をチェック

ダークモード

画面右上の 🌙 Dark / ☀️ Light ボタンでテーマを切り替え可能。設定は自動保存されます。

ライトモード:

  • 明るい背景、コントラスト重視
  • 長時間作業に適した視認性

ダークモード:

  • 暗い背景、目に優しい
  • 夜間作業や暗い環境に最適

使用方法

  • 対応ブラウザ: Chrome, Edge(Web Audio API対応ブラウザ)
  • サンプルレート: 48kHz
  • バッファサイズ: 2048サンプル(低レイテンシー)
  • FFTサイズ: 8192(高解像度)
  • レイテンシー: 約40-50ms(インタラクティブモード)

使用方法

起動

  1. index.html をブラウザで開く
  2. 入力ソースを選択(マイク or デスクトップ音声)
  3. "▶ Start Monitoring" ボタンをクリック
  4. ブラウザのマイク/音声キャプチャ許可を承認

コントロール

  • ▶ Start Monitoring: 音声モニタリングを開始
  • ■ Stop: モニタリングを停止
  • 🔄 Reset: すべてのメーター値をリセット(ピーク値、履歴など)

入力ソース

マイクロフォン

  • オーディオインターフェースのマイク入力
  • ループバック機能を使えばシステム音声も取得可能

デスクトップ音声

  • Chrome の getDisplayMedia API を使用
  • 画面共有ダイアログで「タブ」または「ウィンドウ」を選択
  • オーディオ共有を有効化

メーター表示の切り替え

ヘッダー部のチェックボックスで各メーターの表示/非表示を切り替え可能。設定はローカルストレージに保存され、次回起動時に復元されます。

メーターの並び替え

各メーターパネルのヘッダー部分(⋮⋮ アイコン付き)をドラッグして、好きな順序に並び替え可能。

操作方法:

  1. パネルのヘッダー部分にマウスをホバーすると「ドラッグして移動」と表示されます
  2. ⋮⋮ アイコン部分をクリック&ドラッグ
  3. ドラッグ中はパネルがマウスカーソルに追従して移動します
  4. 元の位置に点線の枠で「ここに配置」と表示されます
  5. マウスに近いパネルが青い枠でハイライトされます
  6. 目的の位置でマウスを離すとパネルが移動します

視覚的なフィードバック:

  • ドラッグ中のパネルは半透明で傾き、マウスに追従します
  • マウス位置に最も近いパネルが青い枠でハイライト
  • 元の位置には点線の枠が残り、配置場所が明確
  • パネル内にマウスがある場合、そのパネルの前後に正確に配置されます

賢い位置判定:

  • 横方向の重なりを優先的に判定
  • グリッドレイアウトを考慮した2次元配置
  • 意図した場所に正確に配置できます

並び順はローカルストレージに自動保存され、次回起動時に復元されます。

技術仕様

  • 対応ブラウザ: Chrome, Edge(Web Audio API対応ブラウザ)
  • サンプルレート: 48kHz
  • バッファサイズ: 4096サンプル(CPU負荷軽減のため最適化)
  • FFTサイズ: 2048(パフォーマンス重視で最適化)
  • レイテンシー: 約85ms(バックグラウンド再生への影響を最小化)
  • フォント: LINE Seed JP(Google Fonts)
  • カラーテーマ: ライト/ダークモード対応

プロジェクト構成

sound_graffiti/
├── index.html              # メインHTML
├── css/
│   └── styles.css         # スタイルシート
├── js/
│   ├── app.js             # メインアプリケーション
│   ├── audio-engine.js    # Web Audio API処理
│   ├── meters/
│   │   ├── lufs-meter.js         # LUFSメーター
│   │   ├── truepeak-meter.js     # True Peakメーター
│   │   ├── vu-meter.js           # VUメーター
│   │   ├── spectrum-analyzer.js  # スペクトラムアナライザー
│   │   ├── stereo-field.js       # ステレオフィールド
│   │   └── history.js            # ヒストリー
│   └── ui/
│       └── layout-manager.js     # レイアウト管理
└── README.md              # このファイル

開発について

アーキテクチャ

  • 音声処理: Web Audio API の ScriptProcessorNode を使用(将来的に AudioWorklet への移行を推奨)
  • 描画: Canvas 2D API によるリアルタイムレンダリング
  • レイアウト: CSS Grid による柔軟なパネル配置
  • 状態管理: localStorage による設定の永続化

カスタマイズ

レイテンシーの調整

audio-engine.jsbufferSize を変更:

this.bufferSize = 1024; // より低レイテンシー(CPU負荷増)
this.bufferSize = 4096; // より高レイテンシー(CPU負荷減)

メーター表示範囲の変更

各メータークラスの minDB, maxDB, minLUFS, maxLUFS などの値を調整。

ブラウザ互換性

Chrome/Edge

✅ 完全対応

Firefox

⚠️ 一部機能制限あり

  • デスクトップ音声キャプチャ未対応
  • ScriptProcessorNode の挙動が若干異なる

Safari

⚠️ 動作未検証

  • Web Audio API の実装差異に注意

既知の制限事項

  • デスクトップ音声キャプチャは Chrome/Edge のみ対応
  • ScriptProcessorNode は非推奨(将来 AudioWorklet に移行予定)

テストとデバッグ

LUFS計算の検証

LUFS計算が正しいことを確認するため、以下のテストツールを用意しています:

  1. 基本テスト: test-lufs.html を開いて coefficient と計算式を確認
  2. リアルタイムデバッグ: コンソールで enableLUFSDebug() を実行して詳細ログを表示

詳細は TESTING.md を参照してください。

重要: LUFS値は必ず負の値(-60〜0 LUFS程度)になります。正の値が表示される場合は、ページをリロードしてください。

  • モバイルブラウザでは動作が不安定な可能性あり

参考規格

  • ITU-R BS.1770-4: Algorithms to measure audio programme loudness and true-peak audio level
  • EBU R128: Loudness normalisation and permitted maximum level of audio signals
  • IEC 60268-18: Peak programme level meters

今後の改善予定

  • AudioWorklet への移行(より低レイテンシー)
  • エクスポート機能(CSV, 画像)
  • プリセット機能(放送局別基準値)
  • ダークモード切り替え(実装済み)
  • カスタムテーマカラー設定

トラブルシューティング

ブラウザコンソールに警告が表示される

警告: "The ScriptProcessorNode is deprecated"

この警告はブラウザが出力するもので、アプリケーションの動作には影響しません。

  • 原因: 現在のWeb Audio API実装で使用しているScriptProcessorNodeが非推奨とされています
  • 影響: 警告メッセージが表示されますが、機能は完全に動作します
  • 対策: 将来的にAudioWorkletNodeへの移行を検討していますが、現時点では問題ありません

その他のコンソールメッセージを非表示にする

開発モード(DEBUG)を無効にすることで、アプリケーションのログメッセージを非表示にできます:

// js/app.js の先頭
const DEBUG = false; // true にするとログが表示される

デスクトップオーディオが取得できない

一部のブラウザでは、画面共有を通じたデスクトップオーディオ取得がサポートされていない場合があります。Chrome/Edgeの最新版を使用してください。


Sound Graffiti - Web Audio Loudness Meter

Releases

No releases published

Packages

 
 
 

Contributors