feat: add seed samples API endpoints

This commit is contained in:
mARTin-B78 2026-06-22 11:39:01 +02:00
parent 79d8d2cd96
commit 2ade7e1ca6
3 changed files with 138 additions and 0 deletions

3
.gitignore vendored
View File

@ -21,6 +21,9 @@ config/voices.json*
# Converted private audio (M4A → WAV, generated at runtime)
config/converted/
# Seed finder pre-generated WAV samples (batch output, not source files)
config/seed_samples/
# Editor backup files
*.py~
*.yml~

View File

@ -175,5 +175,34 @@ async def set_voice_seed(request: Request):
return JSONResponse({"ok": True, "voice": voice_name, "seed": seed})
_SEED_SAMPLES_DIR = '/config/seed_samples'
@openai_server.app.get('/seed-samples/{voice_name}')
async def list_seed_samples(voice_name: str):
"""Return a sorted list of seed numbers for which a pre-generated WAV exists."""
import re as _re
voice_dir = os.path.join(_SEED_SAMPLES_DIR, voice_name)
if not os.path.isdir(voice_dir):
return JSONResponse({"seeds": []})
seeds = []
for fname in os.listdir(voice_dir):
m = _re.match(r'^seed_(\d+)\.wav$', fname)
if m:
seeds.append(int(m.group(1)))
seeds.sort()
return JSONResponse({"seeds": seeds})
@openai_server.app.get('/seed-sample/{voice_name}/{seed}')
async def get_seed_sample(voice_name: str, seed: int):
"""Serve a pre-generated seed WAV file."""
from fastapi.responses import FileResponse
path = os.path.join(_SEED_SAMPLES_DIR, voice_name, f'seed_{seed:05d}.wav')
if not os.path.isfile(path):
raise HTTPException(status_code=404, detail=f"No sample for seed {seed}")
return FileResponse(path, media_type='audio/wav')
if __name__ == '__main__':
openai_server.main()

View File

@ -0,0 +1,106 @@
voices : 96
seeds : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
output : /config/seed_samples/
total : ~1440 requests
[1/96] EN_F_NatashaNeural
text: The system administrator successfully configured the customized Docker stacks and benchmar...
seed 1 → OK (7.5s)
seed 2 → OK (6.4s)
seed 3 → OK (6.6s)
seed 4 → OK (6.9s)
seed 5 → OK (6.2s)
seed 6 → OK (6.2s)
seed 7 → OK (5.7s)
seed 8 → OK (6.0s)
seed 9 → OK (9.1s)
seed 10 → OK (6.1s)
seed 11 → OK (5.9s)
seed 12 → OK (6.2s)
seed 13 → OK (6.3s)
seed 14 → OK (5.8s)
seed 15 → OK (6.1s)
→ 15/15 OK
[2/96] EN_M_WilliamNeural
text: The system administrator successfully configured the customized Docker stacks and benchmar...
seed 1 → OK (5.6s)
seed 2 → OK (5.3s)
seed 3 → OK (5.2s)
seed 4 → OK (5.3s)
seed 5 → OK (5.4s)
seed 6 → OK (5.8s)
seed 7 → OK (5.3s)
seed 8 → OK (5.2s)
seed 9 → OK (5.1s)
seed 10 → OK (5.3s)
seed 11 → OK (5.4s)
seed 12 → OK (5.3s)
seed 13 → OK (5.2s)
seed 14 → OK (5.2s)
seed 15 → OK (5.4s)
→ 15/15 OK
[3/96] DE_5_28
text: Die 3.500 neuen High-End Geräte für das Server-Update benötigen eine außergewöhnlich stark...
seed 1 → OK (12.6s)
seed 2 → OK (13.9s)
seed 3 → OK (12.6s)
seed 4 → OK (13.4s)
seed 5 → OK (12.9s)
seed 6 → OK (13.0s)
seed 7 → OK (12.4s)
seed 8 → OK (13.1s)
seed 9 → OK (13.2s)
seed 10 → OK (13.6s)
seed 11 → OK (12.5s)
seed 12 → OK (13.7s)
seed 13 → OK (13.3s)
seed 14 → OK (13.0s)
seed 15 → OK (14.5s)
→ 15/15 OK
[4/96] DE_Aliya_meine_Frau
text: Die 3.500 neuen High-End Geräte für das Server-Update benötigen eine außergewöhnlich stark...
seed 1 → OK (13.5s)
seed 2 → OK (12.9s)
seed 3 → OK (14.4s)
seed 4 → OK (13.6s)
seed 5 → OK (14.3s)
seed 6 → OK (12.7s)
seed 7 → OK (13.7s)
seed 8 → OK (14.1s)
seed 9 → OK (14.5s)
seed 10 → OK (13.3s)
seed 11 → OK (14.6s)
seed 12 → OK (13.8s)
seed 13 → OK (13.1s)
seed 14 → OK (13.7s)
seed 15 → OK (12.6s)
→ 15/15 OK
[5/96] DE_Anke_Harnack_U_Bahn_Hamburg_Stimme
text: Die 3.500 neuen High-End Geräte für das Server-Update benötigen eine außergewöhnlich stark...
seed 1 → OK (15.6s)
seed 2 → OK (14.4s)
seed 3 → OK (14.6s)
seed 4 → OK (15.8s)
seed 5 → OK (14.0s)
seed 6 → OK (29.5s)
seed 7 → OK (46.9s)
seed 8 → OK (75.1s)
seed 9 → FAILED: HTTPConnectionPool(host='localhost', port=8000): Read timed out.
seed 10 → OK (60.6s)
seed 11 → OK (14.7s)
seed 12 → OK (15.1s)
seed 13 → OK (15.0s)
seed 14 → OK (14.8s)
seed 15 → OK (14.7s)
→ 14/15 OK
[6/96] DE_Catrinja
text: Die 3.500 neuen High-End Geräte für das Server-Update benötigen eine außergewöhnlich stark...
seed 1 → OK (12.4s)
seed 2 → OK (12.7s)
seed 3 → OK (13.3s)
seed 4 →