2007年に「初音ミク」という歌声合成ソフトがブレイクしました。
そこで、わけもなく「音声合成のしくみ」を簡単に解説します。
とはいっても、VOCALOIDシリーズは手法が明かされていないので、
かなり推測が入っています。
その推測した部分が誤っていたので、
この色で加筆します(2008年3月29日)。
誤っている部分もそのまま残してあります。
また、手法もかなり明かされているようです。
ところで、結構たくさん図がありますが、
あまり正確ではありません。
また、内容そのものもかなり簡易化してあります。
初音ミクの場合、そこに音程や音の長さやその他いろいろも入ってくるので、
イメージとしてはこうなります。
「たぬき」と言っています。
(「pau」の部分は無音だと思ってください。)
これを時間方向に拡大してみると、こうなります。
似たような波形が周期的に連なっているのが分かると思います。
そして、連続的に変化していることも分かると思います。
これは「ぬ」の一部です(本当はもう少し前後に長い)。
また、「た」の「t」の部分はこうなっています。
雑音っぽい音だと見てとれます。
音声は、変化する周期波形と雑音っぽい波形でできています。
これは、推測になってしまうのですが、
「1」と「2」では合成方法がかなり違うはずです。
それぞれ「HMM合成法」と「素片接続法」なのではないかと思います。
その推測は間違いでした。
音声合成が専門の方からのコメントによれば、両方とも「素片接続法」だそうです。
文献を読んでも何がどちらに対応しているのかが分からなかったので、
この青い字の説明のところは基本的に、
「2」の初音ミクについてのものだと思ってください。
とりあえず、このページでは、
初音ミク(「2」)が使っていると思われる「素片接続法」から説明します。
そのあとでKAITOが使っていると思われる「HMM合成法」を説明します。
そういうわけで、KAITOについては説明しません。
こんな感じに、
これぞと思われる波形素片を持ってきて、
適切と思われる接続をします。
初音ミクは、一周期ではなくてもっと長いです。
一周期というのは、ここからここまでです。
(ただし本当はもう少し前後に長めにとります。)
この素片を「どう選ぶか」と「どう接続するか」が、
素片接続法のポイントとなります。
人間の声は、
「音韻性」と「その他(音の高さ・強さなど)」
に分けることができます。
「音韻性」というのは、
例えば「あ・い・う・え・お」のどれを言っているのか、
とかそういうことです。
音声合成でも、問題をまずこの二つに分けます。
そして、詳しい説明は省きますが、
「素片の選択」が「音韻性」を左右し、
「接続」が「音の高さや強さ」を左右します。
初音ミクの場合、
素片そのものに手を加えて音の高さを調節しているようです。
この素片ですが、
「子音→母音」の単位や、
「母音→子音」の単位で、
データベース化されていることが多いです。
初音ミクもそういう単位でデータベース化しているようです。
書き忘れていましたが、「母音→母音」もあります。
日本語の場合は母音が5で子音が20くらいですから、
200種類くらいのデータベースが少なくとも必要です。
でも、実際にはそう単純でもなく、中間の音なども考慮します。
注目すべきは、子音にかける割合が発音ごとに異なるということです。
なので、子音と母音の時間的な割合を考慮する必要があります。
声の聞こえ方はこの割合にもかなり左右されます。
この音の長さにも、声の自然さがかなり左右されます。
ビブラートなどは、この時間的な幅を揺らすことで作り出すことができます。
この音の高さなのですが、初音ミクの場合、
そう簡単には説明できない手法で作り出されています。
「周波数領域の調波構造の間隔をいじっています」と書いても、
よく分からないと思うので説明しません。
音の大きさは、単純に素片の大きさで決まります。
また、基本傾斜のような現象もあり、
日本語の場合はだいたい下がっていきます。
これを組み合わせると、こんな感じになります。
この音の高さの調整が声の自然さのかなりの部分を左右します。
初音ミクの場合、「周波数領域」で音の高さを変えています。
嘘です。KAITOについてはよく分かりません。
そういうわけで、以下の文章は「素片接続法」ではない音声合成の方法もあるのだ、
ということを説明しているにすぎません。
手法の名称に「HMM(隠れマルコフモデル)」という見慣れない用語が冠されていますが、
これについては説明しません。
音声に対する考え方は、素片接続法とほぼ同じです。
「音韻性」と「音源」の二つの組み合わせで、
音声を合成するのですが、
数学的なアプローチがまるで違います。
以下、素片接続と異なる部分のみを説明します。
声道の形状が変化すると、音韻性が変化し、
音源が変化すると、音の高さや強さなどが変化します。
音源の信号はかなり簡単なものになります。
代表的な音源の信号はパルス列(有声音)や白色ノイズ(無声音)です。
ただし、VOCALOID(1)がぴったりこういう方式かどうかは分かりません。
でも、だいたい似たような考え方のはずです。
VOCALOID(1)は素片接続法だそうなので、この説明は関係ないです。
要するに、音源が入力変数で、フィルタが関数で、合成音声が返り値だと思えば、
プログラミング言語を少しでも触ったことがある人は分かると思います。
ということで、細切れの音声合成をおこなっておいて、
あとでその細切れの音声をつなげるということをします。
ただし、一周期ごとの合成ではなく、
一定時間ごとの合成です。
フィルタは音韻性に対して最適になるように、
パラメータを選びます。
このときにHMM(隠れマルコフモデル)と呼ばれるモデルを使うことが多いので、
HMM合成法という名前がついています。
音声合成が専門の方のコメントによれば、どちらも「素片接続法」だそうです。