Stable Audio Openを使って猫の鳴き声を生成する

## はじめに

　音を生成するAI Stable Audio Openを使ってみたので、紹介がてらこの記事を書いてみました。

## Stable Audio Openとは

　以下、[公式HP](https://ja.stability.ai/blog/stable-audio-open)より

　Stable Audio Openは、誰でも簡単なテキストプロンプトから、最長47秒の高品質オーディオデータを生成することができます。

　専門的なトレーニングにより、ドラムビート、楽器リフ、アンビエントサウンド、フォーリー、その他ミュージックプロダクションやサウンドデザイン用のオーディオサンプルの作成に最適です。

　このオープンソースリリースの主な利点は、ユーザーが独自のカスタムオーディオデータでモデルを微調整できることです。例えば、ドラマーは自分のドラム録音のサンプルを微調整して、新しいビートを生成することができます。


## 制限事項

[公式](https://huggingface.co/stabilityai/stable-audio-open-1.0)によるとこんな制限事項があるようです。

・このモデルはリアルなボーカルを生成することはできません。
・このモデルは英語の説明で訓練されており、他の言語では同等のパフォーマンスを発揮しません。
・このモデルはすべての音楽スタイルや文化に同等に対応できるわけではありません。
・このモデルは音楽よりも効果音やフィールド録音の生成に優れています。
・どの種類のテキスト説明が最良の生成結果をもたらすかを評価することは難しい場合があります。満足のいく結果を得るためにはプロンプトエンジニアリングが必要となることがあります。


## ライセンス種別

|   | Non-Commercial License | Creator License | Enterprise License |
|:-:|:-:|:-:|:-:|
| 料金 | 無料 | 月額20ドル | カスタム価格 |
| 商用ライセンス | 非商用ライセンス | 限定商用ライセンス | 完全な商用ライセンス |
| 対象 | 個人開発者、研究者 | 年間収益が100万ドル未満、機関投資家からの資金が100万ドル未満、月間アクティブユーザー数が100万人未満のクリエイター、開発者 | 企業、APIプロバイダー |

※2024/6/12現在、詳しくは [こちら](https://stability.ai/license)


## Hugging Faceのアクセストークンを取得する

　利用にはHugging Faceのアクセストークンの取得が必要になります。取得に関してはこちらが解りやすかったので参考にしてください。

 https://zenn.dev/protoout/articles/73-hugging-face-setup

## google colabで実行

　それではGoogle Colabで実行していきます。ランタイム > ランタイムのタイプを変更 でGPUを選択しておきましょう。

　まずは必要なものをインストール

```python
!pip install transformers soundfile huggingface_hub
!pip install stable-audio-tools
```

　インストールが終わるとセッションを再起動するか聞いてくるので、指示に従って再起動してください。

　次はHugging Faceにログイン
  
```python
from huggingface_hub import login
login()
```
 
　Hugging Faceのアクセストークンを聞いてくるので、入力してください。

　あとは[公式](https://huggingface.co/stabilityai/stable-audio-open-1.0)のコードをコピーして実行するだけですが、promptの部分を"cat's meow"(猫の鳴き声)に書き換えてから実行します。
  
```python
import torch
import torchaudio
from einops import rearrange
from stable_audio_tools import get_pretrained_model
from stable_audio_tools.inference.generation import generate_diffusion_cond

device = "cuda" if torch.cuda.is_available() else "cpu"

# Download model
model, model_config = get_pretrained_model("stabilityai/stable-audio-open-1.0")
sample_rate = model_config["sample_rate"]
sample_size = model_config["sample_size"]

model = model.to(device)

# Set up text and timing conditioning
conditioning = [{
    "prompt": "cat's meow",
    "seconds_start": 0, 
    "seconds_total": 30
}]

# Generate stereo audio
output = generate_diffusion_cond(
    model,
    steps=100,
    cfg_scale=7,
    conditioning=conditioning,
    sample_size=sample_size,
    sigma_min=0.3,
    sigma_max=500,
    sampler_type="dpmpp-3m-sde",
    device=device
)

# Rearrange audio batch to a single sequence
output = rearrange(output, "b d n -> d (b n)")

# Peak normalize, clip, convert to int16, and save to file
output = output.to(torch.float32).div(torch.max(torch.abs(output))).clamp(-1, 1).mul(32767).to(torch.int16).cpu()
torchaudio.save("output.wav", output, sample_rate)
```

　完了するとoutput.wavが出来上がっているので、ダウンロードして聞いてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350321/428adcd9-d93c-7442-9342-1ff2accb52d1.png)


## おわりに

　Qiitaにはwavファイルはアップロードできないようなので、作成したものを聞かせることはできませんが、確かに作成したファイルには猫の鳴き声が入っています。このモデルは音楽よりもエフェクト音が得意なようなので、他にもいろいろ作成してみると面白いかもしれません。


## 参考サイト

https://weel.co.jp/media/tech/stable-audio-open/