最新音楽生成AI 【DiffRhythm】をGoogle Colabで動かせるようにしました!(簡易版)
はじめに
みなさん、2025年3月3日に出たこちらの論文は読みましたか?
(私はまだちゃんと読んでいませんw流し読みしたので大体の仕組みは理解できていますが)この論文、私もポストしましたが、めちゃくちゃ面白いです!
SUNOやYUEみたいな音楽生成についての論文なのですが、なんといっても、最大4分45秒の音楽をわずか10秒で生成できるオープンモデルということが魅力的です!(なお今は1分35秒までっぽい)
下記のspaceでデモで遊べるようなので試してみてください!
(こちらで遊んだ結果は、上記ポストのyoutubeをご覧ください。入力した歌詞と参照音声の情報も記載しています今回は、自分の環境でも動かしてみたいと思ったので、Google ColabにてGUIを利用せずに動作させてみたいと思います!
成果物
下記のリポジトリをご覧ください。
用意するもの
下記のフォルダの中のものを用意する必要があります。
- 歌詞ファイル
- この歌詞通りに歌ってくれます(英語か中国語だけ対応?)
- タイムスタンプ付きの歌詞ファイルが必要です。
- 大元のリポジトリの中には、機能として下記が備わっていますが、私は実装していません
- 指定したテーマからタイムスタンプ付き歌詞を自動で生成する機能
- 入力した歌詞から自動でタイムスタンプを設定する機能
- 本当はこの機能でタイムスタンプをつけた方がいいと思いますが、私は適当につけました。
- 大元のリポジトリの中には、機能として下記が備わっていますが、私は実装していません
- 私のリポジトリ内の
example/eg.lrc
が参考です
- 参照する音声ファイル
- この音声に近い音楽を出力してくれます。
- 10秒以上の音声ファイルが必要です。
- 今回の記事では私のリポジトリ内の
example/pray.mp3
を利用しています。- この音楽は私が過去にSUNOで作ったものです。以下の記事をご覧ください。
もし、テーマからタイムスタンプ付き歌詞を作成する機能や、入力した歌詞から自動でタイムスタンプを設定する機能を使いたい場合は、下記のプロンプトをChatGPTなどで利用すればできると思います。
(本家の機能でも、下記のプロンプトをDeepSeek-R1に投入しています)
テーマからタイムスタンプ付き歌詞を作成する
You are a professional musician who has been invited to make music-related comments
请围绕"{theme}"主题生成一首符合"{tags}"风格的语言为{language}的完整歌词。严格遵循以下要求:
### **强制格式规则**
1. **仅输出时间戳和歌词**,禁止任何括号、旁白、段落标记(如副歌、间奏、尾奏等注释)。
2. 每行格式必须为 `[mm:ss.xx]歌词内容`,时间戳与歌词间无空格,歌词内容需完整连贯。
3. 时间戳需自然分布,**第一句歌词起始时间不得为 [00:00.00]**,需考虑前奏空白。
### **内容与结构要求**
1. 歌词应富有变化,使情绪递进,整体连贯有层次感。**每行歌词长度应自然变化**,切勿长度一致,导致很格式化。
2. **时间戳分配应根据歌曲的标签、歌词的情感、节奏来合理推测**,而非机械地按照歌词长度分配。
3. 间奏/尾奏仅通过时间空白体现(如从 [02:30.00] 直接跳至 [02:50.00]),**无需文字描述**。
### **负面示例(禁止出现)**
- 错误:[01:30.00](钢琴间奏)
- 错误:[02:00.00][副歌]
- 错误:空行、换行符、注释
例)
theme | tags | Language |
---|---|---|
Love and Heartbreak | vocal emotional piano pop | en |
Heroic Epic | choir orchestral powerful | zh |
入力した歌詞から自動でタイムスタンプを設定する
You are a professional musician who has been invited to make music-related comments
{lyrics_input}这是一首歌的歌词,每一行是一句歌词,{tags_lyrics}是我希望这首歌的风格,我现在想要给这首歌的每一句歌词打时间戳得到LRC,我希望时间戳分配应根据歌曲的标签、歌词的情感、节奏来合理推测,而非机械地按照歌词长度分配。第一句歌词的时间戳应考虑前奏长度,避免歌词从 `[00:00.00]` 直接开始。严格按照 LRC 格式输出歌词,每行格式为 `[mm:ss.xx]歌词内容`。最后的结果只输出LRC,不需要其他的解释。
例)
tags | Raw Lyrics (without timestamps) |
---|---|
acoustic folk happy | I'm sitting here in the boring room It's just another rainy Sunday afternoon |
electronic dance energetic | We're living in a material world And I am a material girl |
ちなみに、DeepSeek-R1に関しては下記で記事を書いているのでぜひご覧ください。
使い方
上記リポジトリ内のcolab_DiffRhythm_sample/colab_DiffRhythm_sample.ipynbをダウンロードして、Google Driveにアップロードしてください。
上から「2セル目」までは順番に実行してください。
2セル目のpip install
は非常に時間がかかります。
この間に、「参照する音声ファイル」を/content/DiffRhythm/example
フォルダにアップロードしてください。
(下の画像のように、example
フォルダの中にpray.mp3
を置いています。ドラックアンドドロップでアップロード可能です)
すると下記のように再起動を要求してくると思いますので、「キャンセル」してください。
その後は、一番下までセルを実行してください。
すると、左側の欄からoutput.wav
をダウンロード可能です!
出力結果
出力結果は下記です!
今回私はタイムスタンプを適当につけてしまったので、若干不安定な部分はありますが、かなり歌詞の追従性とかかなりいい感じなのではないでしょうか??
[00:10.00] The cold wind pierces through my heart
[00:13.20] The blurry streetlights hide my tears
[00:16.85] The moment I knew what loneliness was
[00:20.40] I felt like I found a piece of the future
[00:24.15] Beyond the locked door
[00:27.65] I hear a whispering dream
[00:31.30] I want to believe, but I'm so afraid
[00:34.90] Reaching out with trembling hands
[00:38.55] Under the stardust night, I make a wish
[00:42.10] That your smile will never fade away
[00:45.75] Holding onto strength within the fleeting moments
[00:49.25] I will keep chasing the light, again and again
[00:52.00] Guided by the signpost soaked in rain
[00:55.30] I trace back the memories from afar
[00:58.90] The unseen future makes me anxious
[01:02.50] But a small flame flickers deep in my heart
[01:06.25] There's no dream that’s out of reach
[01:09.75] Because you were the one who showed me
[01:13.40] I won’t forget, no matter when
[01:16.95] Your voice will always lead me
まとめ
このレベルの音声をGoogle Colabの無料版で簡単に作れるようになるのは時代の流れを感じます。
しかも、モデルが音楽生成するだけであれば10秒程度で生成できるのが非常にすごいです。
(モジュールのインストールやインポートなどで今回のコードは時間がかかってますが、それでも早いと思いました)
ちゃんと、タイムスタンプを設定したら、もっと質が良くなると思うので期待です。
あとは、日本語対応してくれるといいな!
Discussion