Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI | |
| from transformers import AutoProcessor, BarkModel | |
| import torch | |
| import scipy.io.wavfile | |
| import io | |
| from fastapi.responses import StreamingResponse | |
| app = FastAPI() | |
| # Força o uso de CPU e modelo leve para não travar | |
| device = "cpu" | |
| MODEL_ID = "suno/bark-small" | |
| print("Iniciando o download do modelo (pode demorar uns minutos)...") | |
| processor = AutoProcessor.from_pretrained(MODEL_ID) | |
| model = BarkModel.from_pretrained(MODEL_ID).to(device) | |
| print("Modelo carregado!") | |
| def read_root(): | |
| return {"status": "API Bark Online"} | |
| async def generate_audio(text: str): | |
| try: | |
| # Prepara o texto | |
| inputs = processor(text, voice_preset="v2/en_speaker_6").to(device) | |
| # Gera o áudio (limitado para ser mais rápido na CPU) | |
| audio_array = model.generate(**inputs, coarse_temperature=0.6) | |
| audio_array = audio_array.cpu().numpy().squeeze() | |
| # Salva em memória | |
| sample_rate = model.generation_config.sample_rate | |
| bytes_wav = io.BytesIO() | |
| scipy.io.wavfile.write(bytes_wav, rate=sample_rate, data=audio_array) | |
| bytes_wav.seek(0) | |
| return StreamingResponse(bytes_wav, media_type="audio/wav") | |
| except Exception as e: | |
| return {"error": str(e)} |