| """Sample audio registry served from /api/samples.""" |
| from __future__ import annotations |
|
|
| from pathlib import Path |
| from typing import Dict, List |
|
|
| from app.config import settings |
|
|
|
|
| SAMPLES: List[Dict[str, str]] = [ |
| { |
| "sample_id": "real_news_excerpt", |
| "filename": "real_news_excerpt.wav", |
| "label": "real", |
| "description": "Natural broadcast news clip — clean studio environment.", |
| }, |
| { |
| "sample_id": "real_conversation", |
| "filename": "real_conversation.wav", |
| "label": "real", |
| "description": "Spontaneous conversational speech — disfluencies present.", |
| }, |
| { |
| "sample_id": "real_lecture", |
| "filename": "real_lecture.wav", |
| "label": "real", |
| "description": "Academic lecture segment — male speaker, room acoustics.", |
| }, |
| { |
| "sample_id": "fake_tts_commercial", |
| "filename": "fake_tts_commercial.wav", |
| "label": "fake", |
| "description": "Commercial-grade TTS (Eleven Labs-style synthesis).", |
| }, |
| { |
| "sample_id": "fake_voice_clone", |
| "filename": "fake_voice_clone.wav", |
| "label": "fake", |
| "description": "Few-shot voice conversion clone of a target speaker.", |
| }, |
| { |
| "sample_id": "fake_neural_tts", |
| "filename": "fake_neural_tts.wav", |
| "label": "fake", |
| "description": "High-naturalness neural TTS with prosodic variation.", |
| }, |
| ] |
|
|
|
|
| def sample_dir() -> Path: |
| """Resolve the canonical sample-audio directory.""" |
| candidates = [ |
| settings.project_root.parent / "data" / "sample_audios", |
| Path("/app/data/sample_audios"), |
| settings.project_root / "data" / "sample_audios", |
| ] |
| for p in candidates: |
| if p.exists() or p.parent.exists(): |
| return p |
| return candidates[0] |
|
|
|
|
| def sample_path(filename: str) -> Path: |
| """Resolve sample file under the canonical sample directory.""" |
| return sample_dir() / filename |
|
|
|
|
| def sample_by_id(sample_id: str) -> Dict[str, str] | None: |
| for s in SAMPLES: |
| if s["sample_id"] == sample_id: |
| return s |
| return None |
|
|