Spaces:
Sleeping
Sleeping
from fastapi import FastAPI, Form | |
from fastapi.responses import StreamingResponse | |
import io | |
import wave | |
from piper.voice import PiperVoice | |
app = FastAPI() | |
# Load the voice model | |
model_path = 'model.onnx' | |
voice = PiperVoice.load(model_path) | |
def synthesize_text(text: str = Form(...)): | |
""" | |
Endpoint to synthesize text to speech. | |
Args: | |
text (str): The text to synthesize. | |
Returns: | |
StreamingResponse: The audio data as a stream. | |
""" | |
audio_buffer = io.BytesIO() | |
# Synthesize speech and write to an in-memory WAV file | |
with wave.open(audio_buffer, 'wb') as wav_file: | |
wav_file.setnchannels(1) # Set the number of audio channels | |
wav_file.setsampwidth(2) # Set sample width to 2 bytes | |
wav_file.setframerate(16000) # Set the sampling rate | |
audio = voice.synthesize(text, wav_file) | |
# Seek to the beginning of the buffer so it can be read from the start | |
audio_buffer.seek(0) | |
return StreamingResponse(audio_buffer, media_type="audio/wav") | |
def read_root(): | |
return {"message": "Welcome to the Piper TTS API. Use /synthesize/ to synthesize speech."} | |