Salta el contingut

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

  1. Ves a portal.azure.com
  2. Cerca "Speech service"
  3. Fes clic a "Crear"
  4. Omple els camps:
  5. Grup de recursos: rg-ia-practica
  6. Regió: West Europe
  7. Nom: un nom únic (p.ex. speech-practica-2024)
  8. Nivell de preus: F0 (Gratuït)
  9. 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
1
2
3
4
5
6
7
8
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

  1. Nivell bàsic: Genera un fitxer d'àudio que llegeixi les capitals de 5 països europeus.
  2. 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.
  3. 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