VoiceLoupe PoC / v1

マイクと、いま使っているブラウザの設定が、通話や録音に合っているかを測ります。 音はこのブラウザの中だけで処理し、どこにも送りません。

[1] いまの状態を測る

マイクの音を測るために使います。音はこのブラウザの中だけで処理し、サーバーへは送りません。 測るあいだだけ端末のメモリに置き、ページを閉じるか再読み込みすれば消えます。録音ファイルは作りません。

RMS
PEAK
HOLD
マイクを許可すると、声の大きさがこの帯に出ます
-60 -40 -20 -6 0

単位 dBFS

まずマイクの許可が要ります。許可のあと、ボタンを押すと 5 秒間の測定が始まります。

まだ測っていません

くわしく — 音の扱いかたを見る

このページは音を 2 系統で受け取ります。表示のための AnalyserNode(リアルタイム)と、 声質を測るための AudioWorkletNode(5 秒ぶんの音をメモリ上に取り込む)です。 MediaRecorder は使いません。 外部への通信(CDN・フォント・アナリティクス・fetch)も持ちません。

取り込んだ 5 秒の音は、端末のメモリの上にだけ置き、その場で数値に変換したあと破棄します。 ディスクにファイルとして書き出すことも、サーバーを含むどこかへ送ることもありません。 ページを閉じるか再読み込みすれば、メモリの上のデータも残りません。 解析して得た数値は [5] の「判定の根拠になった測定値」の「くわしく」に出ます。

測った値のうち、セッション最大 RMS などの数値は [3] の「くわしく」に出ます。

取り扱いの方針は プライバシーポリシー に記載しています。

[2] 対処

ここに出る内容は測定値から自動生成しています。人による診断ではありません。 PoC のルールは 8 件のみで、表示は最大 2 件です。原因の上流(物理 → 接続・OS → ブラウザ)から順に出しますが、 その場で適用できる対処が出ている場合は、2 枠のうち 1 枠を必ずそれに割り当てます。

機材の買い替えは書きません。3 つとも効き目が出ないときは、OS 側の入力音量 → 別のマイク → 別のブラウザ、の順に切り分けてください。

[3] 入力レベル

測定を開始すると、声がどれくらいの大きさで届いているかがここに 1 行で出ます。

レベル未計測

くわしく — 数値と入力デバイスを見る
SESSION MAX (RMS) — 測定開始からの最大値
入力デバイスの種別
製品名(当サイトの製品名リストに一致したときのみ)
deviceId

表示に切り替えても、報告テキスト・コピー・保存・下の生 JSON に機種名は入りません。 切り替えは保存していないため、ページを読み込み直すと必ず非表示に戻ります。

単位は dBFS(0 dBFS = デジタル上限)。目盛は -60 / -40 / -20 / -6 / 0。 RMS は一定時間の平均的な大きさ、PEAK は瞬間の最大値、HOLD は直近のピークを保持する線です。

機種名(MediaDeviceInfo.label)は、マイクの許可後にブラウザから取得できています。 ただし iOS / macOS では既定で「〇〇のAirPods」のように持ち主の氏名が入るため、 当サイトは既定でそのままの名前を画面に出しません(NF-P11)。 当サイトの製品名リストに一致したときだけ、リスト側の表記で製品名を出し、 それ以外は種別(外部マイク / 内蔵マイク / Bluetooth 機器 / 不明)だけを出します。 そのままの名前を見たいときは、上の「機種名を表示する」で切り替えてください。

[4] このブラウザの音声処理

以下は、このブラウザが申告している設定です。 申告どおりに処理が掛かっているかどうかは、「くわしく」の測定で確かめられます。

くわしく — この画面から切り替えて試す(未指定 / ON / OFF)

切り替えるたびにマイクを開き直します(数秒)。「未指定」は、ブラウザに何も要求せず判断を任せる状態です。 ON・OFF とは別の 3 つ目の状態で、ブラウザ既定の挙動を確かめるときに使います。

