Coisas que eu quero fazer
No artigo abaixo, tentei criar áudio usando o Stable Audio Open 1.0, mas o processo foi bastante instável.
Uma nova versão mais leve do stable-audio-open-small foi lançada, então vou experimentá-la.
Tentei várias coisas, mas não consegui fazer o stable-audio-open-small funcionar com o DirectML. (Isso ocorre porque as versões do PyTorch usadas pelo stable-audio-tools e pelo torch-directml são conflitantes.)
Em relação às licenças
Consulte o link a seguir para obter a licença do modelo.
É gratuito para uso não comercial.
Configuração do ambiente
Crie uma pasta de trabalho.
Mudar para o ambiente venv (opcional)
Se necessário, execute o seguinte comando no prompt de comando para criar e ativar o ambiente Venv.
Como este projeto pode envolver a modificação de bibliotecas, recomendamos o uso de um ambiente virtual (venv).
python -mvenv venv
venv\scripts\activate.batInstalação da Biblioteca
Execute o seguinte comando para instalar as bibliotecas necessárias.
pip install stable-audio-toolsErro: AttributeError: o módulo pkgutil não possui o atributo ImpImporter. Você quis dizer: zipimporter?
O seguinte erro ocorreu dependendo do ambiente. Isso pode ser resolvido alterando a versão do Python que está sendo usada.
Versão em que o problema ocorreu: 3.10.6
Versão que não apresentou o problema: 3.12.8
AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.Criação de roteiro
Salve o seguinte conteúdo como um arquivo chamado run.py.
Este é o mesmo script usado em ambientes onde o CUDA pode ser executado. (A troca é automática.)
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-small")
sample_rate = model_config["sample_rate"]
sample_size = model_config["sample_size"]
model = model.to(device)
# Set up text and timing conditioning
conditioning = [{
"prompt": "128 BPM tech house drum loop",
"seconds_total": 11
}]
# Generate stereo audio
output = generate_diffusion_cond(
model,
steps=8,
conditioning=conditioning,
sample_size=sample_size,
sampler_type="pingpong",
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)execução
Execute o seguinte comando para executar o script.
Um arquivo chamado output.wav será criado na pasta onde você executou o comando.
python run.pyTempo de execução
Como mostra a captura de tela abaixo, 1 leva cerca de 1 segundo, então mesmo 8 podem ser concluídos em cerca de 10 segundos.

No entanto, leva bastante tempo depois que a barra de progresso atinge 100%. (Não cronometrei com precisão, mas não terminou em 3 horas, embora tenha terminado depois de esperar durante a noite.)
Por falar nisso
Os seguintes processos são lentos.
sampled = model.pretransform.decode(sampled)Se o download do modelo falhar
Consulte o artigo abaixo.
Tratamento de erros (ValueError: high está fora dos limites para int32)
O seguinte erro pode ocorrer, impedindo a execução do programa. (Depende do ambiente?)
File "F:\projects\python\StableAL\venv\lib\site-packages\stable_audio_tools\inference\generation.py", line 138, in generate_diffusion_cond
seed = seed if seed != -1 else np.random.randint(0, 2**32 - 1)
File "mtrand.pyx", line 746, in numpy.random.mtrand.RandomState.randint
File "_bounded_integers.pyx", line 1336, in numpy.random._bounded_integers._rand_int32
ValueError: high is out of bounds for int32
Para evitar isso, modifique a linha 138 de venv\Lib\site-packages\stable_audio_tools\inference\generation.py da seguinte forma. (Isso pode variar dependendo da versão do stable_audio_tools.)
Antes da revisão:
seed = seed if seed != -1 else np.random.randint(0, 2**32 - 1, dtype=np.uint32)Após a correção:
seed = seed if seed != -1 else np.random.randint(0, 2**31 - 1, dtype=np.uint32)Resultado
Consegui criar áudio usando o stable-audio-open-small e a CPU, mas leva bastante tempo para usar, então dependerá de como você pretende utilizá-lo.
Sites que utilizei como referência



コメント