普段、曲を作るときはコード進行から考えることが多いのですが、なかなか「これだ!」と思える進行が出てこないこともあります。特に私の好きな、ちょっと物悲しくて美しい曲。単純なダイアトニックコードだけだと少し物足りない。でも、テンションコードばかり並ぶと、今度は濃すぎて疲れてしまう。
だったら、自分好みのコード進行を提案してくれるアプリを作れないかな?そんな思いつきから、ChatGPTと一緒に「Chord Progression Generator」を作ってみることにしました。
同様の機能を持ったプラグインは持ってます。でももうちょっとサクッと使えるやつが欲しかったのと、ときどき目にするネットの記事。『AIに助けてもらってこんなアプリが作れました!』みたいな。自分もチャレンジしてみたいという気持ちがあったんです。
プログラミングは完全なド素人です
最初に書いておくと、私はプログラミングについてはまったくのド素人です。AIに提示されたPythonについても『名前ぐらいは聞いたことある』状態でした。コードなんて書いたこともないし、意味ももちろんわかりません。こんな状態で本当にアプリなんて作れるのか?
とりあえずPythonをインストールするところから手助けしてもらいスタートです。手助けといっても提案や実作業はAIがほとんどやってくれるので、実質私は方向性を決める係みたいなものです。『ボタンの配置はこうして』とか『この機能をもうちょっとこうしてほしい』など、自分は何も動かないのに口だけは挟んでくるイヤな上司のような状態です😓
そんな感じで最初から完成形が見えていたわけではなく、実際に動かしてみては「ここは違うな」と直すことの繰り返しでした。
初期バージョン
最初期のバージョン。キーを選んでGenerateボタンを押すとコード進行の候補が出てくる。ただし選べるキーはA minor、C major、E minorの3つのみ。でもド素人の私にとっては、ほんの15分程度のやりとりだけでこんな画面が作れてしまうことにビックリです。

そして今現在の画面
まず画面を見てください。ちょっとかっこよくなって機能も増えました。
ここまでたどり着くのにだいたい3~4時間でした。そんな短時間でここまでできるなんて本当にビックリだと思いませんか?
このページの一番最後に実際に動かしている動画もありますので、よければ見てみてください。

軽く機能紹介
このChord Progression Generatorでは、まずキーとMajor/Minorを選択できます。さらに、曲の雰囲気に合わせて以下の4種類からMoodも選べるようにしました。これによって出力されるコードの雰囲気が変わります。

ボイシングも選べるようにした
同じコード進行でも、音の積み方によって印象はかなり変わります。そこで、ボイシングも選べるようにしました。

Root Positionは基本的な形。Smoothはコード同士の音の動きをなるべく滑らかにして、OpenやWideでは音域を広げます。Ambientは、パッドなどで鳴らしたときに広がりが出やすいボイシングを意識しています。
最初はテンションコードが多すぎた
アプリを作り始めた頃は、提案されるコード進行にテンションコードが多く入りすぎていました。maj7や9thなどが入ると、たしかにオシャレにはなります。ただ、毎回のようにテンションコードが並ぶと少し濃すぎて聴いていて疲れることもありました。
そこで、普通のダイアトニック3和音や7thコードを中心にしながら、ときどきテンションコードが混ざるように調整しました。普通のコードがあるからこそ、たまに登場するテンションコードが効いてくるのかなと思っています。
コードを固定しながら変更できる
生成されるのは4コードの進行です。気に入ったコードはLockして残し、それ以外のコードだけをChangeできます。
コード進行を生成したときに「2番目と4番目は良いんだけど、ほかが惜しいなぁ」ということは結構ありますので、全部を作り直すのではなく気に入った部分を残しながら試せるようにしました。
Changeを押しても数種類の似たコードしか出てこず、普通のダイアトニックコードが候補に現れにくいという問題もありましたが、そのあたりも実際に使いながら調整した部分です。
テンポを変えてコード進行を試聴
テンポをSlow、Mid、Highから選び、生成したコード進行を再生できます。

また、コードカードをクリックすると、そのコードだけを試聴することもできます。実際に鳴らしてみると、「思っていたより明るいな」「このボイシングなら使えそう」といったことが分かります。
MIDIをDAWへ直接ドラッグ
今回、特に実現したかったのが生成したコード進行をMIDIとしてDAWへ持っていく機能です。DAWへ移すまでに何度も保存や読み込みが必要だと面倒なので。最終的にはアプリからDAWへMIDIを直接ドラッグできるところまで完成しました。
生成する。試聴する。良ければそのままDAWへドラッグする。ここまでつながったことで、ようやく実際の曲作りで使えるツールらしくなってきました。

不要だと思った機能は外した
開発途中には、Reharmonizeという機能も付けていました。例えばAmというコードにロックを掛けてReharmonizeを押すとAm7になったりするアレです。
ただ、実際に使ってみると、今の段階では少し機能が多すぎるように感じました。まずはコード進行を作るGenerateと、確認するためのPlay。この二つを中心にしたほうが、アプリの目的が分かりやすくなります。
機能は多ければ多いほど良いと思いがちですが、実際には使わないボタンが増えると迷いやすくなります。作りながら不要なものを外していくのも、アプリ開発の大切な部分なのかもしれません。
見た目も少しずつ改善
機能だけでなく、画面の見た目も少しずつ整えました。コードをカード形式で表示し、マウスを乗せると表示が変わるホバー効果も付けています。

せっかく自分で使うなら、いかにも練習用プログラムという画面より、触っていて少し楽しくなるものにしたいところ。最初から完璧なデザインではありませんが、「もう少し見栄え良くしたい」と相談しながら調整してきました。
だんだんアプリらしい姿になってくると、それだけでも面白くなってきます。
それ以外の機能紹介
- アンドゥ
- LOOP(再生が循環する)
- Variation(Lockしたコード以外を再Generate)
- コードカードの順番入れ替え
- ベース音追加
ChatGPTと作って感じたこと
今回の開発で面白かったのは、プログラミング初心者でも自分が欲しいものを少しずつ形にできたことです。もちろん、ChatGPTが出したコードを貼れば、何でも一発で完成するわけではありません。エラーが出ることもあります。思っていた動きと違うこともあります。新しい機能を加えたら、別の部分がおかしくなることもありました。
それでも、「何が起きたか」「本当はどう動いてほしいか」を伝えて修正を重ねることで、少しずつ完成に近づけられました。
まだまだ改良していきます
Chord Progression Generatorは、ひとまず実際に使えるところまで来ました。ただ、コード進行のバリエーションや、Moodごとの違い、ボイシングの自然さなど、まだ調整したいところはあります。
実際の曲作りで使いながら、「似た進行ばかり出てくる」「このコードはちょっと使いにくい」と感じた部分を直していくつもりです。完成品を最初から作るというより、自分が使いながら育てていく感じですね。
プログラミング初心者がChatGPTと会話しながら、どこまで自分好みのDTMツールを作れるのか。もう少し、この開発を続けてみようと思います。