← capítulo

Audio: de voz a texto y de regreso

Capítulo 14 · el círculo se cierra — hablar adentro, hablar afuera

La hora

El viaje redondo

Sintetiza una oración → transcríbela de vuelta. Si regresa intacta, las dos mitades funcionan.

spoke:      The quick brown fox jumps over the lazy dog.
transcript: The quick brown fox jumps over the lazy dog.

Ten a la mano una verificación de viaje redondo — los bugs de audio son miserables de oído.

Hablar + transcribir (OpenAI)

def speak(text, path):
    r = client.audio.speech.create(
        model="gpt-4o-mini-tts", voice="alloy", input=text)
    open(path, "wb").write(r.content)   # MP3

def transcribe(path):
    return client.audio.transcriptions.create(
        model="gpt-4o-mini-transcribe", file=open(path, "rb")).text

El bug de audio #1 (Gemini TTS)

Gemini regresa PCM crudo — sin header. Nada lo reproduce hasta que lo envuelvas:

with wave.open(path, "wb") as w:
    w.setnchannels(1); w.setsampwidth(2)
    w.setframerate(24000); w.writeframes(pcm)

¿Audio en silencio? Sospecha del header antes que del modelo.

Dos filosofías de STT

El mismo resultado, distinta puerta.

Ponlo a trabajar — tres apps

Dos regresan texto; una regresa audio que la página reproduce.

Lo que te llevas

Dos direcciones de una llamada cierran el círculo. La lección es el formato, no la API: envuelve el PCM antes de que se reproduzca. Y la mayoría de las features de audio son STT + un paso de texto — todo lo que sabes sigue aplicando. Sigue: contexto largo, y lo que un millón de tokens cuesta de verdad.