Fix Piper 1.2+ synthesize API: use wave.open with BytesIO buffer
Browse files
main.py
CHANGED
|
@@ -7,6 +7,7 @@ import uuid
|
|
| 7 |
from fastapi.responses import Response
|
| 8 |
from io import BytesIO
|
| 9 |
import requests
|
|
|
|
| 10 |
from pathlib import Path
|
| 11 |
|
| 12 |
app = FastAPI(title="Piper TTS Space")
|
|
@@ -90,9 +91,13 @@ async def tts(request: TTSRequest):
|
|
| 90 |
raise HTTPException(400, f"Voice load failed: {str(e)}")
|
| 91 |
|
| 92 |
try:
|
|
|
|
| 93 |
buffer = BytesIO()
|
| 94 |
-
|
| 95 |
-
|
|
|
|
|
|
|
|
|
|
| 96 |
buffer.seek(0)
|
| 97 |
return Response(
|
| 98 |
content=buffer.read(),
|
|
|
|
| 7 |
from fastapi.responses import Response
|
| 8 |
from io import BytesIO
|
| 9 |
import requests
|
| 10 |
+
import wave
|
| 11 |
from pathlib import Path
|
| 12 |
|
| 13 |
app = FastAPI(title="Piper TTS Space")
|
|
|
|
| 91 |
raise HTTPException(400, f"Voice load failed: {str(e)}")
|
| 92 |
|
| 93 |
try:
|
| 94 |
+
# Piper 1.2+ requires wav_file parameter - use wave.open with BytesIO
|
| 95 |
buffer = BytesIO()
|
| 96 |
+
with wave.open(buffer, 'wb') as wav_file:
|
| 97 |
+
wav_file.setnchannels(1)
|
| 98 |
+
wav_file.setsampwidth(2) # 16-bit
|
| 99 |
+
wav_file.setframerate(request.sample_rate)
|
| 100 |
+
voice.synthesize(request.text, speaker_id=request.speaker_id, wav_file=wav_file)
|
| 101 |
buffer.seek(0)
|
| 102 |
return Response(
|
| 103 |
content=buffer.read(),
|