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法の一部修正版)の実践的な説明をそのうちしたいと思っています.

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

はじめましての挨拶と当ブログについて

f:id:rennoi:20190805002801j:plain


閲覧ありがとうございます.ソフトウェアつよつよになりたいマンです.

 

私は,東京都内にある某理科の大学に通う大学4年生です.1年次は上の写真のように北海道の田舎でのんびりと暮らしていたのですが,どうやら東京では難しいようですね...

今年に入ってから研究室配属があり,音の研究を始めました.(が,難しくて本当によくわからん...ハァ..ハァ...学部3年までにもっとちゃんと勉強しておけばよかった...)

 

これが初めて投稿する記事ということなので以下では自己紹介がてらに,今やっていることこれまでにやってきたことこれからしたいことについて書いていきます.

・今やっていること

上にも述べましたが音の研究をしているのでメインでやっていることは音の勉強です.最近では適応信号処理アルゴリズムの勉強をしています.(よわよわマンには既にこれが結構難しい...理系として今後大丈夫か...?)

また,音に関連していうと,オープンキャンパスで展示する用の時間領域ピッチシフターのアプリ(?)を製作中です.(これは苦戦したので後に記事で書きますね(*´Д`))

それと最近始めたのが迷路探索ロボットのマイクロマウスです.(正式名称分からないので誰か教えてください)これってのは思っていた以上にガッツリ自分で製作するんですね.なめてましたすみません(;^ω^)

あとはぼちぼち研究室のホームページを編集しています.

・これまでにやってきたこと

お恥ずかしいところこれまで製作したものはほとんどないです(;'∀')

まぁ世の大学生なんて何もせずただ毎日を過ごしているものなんで仕方がないですよね(言い訳)

数少ないこれまでに製作した物といえばPythonの勉強をしていた時に作った電話帳(今となっては.pyファイルの所在すら不明.というかCUIだし既存品にかなうはずがなかった)とマイクロマウス関連のライントレーサ,ピッチシフター製作の前に作った美少女(!?)ボイスチェンジャー,研究室のホームページをスクレイピングを使ってメンテナンスフリーにした(尚,先輩と話して決めた内容と製作後の教授からの要求が合わなかったためなくなるかも!?ま!?割と苦労したのに...!!!)くらいです.

ツッコミどころはたくさんあると思いますが初心者なんでいろいろ苦労しました.ご愛嬌ください.

ライントレーサについてはハードの製作は行っておらずソフトから始めました(甘え)

当時のツイートが残っていたのでリンクを張っておきます.

 なんとか無事に1周してますね~走り切ったときは安心しました.よかった...

美少女ボイスチェンジャーは一応製作に成功した(ほんまか?)という感じです.

ホームページは見た目のわりに苦労したし,なくなるかもしれないので記事にして葬ります.(ハァ...悲しい...)

・これからしたいこと

長くなりましたがこれからしたいことは単純で,今やっていることを進めたいです.

もちろん研究を一番に頑張りたいですが,なんといってもマイクロマウスを早く完成させたい!!!ただし大初心者なので友人の手助けなしでは何もできないのですが,それでも一度作りきりたいですね.あとは,私のバイト先のシフト管理がものすごくアナログで,毎月上司たちがとても大変そう(自分も多少大変)なのでこれをどうにかして便利なものにしたいです.構想はある程度立っているのですが,まだまだ考慮しなければいけない点がたくさんあるので自分の勤めている間(3年間)のうちにどうにかしたいです.

・おわりに

ここまで読んでいただきありがとうございます.文が長くて疲れましたか?僕は疲れました.このブログでは自分の行ってきたことを忘れないようにアウトプットすることに重きを置きます.ブログの目標は,将来の自分の子供にこのブログを使って教育をしたいです("はてなブログをぶっ潰す!!"なんて人はいないですよね...?)まぁそんな未来のことを語る前に彼女を作ってその人と結婚するという最難関且つ最重要課題があるのですが,とりあえず今はそこには目をつぶりましょう....( ;∀;)

それでは急に悲しくなってきたので今日はここらで終わりにします.最後まで読んでいただき本当にありがとうございました.

 

次回からはもっと短く,分かりやすくまとめられたらいいなぁ