2020年11月8日日曜日

AI作曲をコードと数式を使わず説明してみる、その1

Waveファイルで音楽をディープラーニングさせたい!!

今現在、AIによる作曲の手段としてはgoogleのmagentaというライブラリが有名です。


これを利用した作曲手順についてはこちらに記事を書いています。
作曲家兼プログラマー 早川大地がAIによる作曲について語る:「人工知能で作曲、ここまで来てた!!」

googleが作ってくれたんだからそりゃあ有能に違いない、とmagenta を使って色々遊んではみたのですが、なにぶん残念なことに作曲については基本Midiがベースとなっているのです。
(ボーカル合成とかあるにはあるんだけど)

Midiファイルの例:「どの位置で何の音が鳴るか」が記録されたファイル


こうなってくると、作曲家の補助的な用法としては使えるかもしれないけど、リスニングの分野の実現性としてはどうなんだろうかと思うところなのです。

ということで、やっぱりなんといっても普段聴き慣れているWavデータを使って、自動作曲したいと思うのですよね。

Wav ファイルの例:普段PC上で耳にする音楽はほぼこれですね。



そこで、magentaに頼らずに1からモデルを作ってみることにしました、その過程で考えたことを通して、AI作曲についてなるべくわかりやすくまとめてみたいと思います。

AI作曲についてはなにが正解ということもないので、こんな考え方があるのだなあと思って思えれば。

もちろんこのアプローチですぐにまともな「作曲」ができるとは思えないけれど、リズムを変異させたりあらたな環境音を作りだしたり、と新たな作曲のヒント程度は作ることができるかもしれない。

というわけで数回にわけて、Waveファイルを対象としてディープラーニング作曲・AI作曲にチャレンジしてみたいと思います。

できるだけ、技術畑の人だけでなく音楽畑の人にプロセスを理解してもらいやすいようにかければなと思っております。

音楽を分析する際のポイント


同じようにWaveファイルを分析するものとして、代表的なものに音声認識があります。

音声認識は母音や子音の特徴量を認識して、これが「Ah あ」だとかこれが「kah か」だとか、分類していく作業です。

ところが音楽の場合は単なる音声認識と違ってさらに考慮すべき構造がもっときっちりとあるのです。

  • テンポの正規化
  • 小節の構造
  • 楽器の構造

構造があるということは手がかりがあるということです。

これらの構造を利用してコンピュータが学習することができれば!!

と期待できますよね。

まずは音の「特徴」について考えよう。


例えば誰かの歌声を覚えるとき、人は、無意識のうちにその特徴を覚えていると思います。

声色の雰囲気だったり、のどの使い方だったり、高さだったり、しゃくりあげや、語尾の発生の仕方だったり。

ちなみにものまねがうまいひとなんかはこれが上手なのですよね。
「特徴」となる部分を上手に掴み取ることができる、天性の学習能力がある、とも言えるでしょう。

それに類することをコンピュータ上でも行い、データを整理し学習しやすくする、というのがデープラーニングのプロセスの第一歩です。

これを「特徴量の検出」という言い方をします。

ただしそれを人間がやるのと違う点は、音楽を物凄い短い時間の単位に区切り(0.001 秒ごと、などなど)そしてそれを、物凄い数やるということでしょうか。

音とは何か

さて、いったん基本に立ち返って、音とは何か、という話。

まずは以下二つの波形を見てみましょう。


4cos10πの波形




3cos6πの波形




横軸に1(秒)をとり縦軸に大さ(振れ幅)をとったグラフです。

ずいぶん単純なグラフ(波形)ですね。

さて、この周波数と、振幅(振り幅)はいくつでしょうか。

そして、周波数=1秒ごとに揺れ動く(グラフと山と谷の数)とですので、最初のグラフは周波数が「5」です。(数えてみましょう、いち、にー、さん〜、し〜、ご〜・・)

そして、下のグラフの方も数えてみると周波数が「3」となりますね。

加えて振幅の大さがそれぞれ、4、3となっているのは見て取れますよね。(グラフの山のてっぺんをが縦軸のどこに来ているか、を見れば良いでしょう。)

そして、どちらの式もXcosYπという形で表されます。

上のグラフは、4cos10πで下のグラフは3cos6πですので、XとYに入る数字が変わっているだけですね。

ちなみにこの場合Xが振幅となり、Y の二分の一が周波数となりますので、グラフを見ずとも、式をみるだけで、振幅と周波数がわかります。

これは「コサイン波」と呼ばれる波形、これも立派な「音」になります。(シンセサイザにも入ってますので、ご存知の方も多いかと。)

この音は非常にシンプルな「プー」とか「ポー」とかいう素朴な音。

コサイン波同士を足し算して音を作る


そして、これら波形は足算・引き算、四則演算をすることができます。

たとえば、最初の二つの波形を足し合わせると、以下のような波形になります。

4cos10π+3cos3π


足し方は簡単です。

上のグラフでは横軸(時間)が0.0の時に縦軸(振幅)は4となっていて、下のグラフでは横軸が0.0の時に縦軸は3となっています。

ですので、足算したグラフでは0.0のところに4+3=7が入ります。

この要領で順次足していけば良いのです。

とまあ二つの単純な波形を足算しただけですが、ずいぶんと複雑な形になりましたね。

実際にはこれ以上に無数の波形が足し合わせられることで、様々な複雑な音が生成されます。

鳥の声も人の声も、楽器の音も、もちろんシンセサイザも、すべて単純な波形の重ね合わせです。

となると、それぞれ重なり合った波形を分析していけば、必要な音の「特徴量」が掴めるのでは・・・・なんて気がしてくるのではないでしょうか。

この技術の延長に「イコライザ」のようなみなさんお馴染みのものがあり、まずは特徴量の学習はそこからのスタートということになります。

次回以降は特徴量の抽出方法について試行錯誤していく話となります。

0 件のコメント:

コメントを投稿