MusicGEN で音楽をテキストからシュッと作る
いやぁ~~~ちょっと気を抜いたら新しいサービスがシュッとでてきてビビっちゃう(*´▽`*)
昨日もしれっと Meta さんが面白いものを出してましたね~~~
その名も MusicGEN !!
なんとテキストから音楽を生成できるのだ!~
(まんまやんけ!というのは気にしてはいけない)
GitHub はこちら
シュッと試したい人は Hugging Face Space でも提供されてるよ(*´▽`*)
まぁワタクシは Google Colab の Notebook が GitHub で提供されていたのでそちらを使いますがね(〇-〇ヽ)クイッ
提供されてるやつからちょいと改変してるので一応コードをぺたぺたしておきマッスル
※ 大きなモデル使う時は多分メモリ的に無課金だと無理そうな気がしております
まずはデフォ通りの流れ作業
from google.colab import drive
drive.mount('/content/drive')
!python3 -m pip install -U git+https://github.com/facebookresearch/audiocraft#egg=audiocraft
# !python3 -m pip install -U audiocraft
from audiocraft.models import musicgen
from audiocraft.utils.notebook import display_audio
import torch
複数のモデルサイズが提供されているので全部試しちゃうぞ☆
small_model = musicgen.MusicGen.get_pretrained('small', device='cuda')
medium_model = musicgen.MusicGen.get_pretrained('medium', device='cuda')
melody_model = musicgen.MusicGen.get_pretrained('melody', device='cuda')
large_model = musicgen.MusicGen.get_pretrained('large', device='cuda')
こいつが生成する音楽の基となるテキストでござる~
配列で渡すことで複数の音楽が生成できるのですわ~
今回はとりあえず一つだけ
features = [
'lofi slow bpm electro chill with organic samples',
]
んでポコポコ生成(30 秒作ってもらう)
small_model.set_generation_params(duration=30)
res_small = small_model.generate(features,
progress=True)
medium_model.set_generation_params(duration=30)
res_medium = medium_model.generate(features,
progress=True)
melody_model.set_generation_params(duration=30)
res_melody = melody_model.generate(features,
progress=True)
large_model.set_generation_params(duration=30)
res_large = large_model.generate(features,
progress=True)
ちなみに設定できるオプションはこんな感じぽいぽい
def set_generation_params(self, use_sampling: bool = True, top_k: int = 250,
top_p: float = 0.0, temperature: float = 1.0,
duration: float = 30.0, cfg_coef: float = 3.0,
two_step_cfg: bool = False):
"""Set the generation parameters for MusicGen.
Args:
use_sampling (bool, optional): Use sampling if True, else do argmax decoding. Defaults to True.
top_k (int, optional): top_k used for sampling. Defaults to 250.
top_p (float, optional): top_p used for sampling, when set to 0 top_k is used. Defaults to 0.0.
temperature (float, optional): Softmax temperature parameter. Defaults to 1.0.
duration (float, optional): Duration of the generated waveform. Defaults to 30.0.
cfg_coef (float, optional): Coefficient used for classifier free guidance. Defaults to 3.0.
two_step_cfg (bool, optional): If True, performs 2 forward for Classifier Free Guidance,
instead of batching together the two. This has some impact on how things
are padded but seems to have little impact in practice.
"""
assert du
さて、では生成されたみゅーじっくを聴かせてもらおうではないか!!!
いざ!!!
音楽ってどうやって乗せればいいかわかんないからとりあえずこんな形式でおいておくござる( ˘•ω•˘ )
うーん ( ˘•ω•˘ )
モデルが大きくなるにつれてよくなっている気がするけどワタクシの音痴耳では違いがよーわからんでござった(*´▽`*)
でもいい感じの lofi みゅーじっくで素敵(*´▽`*)
しかしまぁ他の音楽も試してみたいところ。
というわけでメタル!!
メタルは漢のロマン!!
Yeah~~~~~~~~
new_features = [
'Wonderfully refined, superb metal music that makes you feel as if you are in heaven!',
]
そして出来上がったのがこちら
普通にえぇやん!!( ゚д゚)
メタルやでぇ、、、、
MusicGEN はサンプルとして音源を渡してそれっぽい感じにしてくれる雰囲気もあるのだけれど、テキストに特定のアーティストをいれてみたらどうなるのかしら??( ゚д゚)
というわけで
みんな大好き Metallica というテキストを含めたみたぜ!!
new_features = [
'The ultimate music that is bold and subtle and piercing to the soul like Metallica.',
]
いざ!!
(-ω-;)ウーンなんか思ってたんと違う
他の文字にかどわかされたのかしら?(;´・ω・)
したらば
Simple is the best
new_features = [
'Music like Metallica',
]
ポンっ!!
うぉぉぉぉぉーーーーーーーーーーーーーーーーーーーーーーーーーーーー( ゚д゚)
それっぽいぃぃぃぃぃぃ!!!!
すげぇぇぇぇ!!!
最後に
Model Card の Limitation にあるように
みたいっす
では、シュッと満足したのでおしまい