周波数グループでは、以下の4種類の計測をカバーします。
  • 音程の変化
  • 区切りの検出
  • 音圧の変化
  • 倍音の構成

音程の変化は、音の高低で周波数の高低と比例していますので、周波数の計測によって観測できます。

区切りの検出はどうでしょう。区切りすなわちポーズですが、これは音の無い部分を指します。音が無いというのは、周波数が0の状態が一定程度続いた状態を意味しますから、これも周波数の時間経過を見ることで、観測できます。

音圧の変化は、波形の時間軸に対する垂直方向の上下変化でしたので、周波数の観測時に同時に得られます。

最後の倍音は、ある基音に対する整数倍の周波数を指しています。従って、まず基音の周波数を計測し、、その他の重なり合った周波数を観測することで、倍音の構成が得られますので、こちらも周波数の計測によるものです。

適切に周波数を測定する手法は様々ですが、本計測器用には、音程認識として公開され実績のある手法MPMを採用し観測しています。


周波数測定の手法 - MPM

オーディオスピーカの性能を表すのに、「周波数特性」という言葉が良く使われます。これは、音が複数の周波数の重なり合いで出来ているので、スピーカーがこれら全周波数を正しく再現出来ているかを診断することが目的です。
インパルスと呼ぶ全周波数成分を含んだ非常に短い音波をスピーカに投入し、その再生された周波数成分から、対象のスピーカーの特性を測ります。(インパルス測定)
ですから、音を周波数に分解して視覚化するというのは、オーディオの世界では常識で、アナログの世界からデジタルに移行する過程で、コンピュータを使った分解手法が確立しています。
ここでは、手法のアルゴリズムや数学的な話は出来るだけ避けて、利用する立場で、最適な手法を探した足取りを追ってみたいと思います。

選ぶにあたっては、以下を指針としました。
  1. 実績がある
  2. ネット上で、解説や実装例、テスト結果などが公開されている
  3. ネット上で、プログラムソースが公開されている
  4. 簡単かつ高速に利用できる
  5. できれば、周波数以外に音圧や周波数の倍音構成が得られると良い
まぁ、言い出したらキリがないのですが、その中で選んだのが、MPMです。

MPM(McLeod Pitch Medhod)

ニュージーランドのオタゴ大学コンピュータサイエンス学科のMcLeod教授による「ピッチを見つけるためのスマートな方法(Smarter way to find pitch)」という公開論文に発表されている手法です。選定条件を全てクリアーし、私のようなB級プログラマーでも実装することが出来ました。
ここで云う「ピッチ」とは、音程の事で、教授等の主たる目的は、楽器演奏者(得にバイオリンなどのフレットのない音を外し易い特徴の楽器)に正しい音程演奏を支援するためのツール開発です。

音域幅の広い楽器を対象にした手法が、比較的音域幅の狭い音声に対応できるのか?
当初心配しましたが、カラオケの音程検出に活用している事例*1もあり、また同手法の評価テスト結果を掲載しているページ*2との動作比較から、十分実用に耐えると判断しました。

MPMの基本的なアイディア

1ヘルツの周波数は、一秒間に一周するサイン波です。この波は、時間と共に変化しますが、どの時間地点の波の高さでも、その地点から一秒先の波の高さは、当然ながら等しくなります。

1Hzのサイン波


この様に、同一周波数の波は、一周先の波の高さと常に一致します。これは、高さの差が無いことを示しています。
逆に考えれば、事前に周波数が判らない場合、適当な時間幅で波の高さを調べ、その差が一番小さい時間幅Tが見つかれば、その周波数はサイン波の場合、1/Tで求まる。という事になります。

MPMによる周波数の取得

MPMは、ある時間断面の周波数を教えてくれます。音声データを測定する場合、どのくらいの幅で計測すれば良いか?  一番短い単位をモーラとみなせば、少なくとも時間幅129msより短い幅(実際にはその半分以下で約64.5ms)で周波数を取得できれば、音声認識した文字との対比が可能になる筈です。が、実際には、以下のように更に短い16ms幅で計測していますので、1モーラあたり4回以上という十分短い測定幅になっています。
以下は、計測パラメータに興味のある方向けの表です。興味の無い方はスキップしてください。