くわしく — 切り替えたときの音量の変化を測る

[1] の測定で取った「声の大きさ」を基準として保持しています。 切り替えるたびに同じ 5 秒計測を行い、その差分を EFFECT 列に出します。

baseline: —

EFFECT は同一環境の逐次計測の差分です。同時 A/B ではありません。 AGC・NS は入力があって初めて効くため、計測中は話し続けてください。無音では差が出ません。

くわしく — 16 項目の要求と実際を 1 項目ずつ確かめる

16 個の項目を 1 つずつ「この値にしてほしい」と要求し、受け入れられたか・黙って無視されたか・ そもそも要求できないかを分けて記録します。1 分ほどかかり、その間マイクが 16 回開き直します。 メーターはその間止まります。開発・検証のための機能です。

まだ確かめていません。上のボタンを押すと 16 項目を 1 つずつ確かめます。

「対応」列は getSupportedConstraints() の申告です。false positive が多いため、 判定の信頼側には getSettings() / getCapabilities() を使っています。 「未指定」はブラウザへ制約オブジェクトのキー自体を入れていない状態({} を送る)です。

くわしく — 5 つの API の生 JSON を見る

deviceId / groupId は当サイトの判断でマスクしています(値の存在と型は確認できます)。 label は一切含めていません。

[5] 声質判定

まだ測っていません。[1] の「測定を開始する」を押すと、その 5 秒間の音声からここに判定が出ます。

この判定の読み方

  • これは 1 回の録音のスナップショットであり、人を分類するラベルではありません。
  • マイク・距離・部屋・話し方が変われば結果は変わります。
  • 他人との比較ではなく、設定やブラウザを変えたご自身の録音同士の比較にお使いください。
  • 本人確認・話者識別は行いません。声の特徴を保存しません。
  • 医学的な評価ではありません。
  • 呼び名は分かりやすさのための要約です。判断の根拠は、すぐ下の「判定の根拠になった測定値」のほうにあります。
くわしく — 判定に使ったしきい値と、この版で出せない項目を見る

判定は docs/metrics-spec.md の 4 層モデルに従っています。 測った 7 指標(算出層)を、そのまま帯・別枠・図の上の位置に置き換えているだけで、 ここで新しい測定は起きていません。 しきい値はいずれもキャリブレーション前の仮値です。

軸ごとの実測値と、いま置いている境界

この版では出さない呼び名

2 つの軸は X = 通りやすさ(Pickup / 機械に信号として残るか)、 Y = 聞き取りやすさ(Intelligibility / 人に子音が届くか)です。 X には SNRDRLVL を入れていません。 これらは第 1 層・第 2 層で扱う量であり、同じ画面の座標を同時に決めてしまうと 3 層構造が壊れるためです。

しきい値の分位点(上位 20 % / 下位 20 %)は内部の条件としてのみ使い、画面には出しません。 順位・平均・偏差値の類はこのページのどこにも表示しません。

この版は読み上げる文を指定していません。サ行の判定(SIB)だけは、 測った 5 秒にサ行が含まれていることを前提にしています。 サ行を含まない発話で測ったときは、この 1 行だけ当てになりません。 発話と判定できた長さが 3.0 秒に満たないときは、[5] の先頭に参考値である旨を出しています。

判定の根拠になった測定値

[1] の 5 秒の測定で取り込んだ音を、そのままこのブラウザの中で解析した値です。 ここに出るのは数値だけで、良い・悪いの判定はしていません。

まだ測っていません。[1] の「測定を開始する」を押すと、その 5 秒間の音声からここに数値が出ます。

くわしく — 算出した 7 指標の数値を見る

7 指標はすべて、同じ 1 本の解析から出しています。 発話区間だけを取り出して長時間平均スペクトル(LTAS)を作り、 TILT / PRES / SIB / ROLL はその帯域比、SNR / DR はフレームごとの RMS から算出します。 BREATH だけは 1 つの帯域比ではなく、 有声の続きかた・スペクトルの平坦さ・高い帯の比の 3 つを合わせた無次元の量で、単位は付きません。 TILTPRES は大きいほど低域寄り・中高域寄り、という向きです。

