LoginSignup
1
0

【AI音生成】AudioCraftを用いてテキストから効果音を生成する🎶

Last updated at Posted at 2024-04-01

はじめに

今回はMetaのAudioCraftを用いてText to Audioを試してみたいと思います!
ChatGPTを台頭にGAI(General AI)が流行しており,画像や動画,テキスト間で自由に生成をすることが可能になっています.もちろん音もその対象であり,様々なモデルが公開されています.
しかし,調べてみると,意外とText to Speechのものが多く,音楽や効果音を生成するのではなく,テキストの読み上げを行うものが多いです.

このSpeechやAudio(Sound)の定義は曖昧で,モデルによってAudioと書かれていてもSpeechに該当するものなどがあります(ここではAudio = 効果音とします).

代表的なText-to-Audioツールとして以下のものがあります

stable-audio-toolsはNVIDIAのGPUが必要です.また,2024年の4月現在,学習済みのモデルも出回っていないので,使いづらい部分があります.また,AudioLDM2もAppleシリコン下の環境でうまく動作できませんでした.
そのため,今回はAudioCraftを用います.CPUのみでも動作できたのでぜひ試してみてください!

AudioCraft

AudioCraftは音生成を行うPyTorchのライブラリです.

詳細を知りたい方は以下のリンク先をご覧ください

以下のモデルを使用します

実行環境

OS:macOS Sonoma 14.4.1
Chip:Apple M3 Pro
Python:3.10.4

環境構築

それでは,AudioCraftを使用するための環境を構築していきます.
依存するパッケージのバージョン制約が厳しいので,venvを用いて仮想環境上で実施します.
仮想環境上でバージョン2.1.0のPyTorchをインストールしたいので,Python3.10.4を使用します.対応するバージョンのPythonが入っていない場合はpyenvなどを用いてインストールしてください.

python3 -m venv venv
source venv/bin/activate

仮想環境に入ったらpython -VでPythonのバージョンを確認してください.

続いて,依存するライブラリをインストールしていきます.基本的には公式で書かれている通りに実施します.

python -m pip install 'torch==2.1.0'
python -m pip install 'torchvision==0.16.0'
python -m pip install setuptools wheel
python -m pip install -U audiocraft 
python -m pip install -U git+https://git@github.com/facebookresearch/audiocraft#egg=audiocraft

公式と違うところは,torchvisionのバージョンを指定してダウンロードしています.バージョン0.16.0以外では依存関係の影響でうまく動作しません.公式レポジトリをクローンしてきて,python -m pip install -e . で一括してダウンロードすることもできます(torchvisionなど依存関係の問題があった場合は適宜対応してください).
また,ffmpegもインストールしておきます.Macだとbrewでインストールできます.

brew install ffmpeg

AudioCraftを試してみる!

テキストから効果音を生成してみましょう!以下のコードを使用します.

text2audio.py
import torchaudio
from audiocraft.models import AudioGen
from audiocraft.data.audio import audio_write
import argparse


""" Input text and convert text to audio """
def text2audio(prompt: str):
    model = AudioGen.get_pretrained('facebook/audiogen-medium')
    model.set_generation_params(duration=5)  # Set duration
    wav = model.generate(prompt) # output: list of torch.Tensor as wav

    for idx, one_wav in enumerate(wav):
        # Will save under {idx}.wav, with loudness normalization at -14 db LUFS.
        audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True)
        
def main():
    parser = argparse.ArgumentParser(description='prompt')
    parser.add_argument('-p', type=str, help='Prompt to convert to audio')
    args = parser.parse_args()
    text2audio(args.p)
    print("Audio file saved successfully")
    
if __name__ == "__main__":
    main()

実行方法は,python text2audio.py -p <prompt>で,promptの部分にテキストを入力します.duration=5としているので,5秒のwavファイルが生成されます.promptはリスト形式でも入力でき,その場合は要素の数だけファイルが生成されます.
ローカルのCPUで実行すると,3~5分ほど生成に時間がかかります.

まとめ

今回はAudioCraftを用いてテキストから効果音を生成してみました!
ローカルで実行すると,時間がかかってしまって実用的ではありません.かといってAWS EC2などのクラウドサービスではコストがかかってしまいます.
Modalというサービスを利用すると,リモートにDockerのようなコンテナを作成することができ,そのコンテナ上でGPUを使用できます.毎月クレジットが配布され,使用料もお手頃なのでオススメです!!
AudioCraftには音楽を生成するモデルもあるので,音楽を生成してみても面白いかもしれません!ぜひ試してみてください✨

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0