File size: 2,980 Bytes
3e08670
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
"""Client pour tester l'API MMS ASR/TTS"""

import requests
import io
import json
from pathlib import Path

class MMSClient:
    def __init__(self, base_url="http://localhost:7860"):
        self.base_url = base_url

    def health(self):
        """Vérifie l'état du service"""
        response = requests.get(f"{self.base_url}/health")
        return response.json()

    def get_supported_languages(self):
        """Récupère les langues supportées"""
        response = requests.get(f"{self.base_url}/supported-languages")
        return response.json()

    def asr(self, audio_path, language="eng"):
        """
        Convertit l'audio en texte

        Args:
            audio_path: chemin vers le fichier audio
            language: code de langue ISO 639-3
        """
        with open(audio_path, "rb") as f:
            files = {"audio": f}
            data = {"language": language}
            response = requests.post(
                f"{self.base_url}/asr",
                files=files,
                data=data
            )
        return response.json()

    def tts(self, text, language="eng"):
        """
        Convertit le texte en audio

        Args:
            text: texte à convertir
            language: code de langue (beh, bba, ddn, ewe, gej, tbz, yor, eng)

        Returns:
            bytes: données audio WAV
        """
        payload = {
            "text": text,
            "language": language
        }
        response = requests.post(
            f"{self.base_url}/tts",
            json=payload
        )

        if response.status_code == 200:
            data = response.json()
            # Convertit le hex en bytes
            audio_bytes = bytes.fromhex(data["audio"])
            return audio_bytes, data
        else:
            return None, response.json()

    def save_audio(self, audio_bytes, output_path):
        """Sauvegarde l'audio dans un fichier"""
        with open(output_path, "wb") as f:
            f.write(audio_bytes)
        print(f"Audio sauvegardé: {output_path}")


if __name__ == "__main__":
    client = MMSClient()

    # Test 1: Vérifier l'état du service
    print("=== Test 1: Santé ===")
    print(client.health())

    # Test 2: Langues supportées
    print("\n=== Test 2: Langues supportées ===")
    print(json.dumps(client.get_supported_languages(), indent=2, ensure_ascii=False))

    # Test 3: TTS - Yoruba
    print("\n=== Test 3: TTS - Yoruba ===")
    audio, data = client.tts("Àbọ̀ wa", language="yor")
    if audio:
        client.save_audio(audio, "output_yoruba.wav")
        print(f"Audio généré: {len(audio)} bytes")
    else:
        print("Erreur:", data)

    # Test 4: TTS - English
    print("\n=== Test 4: TTS - English ===")
    audio, data = client.tts("Hello world", language="eng")
    if audio:
        client.save_audio(audio, "output_english.wav")
        print(f"Audio généré: {len(audio)} bytes")
    else:
        print("Erreur:", data)