SunoAIで和風トランスを2曲生成して、さらにMixxx の Auto DJ機能でDJミックスしてみました. Claude Codeを活用してPythonスクリプトで前処理もしました.

【Trance Mix】鼓みの間 → Breath of the Mountain|142 BPM|Mixxx - YouTube

SunoAIで生成されたトランスの課題

今回、2つのSunoAIの生成曲をDJミックスすることを目指した.

SunoAIで素直にトランスを生成しようとしても、どうもポップスの影響を強く受けてしまう、これはダンスミュージック全般の課題かもしれない.

radio edit 型で DJ がつなぐための intro / outro が無い

DJミックスをするためには、intro/outroに相当する部分がないと、ロングミックスができないのだが、SunoAIだと曲のはじめに4つ打ちのキックをいれてくれない.

構成を指定するプロンプトで生成し直しても、intro にキックは入らなかった.

曲の中でテンポが揺れる

曲の最初と最後でテンポが変わってしまうクセがある. だいたい4bpmくらい上がってしまう. 1曲で完結するならばいいんだけど、2曲を接続しようとすると、テンポの揺れは課題.

Pythonスクリプトで前処理

生成された音源をPythonスクリプトで分析して、さらには前処理をすることで、DJミックスに使える形に編曲することにした.

楽曲構造の分析

生成された曲から情報を抜き出してyamlファイルに書きだした.

小節構造とテンポ解析

beat_this というOSSで拍と小節の頭を取った。これが以降すべての「小節番号」の基準になる。

テンポ推定は抽出した小節と時間との対応関係から自作で推定. テンポの揺れもこれで検出.

小節ごとの特徴量抽出

librosaという定番のツールをつかって小節ごとに情報抽出

  • 音量(RMS)
  • 低域(40–100 Hz)
  • 高域(6 kHz 以上)

構造の推定

だいたい8小節フレーズごとに音楽は遷移していく. 区間の推定は低域と音量の閾値から、intro / breakdown / break / groove / drop をAIで自動でラベル付けした。

その提案を元に、対話しながら人間の耳で楽曲構造を聞き分けた. ここは完全自動化ではない.

一定テンポ化

テンポの揺れに対しては、142 BPMで一定にタイムストレッチさせることにした. pyrubberband というOSSで処理.

処理は小節ごとに伸縮率を決め、曲全体を1回で伸縮させた.

Re-Edit

楽曲分析してわかったのは、これはポップスの楽曲展開だった. verse → サビ付きの drop を繰り返し、エンディングで締める. これをトランス音色でトランスっぽくしていた.

そこで、曲をバラバラにして使える部分を切り貼りすることにした.

ステム分割してintro/outroをつける

intro/outroのドラム部分をまずつくる必要があったので、曲をSTEM分割してdrums部分と先頭と最後に無理やりくっつけることにした.

DemucsをつかってSuno曲をステム分割.

違和感が若干あるが、ここは効果音でもいれれば隠れるかもしれない. 次回の課題.

冗長なブレイクを切り取って無理やりトランスへ

トランスの定番の曲展開である、intro->groove->breakdown->buildup->drop->outro をつくりたかった.

生成された曲は キックが抜けるブレイクが3回くらいあって、それを2回までに収めるために、無理やりbreak-buildupを抜いたりした.

大きなブレイク、ビルドアップからのドロップが曲で1つあればいい.

Mixxx

OSSのDJミックスソフト Mixxx のAuto DJモードで2曲をロングミックスすることにした. Claude CodeからのMixxx操作の自動化は、ボタン操作やつまみの制御はできなかったものの、設定ファイルを書き換えて起動などで、DJの準備だけ自動化できた.

Cue打ち自動化

Mixxxの設定は SQLiteというDBに保存されていることがわかったので、キューは、Mixxx の DB に直接設定を書き込んで打ちこむことができた. intro/outroのマーカーも個々に書き込んだ.

ただ、全自動でというわけではなく、AIがとりあえず打ち込んで、人間が確認と調整みたいなやりとりをした.

Auto DJ モードで起動

人間はスタートボタンを押しただけ.

感想

元々の計画では、DJミックス部分は人間がDJコントローラをつかってやるつもりだったものの、人間のスキル不足と不甲斐なさのため、DJミックスまでツールをつかうことにした.

2曲をつなぐだけで1ヶ月かかるという、ちょっとしたプロジェクトになってしまったものの、いったん手順が確立したら、SunoAIで量産した曲を radio editバージョンへの編曲はある程度自動化できるかもしれない.

今後の展望としては、この生成された曲で、人間がDJミックスの練習をして、動画を再アップロードしたいと思った. ここは自動化せずに人力で頑張りたい.