年末年始の時間をちょっと使って、自動で曲の BPM を一定にして House remix をつくるアプリケーションを Claude に書いてもらっていた。 https://github.com/hogashi/house-remix-engine
まだ手元で実行する形でしかやっていないものの、それなりに動いている。 FFmpeg と Node が入っていればいいっぽい。アプリケーションを立ち上げると、 HTTP サーバが起動して、素朴なアップロード画面が出てくる。好きな mp3 をアップロードすると BPM が揃い、 remix もできる、というものを目指している。
今のところ BPM を揃えるほう (quantize と言うらしい) はそれらしくなっている。まさに指定した BPM になっているわけではないが、 BPM のぶれが小さくなり、指定した数字に近い BPM になっているように見える。
remix をつくるほうは、用意したドラムループを付け足すだけの簡単なつくりなのだけど、ちゃんとリズムがあっているとまあそれらしく聞こえはする。ただリズムをあわせるのが至難の業っぽく、 BPM の正確な推定もうまくいっていないし、拍子の切れ目がどこかを見つけることが全くできていない (3拍目から始まる曲とかだとその分普通にずれる)。
しかし FFmpeg の無限のオプションを全く知らずに、できてない、こうなってて変、と言うだけでだんだんオプションを修正したりしてそれらしくなっていくので、学習されたモデルがえらいものだなと思う。それでも、時たま「さっきまでやってたこれはすっかりやめて別のアプローチに」と言いだし、人間が待てを差し込む必要がある (差し込めば軌道修正できるのでよくできてはいる)。
ここまで書いている通り、コードの内容を細かく見てはいない。やっとります、という表示をぼんやり眺めたり、何も見なかったりしながら、結局動いたかどうかだけでやっている。元来こういうものは調べながら自分でやりたいものだけど、そうやっているといつも全然出来上がらないので、諦めて肩代わりさせている。
最初はブラウザで Gemini にやり方を聞いていた。「簡単な方法と複雑な方法」を紹介され、ふーんと思って canvas モードでシュッと書いてもらった。よく読むと、複雑なほうは複雑なのでやりませんと言っていて、せっかく計算の速い計算機でやっているのに妥協していてもったいなかった。言って複雑なほうを実装してもらった。
途中からブラウザからコピペするのが面倒になって、ターミナルで Claude を起動して交代した。 1行でごく簡単に経緯を説明するだけで、 package.json や README を用意し、実装も直していってくれた。実際の動作は人間が mp3 ファイルを聞く必要があるので、 npm start してもらうところまで任せ、人間が mp3 をアップロード/ダウンロードして、どうなっているかフィードバックする、という作業になった。
特に BPM を一定にするという部分ができると、 70s くらいの曲を DJ で流すときにとても助かるな〜というのが原初のアイデア。おそらく世間には BPM を一定にしたり remix をつくったりするソフトウェアが存在して、みんな使っているのだろうと思うのだけど、それらも技術によってなされていることなので、実装したらできるのかな? (できるはずだな?) というのが今回の動機。あとそういうソフトにお金を払う前に、どれだけのものができるか試したかった。*1
試した結果、まあまあのところまではできることがわかって納得。 BPM 一定化技術としては、曲を細かく切ってから伸ばすか縮めるかしてくっつけるということをやっていそう。テンポの推定が具体的にどういう技術なのかは npm パッケージを読むとわかりそう。
remix は世間に色んな (AI を使った) サービスが存在するので、みんな何か頑張っていそう。既存の曲などの学習次第なんだろうか。コーディングのように、部分的に人間が関与する余地があると嬉しい気がする。
あと AI を会話しながらやっていったときの、会話の様子をうまくブログなどに残したいとき、みなさまがどうしているのか気になる。そのまま貼るには長すぎるし、体裁も空白が多くて変なので……。
はてなエンジニア Advent Calendar 2025 - Hatena Developer Blog 36日目の記事でした。