Rennoi's Memorandum

~I do it because it's fun~

時間領域ピッチシフターについて

皆さん歌うことは得意ですか?正確な音程をとるのって結構難しいですよね...でも大丈夫!今回私,そんな皆さんのためにとっておきの商品を開発いたしました!その名も自動歌唱アプリ!!!

 

閲覧ありがとうございます.挨拶が遅れてすみません.今日は先日,私の大学で行わ私のれたオープンキャンパスで所属先の研究内容紹介として作成した時間領域ピッチシフター(自動歌唱アプリとは)について書いていきたいと思います.

アプリの概要

TDPSOLA法(Time-Domain Pitch Synchronous Overlap and Add)の考え方を参考にしています.一定の高さの声を録音し,その声を元に新たな(他の音階の)声を生成していきます.つまり,何かしらの1つの言葉(例えば「あ」)を録音したら,それを元に自動であたかも自分が歌っているかのように歌を再生してくれるというアプリです.

以下では今回の音声変換の原理を説明します.

音声の2つの構成要素

音声には大きく分けて2つの構成要素があります.1つがピッチで,もう1つがフォルマントです.ざっくり言うとピッチとは声の高さを決定する周波数で,フォルマントとはその人の声の特徴を決定する周波数です.

f:id:rennoi:20190908233132p:plain

音声波形

ピッチ周波数は音声波形で見ると,大きな塊の繰り返しの間隔として見ることができます.

f:id:rennoi:20190908233728p:plain

音声波形におけるピッチ周期

フォルマント周波数は音声波形で見ると1ピッチの波形に表われます.この波形によって人の声の特徴や,話している言葉が決定します.フォルマント周波数にはその形を決定するための複数の周波数が含まれており,それぞれ第1フォルマント周波数 f_1,第2フォルマント周波数 f_2,第3フォルマント周波数 f_3,...と順に周波数の低いものから定義づけられています.

f:id:rennoi:20190908234318p:plain

フォルマント周波数によって決定される1ピッチ内の微細波形

ピッチシフターの考え方

さて,ここまで読んでくれた方の中で勘のいい方は既に気付いていると思いますが,声を高くするにはピッチを変化させればいいのです.ピッチ周波数を変化させる方法はいくつかありますが,その中で最も簡単な手法は,再生速度を変化させる手法です.再生時間を変化させれば,時間軸で見るとピッチ周期が変わるので声の高さも変わるというものです.

ここで,試しにこの手法で声の高さを変えてみましょう.今回例として友人のH君の声を録音してみました.実際に録音した声はこれです.

 これを再生速度を変化させた時の音声がこちらです.

きっと多くの人がこの音声を聞くと,テレビの早送りシーン等で聞こえる声に性質が似ていると感じると思います.また,この音声を聞いても声の高さが高くなるのは分かるけれど,誰の声かどうかを判断できないと思います.これより,再生速度を変化させるだけではピッチは変化しても1ピッチの波形まで変化してしまうことが分かります.

 

そこで,この問題に対処すべく,1ピッチの波形をなるべく変えずにピッチ周期を変化させる手法を説明します.

f:id:rennoi:20190908233132p:plain

音声波形

このような音声波形に対して下の図にあるように1ピッチ内の振動が小さな部位を短く/長くすることでピッチ周期を変化させます.

 

f:id:rennoi:20190909024722p:plain

音声波形に対する操作

このような操作をすると音声波形は以下のように波形の主要な部分の形を変化させずにピッチ周期を変化させることができます.

f:id:rennoi:20190909024728p:plain

ピッチシフトの結果

さぁ!では,実際にこの手法の考え方を用いてピッチを先ほどと同じように変化させた音声を聞いてみましょう.しっかりできているのか.......

 「あ~」と言っているように聞こえませんか?それに,声質も元の声のそれを保っているように感じると思います!(多少機械っぽくなるのは許してください頑張ったんです)

 

自動歌唱アプリの成果

さて,ここからが自動歌唱アプリの本領発揮をする部分です(前振りが長い)!実際に先ほどの声を元に様々な高さの音を作成し,それらを並び替えることによって「きらきら星」の冒頭部分を作ったので聞いてみてください!!

 いかがでしょうか?H君はただ「あ~」と言っただけなのに本人の声で勝手に歌ってくれるのです!!

 確認までにもう一度すべての音声を比べましょう.

これが元音声

これが再生速度を変えただけの音声

これがピッチシフト後の音声

改めて聞き比べてみると割とすごくないですか?(自画自賛)

再生速度を変えただけのものに比べて本人の声の要素がしっかり保存したままピッチを変えられています.これぐらいの成果を出すまでに様々な手法を試してきました.そのために学んだこともたくさんあるので順に記事にして供養しようと思ってます(乞うご期待).

 

最後に

ここまで読んでいただきありがとうございます.今回は人の声についてその構成要素と仕組みを用いて,作成したピッチシフターの概要を説明しました.いつ投稿するかは未定ですが,音声処理の数学を交えた説明や,私の書いたプログラム(TDPSOLA法の一部修正版)の実践的な説明をそのうちしたいと思っています.

さて,ここまできて話す内容ではないかもしれませんが,音の高さというのは周波数によって変化します.また,私たちが馴染み深い「ドレミファソラシド」にもある周波数が割り当てられています.この音と周波数にも面白い仕組みがあるので次回以降にそこについては話をしたいと思います.そしてこの仕組みが分かった人は,物理の知識が少しあれば,音楽という概念の無い世界に行っても「ドレミファソラシド」を作ることができるので是非その記事を出した時はまた読んでみてください!最後まで読んでくれて本当にありがとうございました.