リアルタイム検出は短い窓で絶えず再推定している
母音を持続していても、波形は完全には同じ形を繰り返しません。呼吸、声帯の微小な変化、部屋の反射、マイクの自動ゲインがサンプルに含まれます。窓が短すぎると反応は速くても根拠が不足し、長すぎると値は安定しても滑音や立ち上がりに追従できません。リアルタイム製品は「即時性」と「信頼性」の間で選ぶ必要があり、絶対に動かない偽の直線を目指すものではありません。
ピッチ軌跡が跳ぶ4つの典型的な状況
- 発声直後:発声の立ち上がりには気流や過渡成分が含まれ、周期構造がまだ安定していません。
- 音量が低すぎる:解析窓に占める環境ノイズの割合が増えると、アルゴリズムが誤った周期を追跡することがあります。
- 倍音のほうが目立つ:基本周波数が弱いと、結果が一時的に2倍または半分の位置へ跳ぶことがあります。
- 音が切り替わっている:実際のピッチはもともと動いており、過度に平滑化すると本当の変化を隠してしまいます。
そのため「数値を1つ返す」だけでは不十分です。各フレームには品質判断も必要で、チャレンジ進捗に使えるのか、表示だけに使うのか、一時的に捨てるのかを決めます。
FrostNoteで信頼度をどう使うか
FrostNoteで保持進捗が増えるのは、音量がしきい値を超え、周期性の根拠が信頼でき、ピッチが合格範囲に入ったときだけです。短い音抜けでは積み上げた進捗をすぐに消しませんが、目標から明確に外れると増加を止めます。目標付近の表示は滑らかに寄せますが、見栄えのために高すぎる・低すぎるデータを中心へ無理に戻すことはありません。
初回の快適音域ガイドでは、ユーザーの発声で最初に出た数値をそのまま使いません。比較的安定した基本周波数を一定区間集め、その中央値から近い音域を提案します。中央値によって少数のオクターブ誤判定や立ち上がり異常の影響を減らせますが、これは今回の発声の出発点にすぎず、永久的な声域認定ではありません。
安定した表示は測定値の改ざんではない
実装上は「検出結果」と「表示範囲」を別々に扱えます。前者は実際の推定値を保持し、後者は一定のテンポで表示範囲を滑らかに調整します。FrostNoteは最初に広めの音域を表示し、安定したピッチを捉えたら目標付近へ狭め、無声や長時間の不安定が続けば再び広げます。これにより全体位置を見せつつ、各フレームに合わせて軸が震えるのを防ぎます。
この検出をブラウザ内に残す理由
リアルタイム練習には低遅延が必要ですが、音声を長期保存する必要はありません。FrostNoteはブラウザ内でマイク収音と基本周波数推定を行い、サーバー側の統計には元録音、声紋、フレームごとのピッチ軌跡を送りません。チャレンジの再生データは現在のページのメモリにだけ保存され、更新や離脱後にアカウント情報として残りません。