この記事は 夏のブログリレー 30日目の記事です。
こんにちは。Cd_48です。普段は作曲をしたりサウンドデザインに明け暮れ変な音を錬成したりしています。

世はまさに
Twitterを見ていると、個人でVSTプラグインを作成している人を多く見かけるようになりました。
全てがそうかはわかりませんが、ほとんどがAIを駆使して作られたものでしょう。
とりあえず実際に動くものを作ることが簡単にできるような時代になったということですね。
ならば、私のようなプログラミングの知識もWebやアプリの知識もほぼゼロな人でも、欲しい機能をもったツールを自作できるんじゃないかということで、ChatGPTを使っていろいろやろうと思います。
作りたいもの
今回はWavetableエディターを作ってみます。
権利周りの話がめんどそうなので配布は今のところ考えていません。欲しくなったらAIに頼んでください
私はソフトシンセサイザーが好きで、楽曲制作ではよくVitalやPhase Plant、Currentといったシンセサイザープラグインを使います。
こいつらはそれぞれ独自の強みを持っていますが、共通しているのはどれもWavetableを扱えるシンセだということです。
Vital、CurrentのWavetable編集機能はとても優秀ですが、Phase Plantほどの自由性がありません。
ですが、結局Wavetableをいじって音を作るのであれば、そのWavetableを自作してしまえばいいわけです。
どのシンセもwavファイルをWavetableとして読み込めるので、そのwavファイルを編集するツールを作ろう、というのが動機です。
「VitalにもWavetable出力できる機能あるからそれ使えばよくね?」とこれを書きながら思ったのですが、Vitalはwavを読み込んだとき、振幅と位相をフリーハンドで編集できないんですよね。

しかし今回できたツールではそれを克服しているためこの時点で使う価値があります。やったね
それに、大元の波形編集機能さえできてしまえば追加でいろいろな機能を持たせられるはず(実際そうでした)と考えていたので、私のAIとキーボードをを叩く手は止まりませんでした。
作ってみよう、否、作らせよう
最初は様子見程度に考えていたので、ChatGPTの無料プランで作り始めました。
本当にアプリの類を作ったことがなかったので、まずは設計?とやらを一緒に考えるところから始めます。

これがこのアカウントでの初めての会話で、挨拶も何もなしに始めてしまいましたが、普通に自分がやりたいことを大体理解してくれました。すごい
しかも、なんとなく悩んでいた「アプリとして作るのか、webで動くようにするのか」という点についても、何も言わずとも提案してくれました。
書きぶりからどっちでもいけそうですね。今回は完全に個人的な使途しか考えていないのでアプリにします。

使用する技術の選定までやってくれました。が本当に知識がないので言いなりになるしかないです。
挨拶もなしに会話を始めたやつに最善の提案をするか?と当時の私は疑う余地もなく、そのまま作り進めてもらうことにしました。
そこから10分もせずに初版のアプリが完成しました。すご

見た目がちょっとイマイチですね。あと名前もなんか普通。
ですがとりあえず機能がしっかりしていればいいので、見た目はいったん後回しです。
とはいえ見てわかるとおり、SerumやVitalのような振幅と位相の編集画面はなく、できるのは正規化、DC除去、あと謎の端点を滑らかにする機能のみ。
無料ならこんなもんかと思いつつ、ここから欲しい機能の実装をお願いしていきます。
機能を増やす

なんやかんやあって振幅と位相の編集ができるようになりました。
画面下部に見えますが、なんと最初は一つ一つの倍音にゲインを数値で入力して編集するように実装していました。
1フレームに512倍音、それが最大256フレームもあるwavetableの倍音一つ一つをちまちま編集していたら日が暮れます。
Serum、Vitalのような編集画面にして!とお願いしたはずなんですが、まあ有料プランにしていないのが悪いかと思うことにしました。詳しく仕様を指定したらちゃんと作ってくれたのでOKです。
あと地味にうれしいポイントとして、振幅・位相表示に線形スケールと対数スケールを選べるようにしました。
こういう機能をお願いするだけでサクッと作ってくれるのはありがたいですね。
デバッグもしてくれる
ここで試しにwavetableを書き出してみたのですが、書き出したwavetableをSerumに読み込んだところきれいに鳴らず。
このエラーについてもChatGPTに聞いてみました。

確かにSerumのwavetableは、wavetable positionの上限が256以下のものもありますね。(Default Shapesは9)
さらに、Serum2でのwavetable編集UIをみると、wavetable positionが256まであるwavetableでも、実際には少ないフレーム数のwavetableを滑らかにつないで256フレームにしているものもあります。
Vitalだとフレーム数を気にしないので盲点でした。
VitalやSerumで意図しない挙動が起きたら、とりあえずマニュアルを見たり、ほかにも実験をして自力で原因を突き止める癖があり、今回のエラーも15分くらい自力で格闘していました。
ですが、これもAIに聞いたらええやんと気づくのは時間の問題でしたね。
ひとまず問題点が洗い出せたので、エラーの解決をお願いしようとしたところで利用制限に達してしまいました。

金の力
これから機能を追加すれば実用的なものにはなりそうだけど、ちょっと開発に時間がかかりすぎるな~と思っていた矢先に、新モデル「GPT-6 Astra」が発表されました。
それに加え、課金プランであるPlusユーザー以上はAstraのリリースまで毎日利用制限リセットするよみたいな情報を見た気がしたので、上位モデルを使わずにプロダクトを諦めるのはなんか違うかと思いとりあえずPlusまで課金してみました。

課金してから半日くらいかけてこんな感じになりました。
上の画面は編集ウィンドウで、Vitalのような波形編集をノードベースで行えるようにしています。
これにより、Vitalのノブの機能(Inharmonic Stretchや、Spectral Phaserなど)を一度に複数かけられるようにしました。嬉しい!
他にも、DistortionノードによるSoftClip,HardClipや、多種多様なFilterなど基本的な波形編集エフェクトも実装されました。
課金してからは若干賢くなったような気がします。
UIはどうしても微妙になりますが、欲しい機能を即座に理解してくれるし、それの実装もスマートに感じました。
実際書き出したwavetable(実際にはwavファイル)はこんな感じです。
元のwavetableは、VitalのGlorkglunkフォルダにおそらく元から入っているAlternating Harmonicsです。ここに貼ると二次配布とかになりそうなので自分で鳴らして比較してみてください。
ふりかえり
開発には結構時間がかかった気がします。
開発初期の会話の時点で必要そうな機能のリストアップをしてくれていたので、一つ一つの実装を詳細にお願いするより、いったんできるところまでやってとお願いした方が時短になったかもしれません。
とはいえある程度は実用的なものが作れたので満足です。
個人で、しかも開発の知識不要でここまでできるとなると、楽曲制作のスキルアップにはいろんな手段を取れるようになるな~と思いました。
では
今月は気が向いたら開発の続きをしてみます。
気になった人はやってみる価値があると思います!
明日のブログリレー担当者は@HokubuRailway,TwoSquirrelsです。お楽しみに!
