【SunoAI】AIがクリスマスソングをプレゼントしてくれた

こんにちは。
今回はAIにクリスマスソングを作ってもらいます:christmas_tree:

つまり歌詞の生成からボーカルとBGMも全てAIに生成してもらいます！

## 使用するAIサービスは以下になります
- ChatGPT
今回は歌詞を生成してもらいます

- SunoAI
生成された歌詞をもとにボーカルとBGMを生成してもらいます

みなさんChatGPTはわかると思うのでSunoAIについて軽く紹介したいと思います。
### SunoAI
[SunoAI](https://suno.com/)とは、テキストから音楽を生成するAIサービス。
音楽制作の知識がなくても、歌詞や曲のイメージを入力するだけでオリジナルの楽曲を作ることができます。
[こちら](https://aismiley.co.jp/ai_news/about-sunoai-how-to-explanation/)の記事で詳しく紹介されてます。

## 実際にクリスマスソングを作ってもらう！
今回はブラウザから実行していきます。
手順は簡単です。
1. ChatGPTに歌詞を生成してもらう
2. 生成された歌詞をもとにSunoAIでボーカルとBGMを生成してもらう


### 1.ChatGPTに歌詞を生成してもらう
ブラウザ上から以下の質問をしました。
```
次のような構成でクリスマスソングを日本語で作ってください。[verse 1] [verse 2] [chorus][verse 3] [verse 4] [chorus]
```

ChatGPTから返ってきた回答はこちらになりました。
```
[verse 1]
白い雪が舞い降りて
街が光で包まれる
手をつないで歩く道
心が温かくなるよ

[verse 2]
赤いリボンの飾りつけ
笑顔があふれる夜
願いごとを込めて
星にひとつ灯をともす

[chorus]
クリスマスが来るよ、君と一緒に
心を重ねて、愛を感じて
この幸せがずっと続きますように
みんなの笑顔が輝くように

[verse 3]
灯りが揺れる教会で
静かに祈りを捧げ
大切な人の幸せ
そのために心を込める

[verse 4]
暖かい風が頬をなで
幸せが広がっていく
手を取り合って笑い合う
この瞬間を忘れない

[chorus]
クリスマスが来るよ、君と一緒に
心を重ねて、愛を感じて
この幸せがずっと続きますように
みんなの笑顔が輝くように
```
どうでしょうか？
思ったより良い感じに作ってくれました！

次に生成された歌詞をもとにSunoAIでボーカルとBGMを生成していきます。

### 2.SunoAIでボーカルとBGMを生成
ここでは、生成された歌詞をもとにSunoAIでボーカルとBGMを生成していきます。

SunoAIの[公式HP](https://suno.com/)内でボーカルとBGMを作成できるので早速やっていきいます。

1. アカウントにSignInして「Create」ページから曲を作成します
2. Lyricsには、ChatGPTで生成した歌詞を埋め込みます
3. 「Style of Music」には今回は「Christmas song」と指定しました
4. 「Title」は特に考えてなかったので空白にしました
※空白の場合SunoAIが勝手に自動で考えてくれます
5. 右下の「Create」ボタンをクリックして曲を作成

一度に二曲作成してくれます。


### 実際に作成された曲を聞いてみよう！
ここからがやっと今回の本題ですね。
実際に生成された曲を聞いてみましょう！

一曲目：
https://suno.com/song/fd1fc327-dbe1-443a-9885-9ac4e39943b4

二曲目：
https://suno.com/song/ca357ec1-15c8-4f89-8d90-7b1738af367c

どうでしたでしょうか？
想像以上のクオリティだなと感じた方もいれば、そうでもないなと思った方もいると思います。
自分は思ってたより良い出来だなと感じました！

### せっかくなので
せっかくなのでファイルを実行するだけで音楽を生成してくれるように実装してみました。

:::note info
準備
以下の環境変数を準備する必要がある
・[OpenAI API Key](https://openai.com/index/openai-api/)
・[SunoAI API Key](https://aimlapi.com/suno-ai-api)

:::

:::note warn
警告
2024年10月頃に実装したものになるので仕様が変更されている可能性あり
詳しくはこちらの[ドキュメント](https://docs.aimlapi.com/)を参考にしてください。

:::

```python:example.py
import json
import requests
from openai import OpenAI

# 入力項目
content = "次のような構成でクリスマスソングを日本語で作ってください。[verse 1] [verse 2] [chorus][verse 3] [verse 4] [chorus]"
sunoai_title = ""
sunoai_tags = ""

# 環境変数
OPENAI_API = ""
SUNOAI_URL = "https://api.aimlapi.com/generate/custom-mode"
SUNOAI_AUTHORIZATION = "" # Bearer + SunoAI_API_Key

# ChatGPT
client = OpenAI(api_key=OPENAI_API) 
completion = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "Please create lyrics in Japanese using the following structure. [verse 1] [verse 2] [chorus][verse 3] [verse 4] [chorus]"},
        {"role": "user", "content": content}
    ]
)
response = completion.choices[0].message.content
print(response)

# SunoAI
headers = {
    "Authorization": SUNOAI_AUTHORIZATION,
    "Content-Type": "application/json"
}
payload = {
    "prompt": response,
    "tags": sunoai_tags,
    "title": sunoai_title,
    "make_instrumental": False,
    "wait_audio": True
}
response = requests.post(SUNOAI_URL, json=payload, headers=headers)
result_music = response.content

music_file_decoded = json.loads(result_music.decode('utf-8'))
print(music_file_decoded)
```