MPMサンプリングパラメータ
サンプリング周波数(SR)16,000Hz
ウィンド長さ(WL)0.1秒
フレーム長さ(FL=SR*WL)1,600
FFT長(FFTL=FL内の2冪数)1,024
フレーム刻み(FS=FFTL/4)16ms
※サンプリング周波数は、音声認識Speech to Textの推奨値
※フレーム刻みは、MPMで指定する最適値(75%のオーバーラップ)に従う

音程の変化を計測

実際にMPMで音程の上がり下がりを観測した例です。音声は、サンプル音声SV1を使用しています。

MPMで観測された音程グラフ
MPMで観測された音程グラフ

ここで、実際の文章が上部に表示されていますが、これは波形から推測したもので、参考用に付記したものです。横軸が時間(秒)、縦軸が音程です。音程はMidiノート*4を使用していますが、周波数を対数化しているので、広い音声周波数帯(100Hz~6KHz)の表記に便利です。参考までに赤字で周波数を示しています。ほとんどの音程は100Hz~350Hzにあることが判ります。

①、②は例外的に高い周波数を示していますが、これらは「サ・タ・ハ行」等の発声にみられる摩擦音で、滑舌の良否判定の決め手になります。

区切りの計測

③、④はポーズ部分で、区切り判定に利用します。音程が連続した0の区間が、モーラ単位時間以上であれば区切りとなります。
他にも、音程が0の箇所が2つありますが、こちらはモーラ単位時間(129ms)以下なので、ポーズ対象外となります。

音圧の変化を計測

こちらも、サンプル音声(SV1)から計測した例です。
MPMで観測された音圧グラフ
MPMで観測された音圧グラフ

音圧レベル

音圧は、騒音などの音の大小を示す単位してデシベルが使われています。音圧の元になる単位パスカルです。ヘクトパスカルの名で、気圧の単位として馴染みのあるパスカルですが、音声を表現する場合には、非常に範囲が広いため直接パスカル値で表すのが不便です。そこで音程同様に対数を取って、観測値Pの音圧レベルを以下の式から求めています。
音圧レベル(dB) = 20 log ( P P 0 )
いきなり数式が出てきて興ざめの方も多い方と思いますが、ちょっと解説させて下さい。
  • 人の耳に聞こえる最小の音を定めたい。勿論、人によってあるいは年齢によって聞こえ方には差異がありますが、工学の世界では、モノづくりの観点からも標準化が必要だったようです
  • そこで、1KHzの音が聞き取れる最小の音圧をまず最小単位として決める。この時の空気を押す圧力(すなわち音圧)が20μパスカルであると判定。これを基準音圧P0とする
  • 1パスカルの力は、1平方メートルに1ニュートンの力とされています。1ニュートンの力は、1Kgの物体を一秒間に1メートル加速する力に相当しますので、20μパスカルは、相当小さな力ということになります。
  • 一方、騒音などで話題になる音圧は、20パスカルとか桁違いに大きい
  • そこで、音圧レベルを2~3桁範囲に収めるように対数化したのが先程の式になります。すなわち、基準音圧P0の何倍になるか(=P/P0)を求め、10の対数をとって、20倍した値です。
ということです。厳密には、音圧のパワーから式が導き出せるようですが、興味のある方はググってみてください。

相対デシベルdBr

騒音は人間が聞いていますが、この計測器の場合、コンピュータに聞かせていますので、基準値の設定をどうするか決めておく必要があります。人間よりも遥に聴力が優れていますので、人間の基準値を使うのが正しいのか否か判断が尽きません。
そこで、MPMに委ねることにしました。MPMでは、極めて小さな音に対し周波数を決定しません。そこで、周波数判定が出来た最も小さな音。これをPrとして採用しています。従って、人によりこのPrが異なってきますので、単位をdBではなく、dBrすなわち相対デシベルとして観測することにしています。先のグラフは、dBrとしてプロットしたものです。
音圧相対デシベル(dBr) = 20 log ( P P r )

