MetaのMusicGenに90年代コムロJ-POPを作ってもらう

Metaがテキストから音楽や音声を生成するAIを公開していました。 https://audiocraft.metademolab.com/

AudioGenが効果音とかを生成、MusicGenが音楽を生成ですね。

「90s J-POP like Komuro」というプロンプトで、それっぽい音楽をつくってくれました。

512トークンで10秒になります。MediumでGPU(RTX 4060 Ti)つかって生成に30秒くらいかな。 CPU(7世代i7)だとSmallで256トークンが80秒くらい。

Transformersの4.31.0に含まれているので、PyTorchとTransformersを導入すれば使えるはず。あとffmpegにパスを通す必要があります。

モデルの準備はこんな感じ。

from transformers import AutoProcessor, MusicgenForConditionalGeneration

model_name = "facebook/musicgen-medium"

processor = AutoProcessor.from_pretrained(model_name)
model = MusicgenForConditionalGeneration.from_pretrained(model_name).to("cuda")

モデルにはsmall, medium, largeがあります。音質がよくなる。 CPUで動かすときは"cuda""cpu"にします。

そして生成

text = "90s J-POP like Komuro"
inputs = processor(
  text=text,
  padding=True,
  return_tensors="pt",
).to(model.device)
audio_values = model.generate(**inputs, max_new_tokens=token_count)

あとはファイルに保存。

import scipy
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("musicgen.wav", rate=sampling_rate, data=audio_values.cpu().numpy())

GradioのUIを作ったソースはこちら
https://gist.github.com/kishida/10ca95df2b6566c0acfdbcd59dde2abd