Metaがテキストから音楽や音声を生成するAIを公開していました。
https://audiocraft.metademolab.com/
AudioGenが効果音とかを生成、MusicGenが音楽を生成ですね。
MetaのMusicGenに「90年代コムロJPOP」って言ったらそれぽいものが生成された、気がする。https://t.co/sbkgvF0kpP pic.twitter.com/Tuhd6j2g2T
— きしだൠ(K1S) (@kis) 2023年8月4日
「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