1. Guia Pràctica: Azure AI Speech (Capa Gratuïta)
1.1. Introducció
Azure AI Speech permet convertir veu a text (STT), text a veu (TTS), traduir àudio en temps real i identificar parlants. És ideal per a aplicacions d'accessibilitat, assistents virtuals i transcripció automàtica.
1.1.1. Límits de la capa gratuïta (F0)
- Speech to Text: 5 hores d'àudio/mes gratuïtes
- Text to Speech: 500.000 caràcters/mes gratuïts (veus neuronals: 500.000 caràcters/mes)
- Traducció de veu: 5 hores/mes gratuïtes
1.2. Prerequisits
- Compte d'Azure actiu
- Python 3.8 o superior
- Micròfon (per als exemples en temps real)
- Altaveus o auriculars
1.3. Pas 1: Crear el recurs al portal d'Azure
- Ves a portal.azure.com
- Cerca "Speech service"
- Fes clic a "Crear"
- Omple els camps:
- Grup de recursos:
rg-ia-practica
- Regió:
West Europe
- Nom: un nom únic (p.ex.
speech-practica-2024)
- Nivell de preus: F0 (Gratuït)
- Fes clic a "Revisar i crear" → "Crear"
Copia:
- Clau (no és un endpoint URL, és una clau d'API)
- Regió (p.ex. westeurope)
1.4. Pas 2: Instal·lar les dependències
| Bash |
|---|
| pip install azure-cognitiveservices-speech
|
En Linux, és possible que necessitis instal·lar també:
| Bash |
|---|
| sudo apt-get install libssl-dev libasound2
|
1.5. Pas 3: Text a Veu (TTS)
Crea un fitxer speech_tts.py:
| Python |
|---|
| import azure.cognitiveservices.speech as speechsdk
SPEECH_KEY = "<la-teva-clau>"
SPEECH_REGION = "westeurope" # o la teva regió
# Configurar el servei
speech_config = speechsdk.SpeechConfig(
subscription=SPEECH_KEY,
region=SPEECH_REGION
)
# Escollir la veu (neural)
# Veus disponibles en català: ca-ES-JoanaNeural, ca-ES-EnricNeural
speech_config.speech_synthesis_voice_name = "ca-ES-JoanaNeural"
# Sintetitzar a l'altaveu directament
synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config)
text = "Hola! Soc una veu generada amb Intel·ligència Artificial d'Azure. Puc parlar en català!"
print(f"Sintetitzant: '{text}'")
result = synthesizer.speak_text_async(text).get()
if result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted:
print("Àudio generat correctament.")
elif result.reason == speechsdk.ResultReason.Canceled:
print(f"Error: {result.cancellation_details.error_details}")
|
1.5.1. Guardar l'àudio en un fitxer
| Python |
|---|
| import azure.cognitiveservices.speech as speechsdk
SPEECH_KEY = "<la-teva-clau>"
SPEECH_REGION = "westeurope"
speech_config = speechsdk.SpeechConfig(subscription=SPEECH_KEY, region=SPEECH_REGION)
speech_config.speech_synthesis_voice_name = "ca-ES-JoanaNeural"
# Guardar en fitxer WAV
audio_config = speechsdk.audio.AudioOutputConfig(filename="sortida.wav")
synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
result = synthesizer.speak_text_async("Bon dia, com esteu avui?").get()
print("Fitxer 'sortida.wav' creat correctament.")
|
1.6. Pas 4: Veu a Text (STT)
1.6.1. Des del micròfon
Crea un fitxer speech_stt_mic.py:
| Python |
|---|
| import azure.cognitiveservices.speech as speechsdk
SPEECH_KEY = "<la-teva-clau>"
SPEECH_REGION = "westeurope"
speech_config = speechsdk.SpeechConfig(subscription=SPEECH_KEY, region=SPEECH_REGION)
speech_config.speech_recognition_language = "ca-ES" # Català
recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
print("Parla ara (premeu Ctrl+C per aturar)...")
result = recognizer.recognize_once_async().get()
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
print(f"Text reconegut: {result.text}")
elif result.reason == speechsdk.ResultReason.NoMatch:
print("No s'ha pogut reconèixer cap parla.")
elif result.reason == speechsdk.ResultReason.Canceled:
print(f"Error: {result.cancellation_details.error_details}")
|
1.6.2. Des d'un fitxer d'àudio
| Python |
|---|
| import azure.cognitiveservices.speech as speechsdk
SPEECH_KEY = "<la-teva-clau>"
SPEECH_REGION = "westeurope"
speech_config = speechsdk.SpeechConfig(subscription=SPEECH_KEY, region=SPEECH_REGION)
speech_config.speech_recognition_language = "ca-ES"
# Llegir des de fitxer WAV
audio_config = speechsdk.audio.AudioConfig(filename="sortida.wav")
recognizer = speechsdk.SpeechRecognizer(
speech_config=speech_config,
audio_config=audio_config
)
result = recognizer.recognize_once_async().get()
print(f"Transcripció: {result.text}")
|
1.7. Pas 5: Veus neuronals disponibles en català i castellà
| Veu |
Idioma |
Gènere |
ca-ES-JoanaNeural |
Català |
Femenina |
ca-ES-EnricNeural |
Català |
Masculina |
es-ES-ElviraNeural |
Castellà (Espanya) |
Femenina |
es-ES-AlvaroNeural |
Castellà (Espanya) |
Masculí |
Per veure totes les veus disponibles:
| Python |
|---|
| import azure.cognitiveservices.speech as speechsdk
speech_config = speechsdk.SpeechConfig(subscription="<clau>", region="westeurope")
synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=None)
voices = synthesizer.get_voices_async("ca").get()
for voice in voices.voices:
print(f"{voice.short_name} - {voice.locale}")
|
1.8. Exercicis proposats
- Nivell bàsic: Genera un fitxer d'àudio que llegeixi les capitals de 5 països europeus.
- Nivell mitjà: Crea un script que transcrigui un fitxer d'àudio MP3 (converteix-lo primer a WAV amb
ffmpeg) i guardi el text en un fitxer .txt.
- Nivell avançat: Implementa un sistema de "lectura en veu alta" que llegeixi un fitxer de text per paràgrafs, fent pauses naturals entre ells.
1.9. Errors habituals
| Error |
Causa |
Solució |
AuthenticationFailure |
Clau o regió incorrecta |
Verifica ambdós valors |
NoMatch |
Silenci o soroll excessiu |
Comprova el micròfon |
AudioFileNotFound |
Fitxer WAV no trobat |
Verifica la ruta del fitxer |
| Format no suportat |
MP3 no suportat directament |
Converteix a WAV (16kHz, mono) |
1.10. Recursos addicionals