ボカロ(作るところから)はじめました


今日からボカロを始めることにした。もちろん、ボカロを作るところからだ。ボカロを含めて音源も自作する。楽器(ハード)も自作する。
音楽理論も自分で構築しなおす。自動作曲のためのプログラムも作る。そうして、やっと自分だけの音楽が完成する。とりあえず、目標はそこだ。


■ ボカロを作るとは?


初音ミクに代表されるようなボーカロイドは、「あ」「い」「う」など、人間がそれぞれの文字を発声したものを録音しておき再生しているだけである。つながりが不自然なところは二文字、ときとして三文字つなげたファイルも持っている。ただそれだけである。私はそういうことをしたいわけではない。声を一から作るところからだ。


■ スーパーファミコンDSP


順序立てて話そう。


私は高校生のときにアーケードの麻雀の移植のために音声合成の処理を書いたことがある。*1
このプログラムは実際には世に出なかったわけであるが、私はそれ以前から、音をプログラムすることに関して強い関心があった。


Falcomの『イース』の音源ドライバーを中学のときに夏休みを丸ごと潰して解析したのも音に対してすこぶる興味があったからだし*2、BM98を作ったことにしてもその延長線上にある。私はプログラム以上に音に対しての興味があった。


2004年ごろにソニーPS3の開発に際し、PS1/2のエミュレーションレイヤーの実装のための人員募集をしていた。そういう仕事は大好きなので、応募しようかと思ったのだが、その給料があまりにも安く、当時の自分の給料の何分の一かになってしまうので、ずいぶん悩んだのだが、ついに応募はしなかった。ただ、そのときは応募も本気で考えていたので、小手調べにスーパーファミコンDSPをソフトウェア実装してみた。


スーパーファミコンサウンドを一度でも聴いたことがある人は、耳が腐ってでもいない限り、あれがとても特殊なサウンドであることがわかるだろう。ファミコンのそれとは一線を画する、そしてそのあとブームとなるFM音源とも異なる、骨太のサウンドである。実際、FM音源全盛期にスーパーファミコンのゲームを移植しようとした会社が、FM音源のパラメーターをどう調整してもスーパーファミコンっぽい音が出せなくてとても苦労したという話は枚挙にいとまがない。


要するに、スーパーファミコンDSP(サウンドチップ)とは当時の歴史のなかに本来、技術的に存在してはおかしいようなオーパーツそのものなのである。


何故こんなオーパーツがこの世に存在したのか。実は、このDSPはのちにソニー(SCEI)の社長にもなる久夛良木さんが手がけたものなのだ。*3



久夛良木さんレベルの超天才エンジニアの手がけたハードは自分の手でエミュレーションレイヤーを実装してみて初めてその設計思想、素晴らしさが実感できるわけである。私はもちろん、久夛良木さんレベルのエンジニアではないが、しかし、プログラムを書く能力は人並み以上にあるから、久夛良木さんのDSPを自分の手でソフトウェアで再実装することが出来た。誰しも感動する小説に出会えたときには自分に文字を読む能力があり、そして小説の内容を理解できる能力が備わっていたことに感謝するだろう。それと同じ感動がそこにはあった。あのときだけは、自分がプログラムを書く能力が備わっていたこと、そして、久夛良木さんの天才性の一部であれ、理解できたことに対して神様に感謝してやまなかった。


スーパーファミコンDSPのどこがそんなに優れているのかについてざっと書いておく。本当は、この部分は本記事にはあまり関係がないのだが、ここを書いておかないと「やねうらおめ、また内容のない薄っぺらい記事を書きやがって!本当はスーファミDSPのことなんか何も理解していないくせに!」などと勘ぐる輩が出てくるので、あえて書いておく。
※ 技術的な内容なので、興味のない人は読みとばしてください。


スーパーファミコンDSPの公称性能はこうなっている。*4



