chatGPTと作曲してみる①
AIのアイデアを人間が形にしてあげるスタイル
音楽活動やら練習やらで、chatGPTを使えないかなーと思いまして。
作曲を一緒にやってみる、というのを自分なりに試しています。まだ途中経過ですが。
とりあえず、chatGPTはテキストしか吐き出せないわけなので、音源そのものを作ってもらうのは厳しいでしょう。
また、MML形式でメロディを作ってもらうのも、できなくはないけど、あんまり楽しい感じがしなかった。
そこで、歌詞とコード進行、どんな曲なのかの説明文を作ってもらって、そこからアイデアを膨らませて人間が曲にする、というプランに変更。
いつもと違うアプローチで作曲するためのネタにするということでもあり、AIのために人間が作業するということでもある。
抽象言語ソングライター"Bill"を召喚
普通に「なにか曲をつくって」って指示しても、微妙な結果になるので、どうしたら面白い結果が得られるかというのがGPT使う時の課題ですね。
いろいろ試す中で、落合陽一さんのオブジェクト指向プロンプトを参考にしたのですが、使いこなせなそうだったので、もう少し単純で良いかな、と下記のようなプロンプトにしてみました。
英語の方が性能が良いということで、英語で指示しています。僕は英語力ないので、それこそchatGPTやDeepLに翻訳してもらいながらなんとなくプロンプトを作っていきます。英語できる方、変なところあったら指摘してほしい。
ネオソウルと実験的な音楽に造詣が深い、才能あるソングライター"Bill"を生成してもらいました。
実は、以下の記事で行なっている方法だけなら、「抽象言語モデル」は必要ではないです。ただ、「chatGPT上で動く抽象言語モデルを作って」と指示してやると、いろんな初期ステータスをいい感じに勝手に設定してくれて、便利な手法なので今回はこれでいきます。
作曲の参考にする音楽を設定
10曲、好きな曲を挙げてもらい、どこが好きなのかも言語化してもらう。ちゃんと「ネオソウルと実験的な音楽が好き」という設定に寄せてくれているようで、リストアップされたのは
"On & On" by Erykah Badu
"Untitled (How Does It Feel)" by D'Angelo
"Window Seat" by Erykah Badu
"Didn't Cha Know" by Erykah Badu
"Redbone" by Childish Gambino
"Smooth Operator" by Sade
"Really Love" by D'Angelo
"Them Changes" by Thundercat
"River" by Leon Bridges
"Nakamarra" by Hiatus Kaiyote
こんな感じに。Billはエリカ・バドゥのファンのようです。
で、ここからが本番。
曲の情報を考えてもらう
「先ほどの10曲の情報をブレインストーミングして、新曲を作って。タイトル、歌詞、コード進行、テンポ、ムード、使用楽器、曲の説明文も短く付けて」と指示。
まあ、ネオソウルっぽい?7thコードとかsus4が出てくる進行になった。
普通に「なにか曲作って」「コード進行作って」だと、7thコードとかsus4、add9とか出てこないんですよね。この方法だとだいぶそれらしいものを作ってくれます。
ちなみに、この歌詞が良いのかどうかは今回は問いません。なんかそれっぽい気はする。あと、
ってプロンプト末尾につけて、曲のテーマを指示する方法もある。直接キーワードを使うな、としないと恥ずかしいくらいそのまんまのタイトルをつけてくれます。
コード進行のカスタマイズもできる
ヴァース、コーラス、ブリッジのコード進行、今回は全部同じですね。ちなみに、生成結果は毎回違うので、そうでない時ももちろんあるし、明示的にプロンプトで指示することもできますよ。
さて、コード進行のバリエーションは欲しいし、最近のネオソウルっぽくもっとエグいコード進行にしたいなあ。というとき、以下の方法はけっこう使えそうな気がしています。
要は、基になるコード進行をあげるから、テンション足したり、アッパーストラクチャートライアド使ったり、ツーファイブ使ってコード増やしたりして、複雑なコード進行にカスタマイズしてもらいたい。と言っています。
まだ試行錯誤中ですので、厳密に狙った通り動いてくれないこともある。特にツーファイブぶちこんでコード増やすのはたまーにしかやってくれない。いいプロンプトができたらまた記事書きます。
なお、今回のスレッドでは
こんな感じでコード進行をカスタマイズしてくれました。「Can you show me another version?」とか指示すると何パターンも作ってくれる。途中で「One more please.Insert two-five progression somewhere this time.」と言って、ツーファイブぶち込みを強制的にやらせたりもしました。
こうして今回は
Em7 F#m7 Gmaj7 A7sus4
Em11 | F#m7b5(b9) | Gmaj9(#11) | A7alt(#9)
Em7 | F#m7b5(b9) | Gmaj7#5 | A7b9#5
Em9 | F#m7b5 | Gmaj7#11 | A13(#9)
Em7add9 | F#m9 | Gmaj7#5 | A7sus4b9
Em7add9 | F#m9 | Bm7b5 | E7alt(#9) | Amaj7#5 | A7sus4b9
Emaj7#11 | F#m7b5 | G6/9 | A7b13(#9) | Dmaj7#11 | D7#5b9
おお、なんかそれっぽいコード進行出てきた。違和感強めくらいのが欲しかったので、いいぞいいぞ。
こういうのも、Billのような抽象言語人間を設定するなりして、前提となる知識レベルや方向性が定まってからやらせる方が、出力のクオリティが高いようです。
あとは人間(僕)が作業するだけだ!
というわけで、ここまで来ればもう曲が聴こえてきましたね?サラサラっとそれを具現化するだけです。人間が。
…いや、そんな簡単ではないですね。ただ面白そうなので、これから実際にこの曲"Electric Soul"を作ってみようかと。
なお、僕は実はソウル、ブラックミュージックにそんなに詳しくないので、Billのフェイバリット10曲は一応一通りチェックしますが、あくまでも僕がBillの説明から妄想した音楽になると思いますので悪しからず。
Billにはちゃんと許可をとりましたよ。
この記事が気に入ったらサポートをしてみませんか?