音の三大要素について 第五回
この記事を書いたのは 山岡さん.
0. 前回の記事の内容
前回は、pythonを用いて音量を算出しました。
まだご覧になってない方はぜひ下のリンクから読んでみてください。
1. この記事から理解できることは?
Pythonを用いて音の高さを算出する方法
2. Pythonを用いた音高の算出
音の三要素について第三回の記事で、音の高さに関する紹介をしました。
第3回の記事は理論ベースの話でしたが今回は、実際にプログラミングを用いて音の高さを数値化してみます。
第4回で音量を用いたライブラリーと同じlibrosaを用いて、音高を算出してみます。
LibROSAでは YIN, pYINという基本周波数(声の高さ)を推定するアルゴリズムが実装されています。
2.1 YIN
YINのアルゴリズムを用いて音高を算出したい場合は以下で求めることが可能です。
【音高算出 YIN】
import librosa
filename = "001.wav"
y, sr = librosa.load(filename)
F0 = librosa.yin(y, fmin=librosa.note_to_hz('C2'), fmax=librosa.note_to_hz('C7')) #音高の計算
fminとfmaxは算出する値を制限するための変数で、音階の記号であらわされていてC2~C7まで対応しています。
音階のドレミファソラシドはそれぞれ、C, D, E, F, G, A, Bの記号であらわされ後ろにつく数が大きいほど高い音を表しています。
具体的にC2はピアノの下から2番目に低いドの音の周波数を表しており、約65hzをC7はピアノの上から2番目に高いドの音の周波数を表しており、約2093hzです。
計算された結果を出力してみると以下のような結果になります
また実際にfminとfmaxを共に以下のCodeのようにC2にしてみると
import librosafilename = "001.wav"
y, sr = librosa.load(filename)
F0 = librosa.yin(y, fmin=librosa.note_to_hz('C2'), fmax=librosa.note_to_hz('C2')) #音高の計算
print(F0)
結果は
となり、65hz以上の音であっても、65hzと出力されてしまうことが分かります。
これは、ある一定のhzを計算時に強制的に丸め込みたい時などに便利な機能です。
以下のCodeを用いて、算出された配列の平均を算出すると
Pitch_yin = np.average(F0)
print(Pitch_yin)
が得られ、001.wavファイルの平均的な音の高さが約172hzであることが求められた。
2.2 pYIN
pYINのアルゴリズムを用いて音高を算出したい場合は以下で求めることが可能です。(YINとほとんどかわらないです。)
【音高算出 pYIN】
import librosa
filename = "001.wav"
y, sr = librosa.load(filename)
f0, voiced_flag, voiced_probs = librosa.pyin(y, fmin=librosa.note_to_hz('C2'), fmax=librosa.note_to_hz('C7')) #音高の計算
print(f0)
pYINを用いて、算出された配列の平均を算出すると以下のような結果になり
ました。
上記から分かるようにYINとpYINの結果には大きな差は見受けられないです。
3. Praat
pythonの使い方が分からない場合にはPrratを用いることもおすすめです。
Prratを開いて、open>Read open file… を押して音高を算出したいファイルを選択すると以下のような画面になります。
次に赤枠で囲まれているView&Editを押します。
そうすると、次のような画面になります。
Praatでは音高のみならず、音量やフォルマントなども算出可能です。
音高を算出したい場合には、Pitch>Show Pitchを選択します。
するとPrratの画面3のように青い曲線が表示されます。
上記の状態で、音高の平均値を算出したい区間をPrratの画面4のように選択した状態で、Pitch>Get Pitchを選択することで、音高の平均を算出することが出来ます。
以下が得られた結果です。
4. まとめ
今回は、Pythonを用いて音高を算出してみました。音高を算出することにより、音階メーカーを作成してカラオケ採点の仕組みを再現したり、situationごとの自分の声の高さの違いを知ることが出来ます。
Pitchの算出アルゴリズムには様々な手法が提案されていますが[1]に手法毎の違いや特徴が述べられています。
再現実験を行うと各アルゴリズムの違いについての理解がより深まるので時間を見つけて行ってみたいと思います。
参考文献
[1] Hideki Kawahara , Kohei Yatabe , Ken-Ichi Sakakibara , Tatsuya Kitamura , Hideki Banno , Masanori Morise, An objective test tool for pitch extractors’ response attributes , InterSpeech 2022
kawahara22_interspeech.pdf (isca-speech.org)