上の説明は今ひとつわかりにくいが、DSPとは別に制御用のチップが載っている。6502を拡張した命令セットを持ち、音源ドライバーなどはここに配置する。この音源ドライバーで結構いろいろなことが出来てしまうので、スーファミサウンドはゲームメーカーによって音色がずいぶん違うと言われるゆえんである。


・BRR圧縮された波形データの復元


事前にサンプリングした波形データを復元する機能。PlayStationで使われている圧縮アルゴリズムと同一である。*5


・ADSR


ADSRは、Attack、Decay、Sustain、Releaseの頭文字で、FM音源に見られるようなエンベロープジェネレーターであるが、A,D,S,Rの値はそれぞれ4bit、3bit、5bit、3bitで指定する。(そのあと表引きして実際のA,D,S,Rの値が設定される) 併せて15bitだから16bitに収まっている。いまどきなら、それぞれの値を直接設定できるようにするところだろうが、当時はメモリがもったいないのでこういう設計が好まれた。


ところが、このADSR機能を使わずに直接gain(≒ボリューム)を変更するモードもある。実のことを言うと大手メーカーのスーファミ用の音源ドライバーはADSRモードではなく、こちらのモードを使ってあるものが多い(と思う)。自前の音源ドライバーでADSRよりもっと細かな制御をしたほうが、サウンドに広がりが出てくるからである。なのでADSRはこのDSPの代表的機能ではあるが、スーファミサウンドの特徴ではないと私は考えている。


ガウス分布補間


指定した4点を曲線で補間する機能。実装的にはガウス分布テーブルを用いている(表引きしている)ので正確な補間ではないし、さらに計算資源があるならスプライン補間したほうが歪みのないサウンドになるし、いまのPC用にソフトウェアで実装するならそうすべきところではあるのだが、良くも悪くもこの“歪み”自体がスーファミらしいサウンドを形成していると思う。


・ディレイ


ファミコンにはディレイがなかったのでこれは大きな進歩。久夛良木さんの発言によると『ファミコンについてはサウンドトラック4本や音のディレイがないことから「そんなもんで音楽なんてやれませんよね」「普通の人はそれで感動するかというと、ぼくは感動しないと思う」「クリエイターがやりたいと思ってることがやれるかどうかというのがキー」』*6


・リバーブ(次数8のFIRフィルタ付)


バーブにFIR(有限インパルス応答)フィルタ*7までつけてしまうのが恐ろしい。ここの「次数8」というのは、パラメーター(係数)が8個指定できるという意味。FIRフィルタ自体はデジタルフィルタとしては基本的なものなので説明は割愛。


スーファミサウンドまとめ


結局のところ、上記のような当時としてはかなり高機能な処理能力を備えたDSPと、このDSPの制御用チップ(ここに各ゲームメーカーが独自のサウンドドライバーを載せた)との組み合わせによりスーファミらしいサウンドがもたらされたわけである。


■ オリジナルのボカロを作るとは?


もうここまで説明すれば話は見えただろう。今回、ボカロを自作するわけであるが、まずそのためにスーファミDSPのようなソフトウェア実装のサウンドレイヤーを用意する。まあ、人間の肉声に近いサウンドが欲しいわけで、スーファミDSPよりは少し高機能なものにならざるを得ないが。また、ここは将来的にハードウェア化するかも知れないので、この部分はそのへんも見越しておく。


次に、このDSPに対してプログラムできる必要があるのだが、DSP制御用の命令セットを用意して、その命令によってプログラムすることにする。(将来的なハードウェア化を視野に入れているため)


あと、この自作ボカロをライブで使うような用途を考えているため、この自作ボカロをリアルタイムに歌わせることが出来るような楽器自体を作らなければならない。そのへんもすでに考えてある。


かなり早口な歌でも訓練次第ではリアルタイム演奏が可能である、画期的な楽器(音楽的なデバイス?)となる予定だ。


■ 音楽の自動作曲とは?


ついでだからもう少し話を進めよう。コンピューターによるアルゴリズム作曲(自動作曲)についてである。この分野の近年の技術的進歩はめざましく、論文もたくさん出ているし、アルゴリズム作曲は実用的になりつつあると思うのだが、私はそういう方向性でやりたいわけではないのだ。


