Spaces:
Sleeping
Sleeping
| import torch | |
| from fastapi import FastAPI, HTTPException | |
| from pydantic import BaseModel | |
| from TTS.api import TTS | |
| import uvicorn | |
| import tempfile | |
| from fastapi.responses import FileResponse | |
| #curl -X POST -H "Content-Type: application/json" -d '{"message": "Hello ! How are you ?"}' https://micksoftware-vctk.hf.space/tts | |
| print("Starting...") | |
| # Charger le modèle TTS | |
| MODEL_NAME = "tts_models/en/vctk/vits" | |
| tts = TTS(MODEL_NAME) | |
| # Initialiser l'application FastAPI | |
| app = FastAPI() | |
| print("Test du modèle TTS...") | |
| try: | |
| tts.tts_to_file(text="Test audio", speaker="p339", speaker_wav=None, | |
| age=22, gender="F", emotion="neutral", file_path="test.wav") | |
| print("Le modèle fonctionne correctement.") | |
| except Exception as e: | |
| print("Erreur lors du test du modèle :", e) | |
| SPEAKER_MAPPING = { | |
| "Eden": "p339", | |
| "voice2": "p340", | |
| # Ajoutez d'autres correspondances si nécessaire | |
| } | |
| class TextInput(BaseModel): | |
| text: str | |
| emotion: str = "neutral" | |
| speaker: str = "Eden" | |
| def generate_tts(input: TextInput): | |
| """Génère un fichier audio à partir du texte donné.""" | |
| if not input.text.strip(): | |
| raise HTTPException(status_code=400, detail="Le texte ne peut pas être vide.") | |
| speaker_code = SPEAKER_MAPPING.get(input.speaker) | |
| if speaker_code is None: | |
| raise HTTPException( | |
| status_code=400, detail=f"Le speaker '{input.speaker}' n'est pas reconnu.") | |
| try: | |
| print("Generation starts:", input.text.strip(), "avec emotion:", | |
| input.emotion, "et speaker:", input.speaker) | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as tmpfile: | |
| output_path = tmpfile.name | |
| print("tmp file ready") | |
| # Générer l'audio | |
| tts.tts_to_file( | |
| text=input.text, | |
| speaker=speaker_code, | |
| speaker_wav=None, | |
| age=22, | |
| gender="F", | |
| emotion=input.emotion, | |
| file_path=output_path | |
| ) | |
| print("tmp file generated") | |
| return FileResponse(output_path, media_type="audio/wav", filename="output.wav") | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| if __name__ == "__main__": | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |