🎯 基本的な使い方
- 「記録開始」ボタンを押してマイクアクセスを許可
- 音量がリアルタイムで表示・記録されます
- 「停止」で記録を停止(データは保持されます)。「停止」は「記録開始」と同じ場所に出ます
- 「CSV書き出し」でデータをダウンロード(スマートフォンなど幅480px以下では「その他」を押すと出ます)
- 「統計リセット」で、ログ・統計・グラフ・注意書きをまとめてクリア(記録を停止してから押せます。幅480px以下では「その他」の中にあります)
⚙️ 設定項目
- ログ間隔:記録する間隔(秒単位)。プリセットボタン(1s/3s/5s/10s/1m)で素早く設定可能
- 表示下限:表示する最小音量レベル。既定は-110dBFSで、
?bands=offで開いたときは-90dBFSです(静かな部屋の超音波帯は-90dBFSより低いことがあり、-90では超音波帯の破線が下端に張り付いたため)。これより静かな値は下端に張り付いて見えます。表示だけの設定で、CSVに記録される値は動きません
- 表示の言語:右上のボタン(日本語の表示ではEN、英語の表示ではJA)で日本語と英語を切り替えます。URLに
?lang=enか?lang=jaを付けて開いても選べます。ボタンで選んだ言語はこのブラウザーに保存し、次に開いたときに使います(?lang=があればそちらを優先し、どちらも無ければブラウザーの言語に合わせます)。記録・統計・CSVの中身は、言語によって変わりません
※ すべての設定は記録中でも変更可能で即座に反映されます
※ スマートフォンでは「設定を表示」ボタンで設定項目を開閉できます
📊 統計と表示
- 現在の音量(大きな数字):直近2048サンプル(48kHzで約43ミリ秒。サンプルレートで変わる)の全帯域のRMSです。高精度モードのCSVの
dbfsは区間全体のエネルギー平均なので、窓が違います。ときどき大きくなる音(扇風機のうなり・洗濯機など)では、エネルギー平均が大きな瞬間に引っぱられるので、大きな数字のほうがCSVの値より低く見える時間が長くなります。簡易モードでは、CSVのdbfsも記録した瞬間のこの窓の値です
- 超音波帯(直近の区間):大きな数字の下の1行です。最後に記録した区間の超音波帯(18〜22kHz)の値で、CSVの
band_ultra_dbfsと同じです。区間の長さはログ間隔で、「超音波帯(直近1秒の区間)」のように添えます。大きな数字とは窓も帯域も違います。数dBの小さな変化は、グラフよりこの数字で読んでください。最初の区間が届くまでは「--.- dBFS」、値の無い区間では「(この区間は値なし)」と出ます。?bands=off・簡易モード・超音波帯を測れないサンプルレートでは、値の代わりに理由(「簡易モードでは測れません」など)が出ます。統計リセットで最初の状態に戻ります
- 稼働時間:記録開始からの経過時間
- ログ件数:CSVに記録されたデータポイント総数
- 平均(Leq):記録された行のエネルギー平均。⚠重みは行数ではなく区間長(秒)です。ログ間隔は記録中に変えられるので、1秒の区間と3秒の区間を同じ重みで平均すると実時間に比例しない値になります(手元の検算では最大9.3dBずれました)。dBは対数なので算術平均にも物理的な意味がなく、無音の行を-999などへ置き換えて平均すると数百dB外れます。無音の行は電力0として数えます。音が1つも届かなかった区間(CSVの
dbfsが空欄の行)は、測っていないので入れません
- 最大/最小/変動幅:記録された行のうち、有限値の行での最大・最小とその差。無音(-∞ dBFS)の区間は外します
- サンプルピーク:区間内の標本点の最大絶対振幅のうち、最も大きかったもの。上の「最大」はRMSなので別の値になります。ITU-R BS.1770 のトゥルーピーク(標本の間のピーク)とは別物で、トゥルーピークはこれ以上になります。0 dBFSを超えることがあります(上流のリサンプリングの跳ね返りで振幅が1.0を超えるため)。簡易モードでは測れないため「--.-」のままです
- 超音波帯の最大:CSVの
band_ultra_dbfs(超音波帯18〜22kHzの、区間ごとの値)のうち、最も大きかったもの。その帯域に音のエネルギーがあったかの記録で、何の音かは分かりません。デジタル無音の行(dbfsが-Infinity)に付いた値も数えます。区間の境目の前の約21ミリ秒の実際の音が後ろの区間に入るためで、架空の値ではありません。音が1つも届かなかった区間の行に付いた値も、同じ理由で数えます。簡易モードと?bands=offでは測れないため「--.-」のままです
- 記録の穴:統計の下に1行で出ます。クリップした区間(|振幅|が1.0に届いたサンプルを含む区間。1〜2サンプルの単発なら区間の値への影響は小さく、3サンプル以上続いていれば波形がつぶれて値は本来の音と違います。注意書きには、記録した全サンプルに対する割合も出ます)と、有効サンプル率(届いたサンプル数÷期待サンプル数。1.000未満=その区間の音の一部が届いていない)の区間数を示します。どちらも0なら「記録の穴なし」と出ます
- リアルタイムグラフ:時系列での音量推移を可視化。実線が音量(全帯域)、破線が超音波帯(18〜22kHz)の値です(グラフの下の凡例に、色と線の形があります)。音が1つも届かなかった区間と、帯域の値が無い区間は線を切ります。デジタル無音は下端に描きます。簡易モード・
?bands=off・超音波帯を測れないサンプルレートでは超音波帯の線を描かず、凡例に見本の線の代わりに理由(「簡易モードでは測れません」など)が出ます
- 記録できる上限:記録を始めると、凡例の下に「この端末で記録できる上限:約◯◯kHz」と出ます。AudioContextとマイクの音声トラックのサンプルレートの、小さいほうの半分です(トラックがサンプルレートを報告しないときはAudioContextの半分で、「トラックの値は不明」と添えます)。サンプルレートで決まる上限で、マイクがその高さの音を拾えることは示しません
- 帯域の注意書き:次のときに、記録の注意として出ます。帯域の有効率(CSVの
band_valid_ratio)が1.0を下回った区間があるとき(件数と最小値)。マイクの音声トラックとAudioContextのサンプルレートが違うとき(サンプルレートの変換で、上限に近い高い音は低く記録されます)。サンプルレートが低くて超音波帯を測れないとき。?bands=offで帯域の計算を止めているとき。簡易モードで帯域を計算していないとき
- ?bands=off:URLの末尾に
?bands=offを付けて開くと、帯域の計算を止めます(帯域あり・なしで有効サンプル率を比べるためのものです)。凡例と注意書きに「止めています」と出て、超音波帯の線は描かれず、「超音波帯の最大」は「--.-」のままです。CSVの帯域の3列は空欄になります
- 音量メーター:現在の音量を色分けで表示(緑→黄→赤)
※ 統計はCSVに書き出される行(区間)だけから計算します
※ CSVから同じ値を出せますが、条件があります。区間長はtimestamp(区間の終わり)の差で作れる一方、トレーラーの# sessionStartAt=と# clockBreakAt=に並ぶseqの行だけは差を使えません。記録を止めて再開した境界では差に休止時間がまるごと入り、時刻のアンカーを取り直した行では跳んだぶんが入るためです。その行は# intervalSec=のログ間隔を重みにしてください(1@0+3@12=seq 0から1秒、seq 12から3秒)。手元の実測では、この置き換えをしないと17行の記録で6.49dB外れ、置き換えると小数10桁まで一致しました。音が1つも届かなかった区間(dbfsが空欄の行)は統計に入れていないので、その行の重みは0にしてください。手順はdocs/csv.mdにあります
※ 複数回の記録セッション(記録開始→停止→記録開始)でデータは累積されます
💾 データの取り扱い
- 録音なし:音声は一切記録されず、音量データのみを扱います
- CSV形式:10列(timestamp・dbfs・seq・peak_dbfs・clip・valid_ratio・band_ultra_dbfs・band_audible_dbfs・band_valid_ratio・hash)を、測定条件のヘッダー行と、行数・ログ間隔・セッションの境界・無音の有無を残すトレーラー行(どちらも「#」から始まる)で挟んで出力。音が1つも届かなかった区間は
dbfsを空欄にします(デジタル無音の-Infinityとは別です)
- ハッシュチェーン:各行のハッシュに前の行のハッシュを混ぜています。CSVがそのまま渡ってきたときに、うっかりの破損・部分的な欠落・順序の入れ替わりを見つけられます。⚠意図的な改変には、相手が誰であっても耐えません。鎖の作り方を
docs/csv.mdで公開しているので、値を書き換えたあとにハッシュを計算し直せば検証は通ります。記録が正しいことの証明には使えません
- 累積記録:停止→再開しても前回データは保持されます
- プライバシー配慮:すべての処理はブラウザー内で完結
🔧 トラブルシューティング
- マイクダイアログが表示されない:ブラウザーのURL付近のマイクアイコンを押すか、ページをリロード
- 音量が「--.- dBFS」のまま:マイクが正しく接続・選択されているか確認
- 計測エンジンの表示:「高精度モード」はオーディオスレッドで区間ごとに集計するため、タブが背面になっても記録が途切れません。「簡易モード」はAudioWorkletのモジュールを読み込めないときの代替で、描画が止まると記録も欠けます。ブラウザーが未対応のときより、file:// で直接開いたときのほうが遭遇しやすいので、https または localhost 経由で開き直してください。なお file:// で落ちるのはモジュールの読み込みだけで、ハッシュのほうは file:// でも計算されます
- グラフが表示されない:ページをリロードして再試行
- スマートフォンで操作しにくい:画面を縦向きにして使用してください
📱 モバイル利用について
- レスポンシブ対応:スマートフォンとタブレットに最適化
- タッチ操作:主要な操作ボタンは44px以上、プリセットなど補助的なボタンは24px以上(WCAG 2.2 の 2.5.8 に準拠)
- 設定の折りたたみ:「設定を表示/隠す」で画面を有効活用
- ボタンの配置:「記録開始」と「停止」は同じ場所に出て、そのとき押せるほうだけが見えます。幅480px以下では「CSV書き出し」と「統計リセット」を「その他」にまとめ、ヘルプとテーマの切り替えを同じ行に並べます。「その他」はEscキーでも閉じられます
- バッテリー考慮:不要時は停止してバッテリー消費を抑制
⚠️ 重要な注意事項
- 録音機能なし:音声そのものは保存されません(音量レベルのみ)
- 環境依存:表示値は機器・環境により変動するため、絶対値でなく相対変化を参考に
- 用途制限:本ツールは物理セキュリティ・音響監視の補助用途を想定
- 証明には使えません:CSVのハッシュチェーンは、うっかりの破損や欠落に気づくためのものです。意図的な改変には耐えないため、記録が正しいことの証明には使えません
- 法的配慮:使用時は適用される法律・規制を遵守してください。音量のみの記録でも、記録する場所と目的によっては制約がかかります