作曲をやっている人にはわかると思うけど、どこかの段階で対位法とか勉強するわけだ。二声対位法、三声〜八声、厳格対位法、模倣、二重対位法、フーガetc…。そうするとその手の教科書には「禁則」(こういう進行は良くない)が延々と書いてある。和声に関しても、ある程度基礎が出来たのちに、いわゆる芸大和声(asin:4276102057)あたりから勉強するわけだが、「禁則」のオンパレードである。そして、興味深いことに本によって何が「禁則」であるかは定義が異なる。


じゃあ、そもそも「禁則」とは何なのか。
このように「禁則」とすることによって何が得られるのか。


結論的に言うと、その本を書いた人が想定している音楽(それは18世紀のものであったり、それ以前のものであったり、特定の作曲家のものであったりするのだが)が得られるということである。この部分を理解していないと、やみくもに「禁則」だけ覚えることに終始してしまい、自分の作る曲の音楽的な可能性を狭めてしまう。


要するに「禁則」とは、曲の生成アルゴリズムが何かしらあるとしてそのためのルール集合の一部だと考えるとわかりやすいだろう。


例えば、モーツァルトの曲を分析し、そのルール集合が得られれば、そのルール集合からはモーツァルトの曲っぽい曲が自動生成できるということだ。


しかし、自動生成と言っても、単にルール集合に書かれているルールを順番に適用していけばいいという単純なものではない。例えば、前の音符との次の音符との接続される形に良さの点数がつけられるとしたら、その点数を最大化したい。そして一曲通してその点数の合計が最大になるような曲にしたい。そうならないときは前の音符を消して、また別の音符に置き換えて…という作業を繰り返す必要がある。


実はこの部分はコンピューター将棋の探索と全く同じなのである。音符一つ(音符の高さ・音符の長さ)が将棋の指し手に相当し、音符を一つ置くことが将棋ではその指し手で局面を進めることを意味する。将棋で読みのなかで局面をいったりきたりするが、音符を足したり、消したりするのはそういう理由からである。そして、将棋であれば最終的な点数(将棋であれば最善応手列≒読み筋)の末端局面の評価値が最大になるような現局面での指し手を探すが、曲作りのときも、最終的な点数が最大となるような音符の並びを探し出せば良いのである。


つまり、自動作曲は実はルール集合さえ与えれば、コンピューター将棋の探索部によって解決できるのである。


これは何も偶然の一致ではない。人間の知的作業のほとんどは、何らかの点数を最大化するという、探索を伴う最大化問題に帰着されるので、作曲行為自体がコンピューター将棋の探索の問題に還元されるのは何も不思議なことではないのだ。


■ 作曲のためのルール集合


では人間は何もしなくても曲が出来上がるのかと言うとそれは違う。作曲のためのルール集合自体は人間が考えてやる必要がある。
ルール集合が同じであると似たような曲しか出来ないし、そこがまさに人間にしか出来ない知的作業と言えるわけである。


例えば、坂本龍一(織田信長に「さん」をつけないの同様、歴史レベルの偉人なので敬称をあえて略す)の作曲のための方法論として、自分が考えた作曲アルゴリズムに基づき、自分を作曲機械だとみなしてそのアルゴリズムにより曲を生成し、その曲の良し悪しを音楽家坂本龍一が評価し、そして作曲アルゴリズムの修正を行なうというフィードバックループにより作曲するという主旨のことが『坂本龍一の音楽』(asin:4487801036)に書いてあったと思う。(うろ覚え)


坂本龍一が本当にそうやって作曲しているのかどうかは私は知らないが、そういう視点というのが面白いと思っていたし、この「自分を作曲機械だとみなしてそのアルゴリズムにより曲を生成する」という部分は、私のプログラミング能力であればコンピューターに完全に肩代わりさせることが可能だ。


