はじめに
今回は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を試してみる!
テキストから効果音を生成してみましょう!以下のコードを使用します.
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には音楽を生成するモデルもあるので,音楽を生成してみても面白いかもしれません!ぜひ試してみてください✨