「AIと一緒に音楽を作ろう ~作曲体験セッション~」というタイトルで DevelopersIO2023 に登壇しました! #DevIO2023

2023.07.12

こんにちは、AWS事業本部の平木です!

2023年07月07,08日に開催されたDevelopersIO 2023の Day2 にて、
「AIと一緒に音楽を作ろう ~作曲体験セッション~」というタイトルで アライアンス事業部 きだぱん とサブセッションに登壇しました。

登壇資料

セッション概要

以下の内容をお話しました。

  • セッション概要
    • AI とは
    • 音楽 × テクノロジー
  • 音楽生成AI とは
    • 音楽生成システムの概念
    • 深層学習型 AI モデル
      • 再帰型ニューラルネットワーク(RNN)について
      • 生成的敵対ネットワーク(GAN)について
      • Transformer について
  • 音楽生成 AI の生成パターン
  • MusicGen とは
  • MusicGen のデモ
  • 音楽生成 AI の課題
  • AWS DeepComposer とは & デモ
  • まとめ

デモ

実際にデモで実施したものや、ご紹介しきれなかった利用方法をご紹介します。

MusicGen のデモ

MusicGen は下記4種類の方法で利用することができます。

  • カスタマイズ性重視の利用(独自のGPU環境)
  • 手軽に独自のコンソールを作成(Google Colab)
  • 手軽に楽曲を出力(Google Colab)
  • すぐに使えるデモ環境(Hagging Face)

それぞれ使用方法をご紹介します。

独自の GPU 環境から実行(SageMaker)

SageMaker のノートブックインスタンスを構築し、 GPU 環境を用意します。

構築方法は、下記ブログを参考にしてください。

ノートブックインスタンスのスペックは、

InService になったら Jupyter を開き、Terminal を開きます。

ここからは、facebookresearch/audiocraftの Installation の内容を元に進めていきます。

Audiocraft には、Python 3.9、PyTorch 2.0.0、および少なくとも 16 GB のメモリを備えた GPU (中型モデルの場合) 等が必要なため、必要なものをインストールしていきます。

pip install 'torch>=2.0'
pip install -U audiocraft
pip install -U git+https://git@github.com/facebookresearch/audiocraft#egg=audiocraft
pip install ffmpeg

続いて実行用 Python スクリプトを作成します。

 vi musicgen_generate.py

スクリプトの中身は下記です。

import torchaudio
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write

# 学習モデルの選択
model = MusicGen.get_pretrained('melody')
# 生成する秒数の設定
model.set_generation_params(duration=8)
# 条件を設定しない場合の生成するサンプル数
wav = model.generate_unconditional(4)
# 生成するための入力(テキスト)
descriptions = ['happy rock', 'energetic EDM', 'sad jazz']
wav = model.generate(descriptions)

# 生成するための入力(オーディオ)
melody, sr = torchaudio.load('./assets/bach.mp3')
# 与えられたテキストとオーディオからメロディーを生成
wav = model.generate_with_chroma(descriptions, melody[None].expand(3, -1, -1), sr)

for idx, one_wav in enumerate(wav):
    # 音量を-14 db LUFSで正規化して{idx}.wavで保存します。
    audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True)

※オーディオファイルはデフォルトでは配置されていないため、
オーディオファイルをセットしない場合は16行目と18行目をコメントアウトしてください。

作成した Python スクリプトを実行します。

python  musicgen_generate.py

実行すると下記のように、0.wav ~ 02.wavの指定した条件の数だけ生成されています。
※12,13,16,18行目をコメントアウトし条件を指定しない場合は、10行目のgenerate_unconditionalの数だけ生成されます。

実際に生成されたものがこちらです。

手軽に独自のコンソールを作成(Google Colab)

続いては実際にサブセッション内でデモを行った方法です。

まず下記 GitHub のページへ遷移します。

スクリーンショットの位置の Open in Colab をクリックします。

Google Colab が立ち上がるため、矢印の位置の実行をクリックします。