そうなってくると、「自分が考えた作曲アルゴリズム」が問題となる。従来のアルゴリズム作曲の論文では、この部分が固定に近い形であったので、同じような曲しか作れなかった。自動生成される曲の完成度はともかく、私にはその部分が大いに不満であった。


私は特定のジャンル、特定の種類の曲を大量に生成したいわけではないので、上記のようなフィードバックループをなるべく短い時間で回したいのである。そうすることにより短い時間で自分の作曲アルゴリズムが磨かれるわけである。


そして、最終的にはこのループ自体を少しプログラムと音楽に対して理解のある人であれば誰もが体験できるよう、自動作曲のためのプログラミングフレームワークとして公開したいわけである。


■ まとめ


ということで、私の当面の目標は以下のような感じである。(何年かかるかは知らん)


・ボカロを自作(そのために自分で設計したDSPをソフトウェア実装するところから)
・音源を自作(自分で設計したDSPに対する制御プログラミングにより)
・ボカロをライブ演奏できるような楽器を自作
アルゴリズム作曲とそのフレームワークの作成


■ あとがき


何故突然こんなことを思ったのかと言うと、電王戦が終わったので友達に借りてる漫画を読んでいたわけである。その友達とは電王トーナメントのエントリーのときにやねうら王の開発者としてもう一人名前が挙がっていたと思うが、彼である。彼は、いつも私をその気にさせる。やねうら王も彼がいたから作ろうという気になったわけである。だから、やねうら王のエントリーのときに共同開発者として彼の名前を入れておいた。


今回、彼が持ってきた漫画は『ナッちゃん東京編 1―下町鉄工所奮闘記』 (asin:4088597001)という漫画で、下町の鉄工所で働く女の子(?)の物語である。この女の子がちょっとした天才で、創意工夫によって無理難題を解決していくわけであるが、これを見ていたら昔のことを思い出したわけだ。


私は小学生の段階ですでに仕事としてやっていける程度にはプログラミング能力があったわけであるが、大学を卒業するころにはプログラミング自体に少し嫌気が刺しており、これを職業にするとプログラミングのことが嫌いになってしまうと考えて、プログラミングとは全く違う分野(製図設計)の仕事に就いたわけである。正直に言えば当時は自分がプログラミングが出来ること自体が、本当に忌々しいと思っていたし、「こんな神がかったプログラミング能力とか要らねえんだよ!俺は、刺身にたんぽぽを乗せるような頭の使わない仕事がしたいんだよ!」と考えていた。


ところが、モノづくりの現場で働くうちに、創意工夫して製品を作る(さらに、それをお客様に届け、喜んでもらう)ということの素晴らしさを知ったわけである。『ナッちゃん東京編 1―下町鉄工所奮闘記』を読んでいると、そんな当時の自分を思い出してしまった。そうだ、何でも工夫すれば作れるんだ。俺には、神がかったプログラミング能力があるんだしな!と思ったわけだ。


※ このブログの愛読者ならば、「神がかった」とか書いてあっても「また今日もやねうらお節、全開だな」ぐらいに理解してもらえるはずなのであるが、そうでない人に言っておくと、「神がかった」というのは、ある種の冗談であり誇張表現の一種である。本気で自分のプログラムを「神がかった」などと思っている人がいたら、それは相当な大馬鹿野郎である。


そして、そのとき、音楽とコンピューター将棋との関係に気づき、点と点が一本の線でつながったわけだ。これは、もうボカロを(作るところから)やるしかないなと。


ちなみに、私の作曲経験だが、自分の作った曲が商用ゲームに使われたことがある。まあ、自分がプロデューサーだったんだから、自分の曲使おうが何を使おうが自由なんだけども。商用ゲームに使われたらプロだという定義だとしたら、私はプロの作曲家である。おお、これはなんか凄くずるい感じがするな!


「プロの作曲家になりたい人は、自分で商用ゲームでもプロデュースすればいいんだよ!」などとテキトーなことを言ってこの記事を終りにしたい。