簡単AI音楽作成☆dockerでmagentaを動かそう★

今さらMagenta

google magentaは音楽版autoMLです、autoMLのこと正直よく分かってないですが、ライブラリで簡単にそのまま音楽生成出来たり、学習させたりできるAI簡単いじれるやーつです。去年散々にdiffusionが盛り上がってのに今さら何でvae/rnnパッケージ紹介かというと、ただの技術不足ですね。でもそこそこに頑張れますし、もう少々お待ちを。てかvaeも十分にわけわからんのです。
あとmagenta.jsというjsでも動くらしいブツもあるので、どこまで動いて何ができるのか今は知りませんが個人開発で遊べそうなネタぴったりなので今度使おうと思います。そしてjsで提供するというのはつまり、俺達以外のAIエンジニアはこの世に必要ない。aiにものを教えられるのは俺たちだけだ、お前らはapiで呼ばせてやるよとでも言いたいんですかね。くやぴー。以下のgithubもほぼ同じですが、一応ご参考に~。あとdockerの記事は古めのやつ(dockerimage=magentaversionが)だったけど、magenta動かすもっと詳しい記事は他にあったのでそちらで是非遊んでください。

https://github.com/junkratmecha/magenta-docker

イカれたメンバーを紹介するぜ(とりあえずファイル)

先に、gpu対応してないので独自学習は向いてないです。こんなクソ簡単なファイルわざわざ参照せんわ、てかこいつdockerよく分かってないでしょと思われる方はご指摘の通りです。どうぞすっ飛ばしてください。まずはツリー!

magenta-docker/
  ├ Dockerfile
  ├ docker-compose.yml
  └ data/
    └ test.py(別にいらない)

次は、docker-compose.yml。コンテナ一個でもdocker-compose使わないと死ぬ病の方向け。

tty:trueが無いと、ポート待受とかしてないとexit(0)します。restart: alwaysはマシンとデーモン再起動時に一緒にコンテナが立ち上がる設定になるので、基本つけとくイメージ。

version: "3"
services:
  magenta:
    restart: always
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./data:/data
    tty: true

最後はdockerfileだぜ!magentaインストールするだけ。。。

FROM python:3.8-buster
WORKDIR /data
RUN apt-get update
RUN apt-get install -y vim less
RUN apt-get install -y libsndfile1-dev
RUN pip install --upgrade pip
RUN pip install magenta --no-cache-dir

ちなみにbusterってよく見るなーと思ったけどDebian10(bullseye=v11,stretch=v9,jessie=v8←やめて泣)らしい、あとalpineとpythonは相性悪いという記事をどっかで読んだが、本当かどうかは知りません。

Docker imageの違い(参照)

https://prograshi.com/platform/docker/docker-image-tags-difference/

で立ち上げコマンドはもちろんこれだ!ぜ★

docker-compose build --no-cache #中身変えた時はこれやる~
docker-compose up -d #コンテナスタート
docker-compose exec magenta bash #オーバーソウル

生成コマンド紹介

まあmagentaクソでかパッケージなので自分も全部分かってないですが、とりあえず学習済vaeを動かす方法とできた物を最後に乗せておきます。コマンドを打つ前にまず学習済モデルの重みを以下のリンクからダウンロードしてください(サンプルコマンドはhierdec-trio_16bar=メロディー/ベース/ドラムの3ラインのやつ)。

https://github.com/magenta/magenta/tree/main/magenta/models/music_vae

で、とりあえずvaeを動かすにはこのコマンド。重み解凍とか入るので多少時間かかります。ちなみにmidi基礎ですが、midiとはjpegみたいな音楽ファイルの規格。midiのチャンネルはライン(ベースライン、ギターラインみたいな音楽アプリのあの階層みたいなイメージ)、ノートはドレミファで0~127で7ビット、[60]はピアノの鍵盤の真ん中らへんのド。bpmはbeat per minuteでテンポのこと、ヨネダ2000が一定なやつ。それ以上は知らないです。

music_vae_generate \
--config=hierdec-trio_16bar \ #使用モデル
--checkpoint_file=/data/ckpt/hierdec-trio_16bar.tar \ #重み
--mode=sample \ #モード、#interpolateだとmidiを二つ指定して参照する
--num_outputs=5 \  #5個
--output_dir=/data/output #場所

こんなのが出力されるよ。(ちょっとうるさいかもです)

上のinterpolateモードでバンドっぽいmidiを食わせて作らせた5個の中で一番マシ(楽器だけちょっといい感じのにしたけど音の動きは無調整)だったのを貼ります。まあ自分もそんな音楽理論知りませんがコード合わせるとか47踏んで変な不協和音出すとかちゃんと避けられてますよね。ただ、このモードがmidiにモデルと合わせた楽器・チャンネル情報をプログラムチェンジ(midi用語)して入れ込む作業もしなきゃ行けないので、もうやりたくない。wordpressって普通にwavファイル貼れるんですね。そろそろバックアップ取るかー。

おすすめの記事