参考値と解析の条件

解析の入力は AudioWorkletNode が受け取った無加工の Float32 データです。 MediaRecorder は使いません(圧縮が高域とノイズフロアを偽装するため)。 取り込んだ音は端末のメモリの中だけに置き、解析が終わった時点で破棄します。 ディスクへのファイル保存も、サーバーへの送信もしません。ページを閉じるか再読み込みすれば消えます。

しきい値は未較正の仮値です(docs/metrics-spec.md 第 6 節)。 測定は 5 秒あるため、同 θ14 が求める発話 3.0 秒以上は通常満たせますが、無音や間が長いと届かないことがあります。 この 7 指標を上の [5] で呼び名に置き換えています。 BREATH を使う呼び名(P-4)は、 3 成分を較正前の基準値で無次元化した合成量にもとづくため、必ず「参考」と刷って出します。 この 1 件だけは単独では対処を出しません。

[6] 処理チェーン

声が、マイクからこの画面の数値になるまでに通った道すじです。音が流れる順に上から並べています。 ここに出るのは、このブラウザから実際に読み取れた値だけです。 読み取る手段が無い段は、推測で埋めずに「ブラウザからは検知できません」と出します。

まだマイクを許可していません。いま出ているのは、許可の前でも分かる段だけです。

段の順序には意味があります。上の段で失われた音は、下の段では戻せません。 たとえばノイズ抑制で削られた音は、この画面の解析からは「元から無かった音」と見分けが付きません。

この経路のうち、当サイトが手を入れているのは最後の 2 段(S5・S6)だけです。 S1〜S4 で起きたことを当サイトが変えることはできません。読み取って書き出しているだけです。

くわしく — 検知できない段がある理由を見る

読めないものを「たぶん OFF です」と書けば表は埋まりますが、それは測定ではありません。 このページは、埋まらない欄を埋めないことを選んでいます。 OK は実測、? は読み取りに失敗、 は読み取る手段が無い、= はこのページの仕様、です。

[7] このブラウザでできること / できないこと

くわしく — このブラウザが扱える項目の一覧を見る

いま使っているブラウザが、マイクの設定をどこまで扱えるかの一覧です。 扱えない項目があっても、壊れているわけではありません。 そのブラウザに元から無い、という測定結果です。

いま使っているブラウザが扱える音声設定の一覧
ブラウザ エコーキャンセル ノイズ抑制 自動ゲイン 音声分離 サンプルレート チャンネル数

扱えない項目があったときは

  1. 別のブラウザ(Chrome / Firefox / Safari)で同じページを開き、同じ項目がどう出るかを見る
  2. ブラウザ側で扱えない項目は、OS のサウンド設定側にある場合がある
  3. Bluetooth 接続をやめて有線につなぐと、扱える項目が増えることがある

測定結果を送る(テストにご協力いただける方へ)

上の表は、いまのところ「このブラウザ 1 行」だけです。 この表は、協力してくださった方の測定結果で埋まっていきます。 ボタンを押すと、いま画面に出ている数値をひとまとめのテキストにします。

音声はどこへも送りません。 作られるのは数値と選択肢だけの文章で、波形も録音ファイルも含みません。 押すまで文章は作られず、作ったあとも、あなたが送る操作をするまで何も出ていきません。 このページに自動で送信する仕組みはありません。

「コピーする」と「テキストで保存する」は、端末の中だけで完結します(通信は起きません)。 「メールソフトで送る」は、お使いのメールソフトに下書きを開くだけです。 送信ボタンを押すのはあなたです。 文章が長くて下書きに入りきらないときは、「コピーする」で全文を貼り付けてください。

いただいた内容は、[7] の表を埋めることと、判定のしきい値を合わせることにのみ使います。 個人を特定する情報は含まれておらず、当サイトも集めていません。扱いは プライバシーポリシーに書いてあります。