しばらくセットアップを待つと、72時間有効な2つの URL が表示されるため、 下の Public URL を開きます。

URL をクリックすると、MusicGen のコンソールが開くためここで準備完了です。

それぞれのパラメータを紹介すると、

  • Input Text: 楽曲生成するための入力(テキスト)
  • Condition on a melody (optional) File or Mic: 楽曲生成するための入力(オーディオ)※オプション
  • Model: 使用したい生成モデルサイズ
  • Duration: 生成したい秒数
  • Top-k、Top-p、Temperature、Classifier Free Guidance: 楽曲生成におけるランダム性や確率分布の度合いを決めるパラメータ

Input Text に任意の文字(英語)を入力し、「送信」をクリックすると、生成が開始されます。

生成が完了すると、再生できるようになります。
右上でダウンロードすることも可能です。

実際にサブセッションの際に、参加者の皆さんからリクエストいただいて生成した曲をご紹介いたします。

  • DevelopersIOのテーマ曲
    (Input Text) DevelopersIO Theme Song

  • 世界が終わりかけている時に流れる曲
    (Input Text) The song that plays when the world is ending.

  • リラックスできる曲。ピアノ
    (Input Text) Relaxing music. Piano

手軽に楽曲を出力(Google Colab)

こちらは Google Colab を使うもう一つの方法です。

先ほどの GitHub のページの Usage から、colab notebookのリンクをクリックします。

まず下記2つ実行します。

続いて、get_pretrained の中で学習モデルを、Duration で生成したい秒数を指定します。

ここで生成したい入力(テキスト)を設定します。

テキストを設定し、実行すると、設定したテキストの数だけ生成されます。

こちらは残念ながらダウンロードできないため、ぜひ実際に試して生成してみてください!

すぐに使えるデモ環境(Hagging Face)

こちらは、環境を構築せず最も手軽に使える環境です。

Hagging Face にて公開されており、下記ですぐに使用できます。

学習モデルは、固定で Melody でしか利用できず、生成する秒数も12秒のみですが、すぐに試せるのが良いです。

使い方としては、手軽に独自のコンソールを作成(Google Colab) の手順の通りのため割愛します。

AWS DeepComposer のデモ

AWS DeepComposer については下記ブログを参照ください。

バージニア北部リージョンのみのサービスのため、 バージニア北部で開きます。

ナビゲーションペインから、Music studio を選択します。

Start composing で開始します。

Choose input track で入力となる楽曲データを選択できます。
ここでは Recommended からサンプルの楽曲を選択できたり、
Record a trackImport a trackで実際に自分で弾いてみた楽曲をソースにすることもできます。

今回は、きらきら星を選択し、Continue を押下します。

続いて使用する機械学習モデルを選択できます。

それぞれ下記のようなことができます。
AR-CNN:メロディを変更する
GANs:メロディに伴奏をつける
Transformers:メロディの続きを作曲する

今回は GANs を選択し、
パラメータでは、MuseGAN と その中で Jazz のモデルを選択します。

Continue を押すと下記のように生成が完了しました。
右上の ▶Play で再生可能です。
さらに Continue を押下すると生成が完了します。

最後は、花吹雪とともに生成完了しました。

Share Compositionで SoundCloud へ共有することも可能です。

実際に生成された楽曲はこちらです。

セッション関連の参考資料

終わりに

今回は、「AIと一緒に音楽を作ろう ~作曲体験セッション~」というタイトルで DevelopersIO2023 に登壇させていただきました!
音楽とテクノロジーの今後の可能性を探求しながら楽しめる、肩の力を抜いたセッションを行えました。

また、今回初登壇の経験となりましたが、昨今話題の生成系 AI の技術に興味のある方、音楽に興味のある方など様々な方と対面といった形でお話ができ、緊張よりも楽しい!という気持ちが勝りました。
何事もやってみる気持ちの大切さに改めて気づかされたため、今後も登壇をはじめ様々なことにチャレンジしていきたいと思います!