クローズアップ現代で初音ミク特集


クローズアップ現代で「初音ミク特集」をやるらしく、番組のディレクター自らが捨て身で番宣をしている動画がYouTubeにアップされている。


2月28日(火)放送!「クローズアップ現代初音ミク特集」


ところで、私も高校のとき(20数年前)に某社からとある麻雀ゲームをPCに移植できないかと言われて、それを検討するために音声合成のプログラムを書いたことがある。


当時、音声合成と言えばCSM音声合成(CSM = Composite Sinusoidal Modeling : 複合正弦波モデル)が主流だったと思う。当時ゲームアーツで働いていた三橋正邦氏が開発したCSM音声合成システムが特に有名だ。『シルフィード』(1986年)にはじまり、『ぎゅわんぶらあ自己中心派』(1987年)、『ゼリアード』(1987年)・『ヴェイグス』(1988年)といったゲームで採用されていた。*1


CSM音声合成自体は結構古い技術で1979年ごろにはすでにあった。*2


CSM音声合成はデータのサイズは比較的小さくなるのだが、使いこなすのが技術的にハードルが高く、また、再生データーの生成のために離散コサイン変換をしないといけないので当時のパソコンではデータを変換するのにとても時間がかかった。あと、宇宙人がしゃべっているような声になるのもその特徴だった。


NRTDRV(+CSM音声合成)で「もってけ!セーラーふく」を作ってみた
D


私は当時、CSM音声合成はハードルが高いと判断し、普通のADPCM(Adaptive Differential Pulse Code Modulation)で再生することにした。ところがADPCMだとメモリを結構食うので当時のPC(16KBぐらいしかメモリが使えない)にはきつく、ビットレートを落とすか何らかの工夫をせざるを得なかった。


そこで私は同じ小さい区間を数回ずつ再生するという方法をとった。「あー」という波形はずっと変わらないと仮定できるから、小さな「あ」のサンプリングしたものを繰り返し再生させるという方法だ。子音+母音で構成されている音ならば、256バイトのデータ(区間)を5回再生して、次の256バイトのデータを5回再生して、またその次の256バイトを…みたいな方法で必要なデータ量を削減した。


そうやって音素ごとにつなげると一応は何かしゃべっているようには聞こえるのだが、音質はすこぶる悪く、しかし、何度もデバッグと調整のために聴いているとだんだん自分の耳が慣れてきて、「ああ、これくらいならまだ判別可能だな」とか思いながらチューンしていくと、やがてどんどん音声が崩れて行った。


それを麻雀ゲームの移植が出来ないかと私に相談してきた某社の社長のところに持って行って「こんな音質なら出来るんですけど」とデモして聴かせたのだが、その社長は宇宙人の声にしか思えなかったらしく、麻雀をPCに移植するのは無理だという判断になり、麻雀を移植する話自体はお流れになった。


いまにして思えば、その音声合成たるや、とてもひどい出来で、上の「もってけ!セーラーふく」の動画の音声以下の、「宇宙人のおもしろボイス集」とでも言うべきものに仕上がっていた。


私が大学に入ったころには、もうそんな自分の高校時代の黒歴史みたいな音声合成のことはすっかり忘れていたのだが、『C Magazine』(1994年3月号)にリコーの人が作った音声合成プログラム「VC2」というのが付録についていて、しかもそれが結構よく出来ていたので感動して、「ああ、いまのPCならメモリも潤沢にあるし(注 : 当時のPCのフリーメモリは数百KB程度でしたが、フリーメモリが数10KBの世界から移り住んできたのでそれが無限に近いメモリのように思っていました)、これだけメモリがあれば俺にも出来るんじゃね?」と思い、サクっと作ってみたのだが、どうも音素と音素のつなぎ目(たとえば、音素「い」と音素「く」を個別にサンプリングして「いく」という単語を再生させる)が綺麗につながらない。


ちなみに、Cマガに載っていたリコーのプログラムは、このつなぎ目も結構のパターンを持っていて、何やらうまくやっているようだった。


その記事の内容はよく覚えていないのだが、たぶん、
1) 「い」を再生して
2) 「い」と「く」との間の音を再生して
3) 「く」を再生する
といった感じだったのだと思う。1)と2)の音はクロスフェードさせる。すなわち、1)を次第に弱くしていき、それと入れ替わるように2)を次第に強くしていく。同様に、2)と3)の音もクロスフェードさせる。そんな感じ。


現代の音声合成技術がその当時からどれほど技術的に進歩したのかは私はよく知らない。このつなぎ目をなめらかにする部分が音声合成におけるひとつの大きなハードルだと思うのだが、そこはすでに超えているのだと思う。


私が初音ミクで不自然だと感じるのは、普通、人間だと直前の音を引きずることがあるのだが、初音ミクにはそれがないことだ。


直前の音を引きずるというのは、例えば、「water」という単語をネイティブスピーカーが /wˈɔːṭɚ/の/t/音を発音しきれずに/r/に近い音として発音するケースだ。(このとき日本人には「ワラー」と聴こえる) 同様に「writer」なら/rάɪṭɚ/の/t/が/r/に近い音になる。(このとき日本人には「ライラー」と聴こえる)


初音ミクにはこれがない。前の音を決して引きずらない。これは短所であり、長所でもある。特に、『初音ミクの消失』ではこれが初音ミクらしい早口言葉になっており、これが長所として活かされていると思う。


【PV完全版】 初音ミクの消失 DEAD END 【MotionGraphics】


それでは、音声合成では、どうやれば前の音を「引きずる」ことが出来るようになるのかという話になるのだが、人間の発声の仕組みに相当する物理モデルを組み立てて、それをシミュレーションしてはどうかと思う。声帯の筋肉に相当するパラメーターを動かしてみて、それが発声される音が狙った音素に近づくようにパラメーターを機械学習で調整する。


そこまで出来れば、あとは音を連続的に、変化させることは可能だろうし、声帯の筋肉をあまり無理せずに動かすように制約を入れれば、前の音を引きずったりするのではないかと思う。人間の発声の仕組みがどれくらい解明されているのか私は知らないので、適当なことを言ってるかも知れない。ごめん。


そんなことを考えていたら20年ぶりに音声合成プログラムを書いてみたくなった。


.