オーディオの世界では、音圧をデシベルで計算する場合、
音圧デシベル(dB) = 20 log ( P P max )
というように、デジタル表現できる最大値を分母にとり、マイナスdB表記するのがスタンダードです。が、この計測器では、即時性を優先するため、対象の音声の最大値を検出することを断念し、こちらの相対デシベルを使用しています。

倍音の構成を計測

MPMレポートのセクション7に記載された「Clarity」から、検出された周波数に含まれるノイズの比率が0から1.0の幅で判ります。
このノイズを1から引いた値は、その周波数の「ピーク相関値」と呼ばれ、倍音だけで構成されていれば、限りなく1.0に近づき、逆に非倍音が多ければ0.0に近づきます。従って、複数の周波数の構成は得ずとも、ピーク相関値だけで、倍音の度合いが判明しますので、「声の艶」が推定できます。

MPMの基本的なアイディアで示しました、「同じ高さ」から周波数が判明するとしましたが、倍音も実は、基音に対して「同じ高さ」になるため、高さ間の差がなくなります。

基音周期と倍音の関係

次の図は、基音に対し、2倍の周波数を持つ倍音を合成させた波形です。合成した結果の波形は、乱れますが、基音の周期は保たれていて、同一の高さが維持されています。

倍音合成後も基音周期が維持される
倍音合成後も基音周期が維持される

基音波長と非倍音の関係

一方、基音に対し、1.5倍の周波数と合成させた波形では、基音の周期が保てません。高さの差が、「ノイズ」となります。音声では、かすれ声やしわがれ声などの嗄声の原因になるようです。

非倍音合成後は基音周期は乱れる
非倍音合成後は基音周期は乱れる

倍音と非倍音の聞き比べ

音声の周波数帯で、聞き分けてみましょう。以下は、三倍の倍音を加えた合成例です。
倍音をいくら重ねても基音の周期性は保たれ(相関値が1.0)となり、きれいな音になります。
※220Hzは12音階で低い方の「ラ」、440Hzは高い方の「ラ」で、電話117の時刻案内で、「ツ・ツ・ツ・ツー」の最後の「ツー」の音に使われている周波数です。660Hzは高い方の「ミ」です。

220Hz
合成音
440Hz
660Hz
※スピーカマークを押すと波形音が5秒間鳴ります。二度押すと中断します。


次に、非倍音の合成例です。音程幅を狭めてみました(低音、高音を各60Hz)。嗄声の特徴として低音・高音部分が発声しにくくなり、結果的に狭まるそうですが、その様に聞こえるでしょうか? 注意深く聞くと、雑音が入っているのが判ります。

280Hz
非倍音による合成波と前後の音を聞く


合成音
440Hz
600Hz

MPMでピーク相関値を観測

では、こちらもサンプル音源SV1を使ってピーク相関値を観測してみましょう。

MPMで観測されるピーク相関と音程
MPMで観測されるピーク相関と音程

横軸は、経過時間(秒)で、左の縦軸は、Midiノートで青色の折れ線グラフ、右の縦軸はピーク相関値でオレンジ色の折れ線で表示されています。

①、②の部分は、経過時間と供に音程が緩やかに高い方から低い方に向かっていて、ピーク相関値も概ね高い値で推移しているのが判ります。一方、③、④の部分は、音程が高い周波数帯にあり、この間はピーク相関値が低い傾向にあります。
これは、大部分の音程が安定している部分はピーク相関値も高い傾向を示していて、倍音を多く含んでいると推測できます。サンプルは、音読スペシャリストのシニア女性で、声に艶があり、平均して0.9以上のピーク相関値を示しています。

MPM選択の整合性

  1. 実績がある
    ✔ はい、実際に利用されています。*1
  2. ネット上で、解説や実装例、テスト結果などが公開されている
    ✔ はい、複数の実装例があり、テスト結果が公開されています。*2
  3. ネット上で、プログラムソースが公開されている
    ✔ はい、複数の言語(Python, C#)がソース公開されています。*1*2*3
  4. 簡単かつ高速に利用できる 
    ✔ はい、リアルタイムの検出に使われています。*1
  5. できれば、周波数以外に音圧や周波数の倍音構成が得られると良い
    ✔ はい、実装検討時に取得できることが判明しました。
ということで、全ての選択項目を満足しました。

【参照ページ】