Pitch&Rhythm Monitor
のピッチ解析は自分のPCとマイクで自分の声だと、
かなりの精度で解析できていてこれ以上のチューニングは必要ないように感じている。
しかし、倍音の多い声質や、マイクの周波数特性に偏りがあるような場合に、
どれだけの精度になるかは不安がある。
iPhoneアプリの
【iPhone/iPadアプリ】 VocalPitchMonitor
では、iPhoneのマイクが低周波数の感度が悪いため、
低音部で誤動作しやすい。
なんとか改善できないかと、以前に、自己相関以外の方法も試したことがあるが、
どれもあまりうまく行っていない。
自己相関以外では、
・LPCの残差信号
・自己相関のスペクトル
を試したが、
どちらも安定性は自己相関に及ばない。
自己相関も、そのままでは倍音や3倍音、1/2、1/3の周波数を誤検知することが多いため、
以下の様なアルゴリズムで除去している。
自己相関の最大のピークに対して、 1/2、1/3、1倍、2倍、3倍の位置に対して、 元の信号のスペクトルと比較して、 以下の条件に当てはまるか検証する。 (1)スペクトルのピークがある (2)スペクトルの値が閾値より高い (3)スペクトルの値が自己相関の最大ピークのスペクトルの値のn倍より大きい。 条件に当てはまる、一番低い周波数を基本周波数とする。
この方法で検出する場合、いくつかのパラメータを自分で調整しないと行けない。
(2)の閾値
(3)のnの値
誤検知する度にその音声サンプルで誤検知しなくなるように
調整を行うのだが、また別のサンプルで誤検知するようになったりと、
ベストな値を見つけるのは苦労する。
そこで、次に試したいと思っているが、
誤検知するサンプルを集めて、パラメータの自動調整を行うことである。
いわゆる機械学習と呼ばれる方法である。
パラメータ2個くらいならがんばれば手で調整できなくもないが、
機械学習を行うならアルゴリズムを改良してさらにパラメータを増やして
精度を比較できそうである。
また、楽器ごとに合わせたパラメータとかも調整できそうである。
ベル音などのパーカッシブな特定の楽器では誤検知が多くなることがあり、
一度その楽器で誤検知しないように調整したら声で誤検知が増えたことがある。
機械学習の方法について、学習中で、
将棋のボナンザで用いられている方法と同様の考え方で調整できそうと
思っているがまだ実装には手をつけてない。