← Todos los artículos

El nuevo framework Speech de Apple: SpeechAnalyzer frente a SFSpeechRecognizer

iOS 26 estrena un nuevo framework de reconocimiento de voz que convive con el SFSpeechRecognizer de siempre. La nueva superficie de API es SpeechAnalyzer más los módulos (SpeechTranscriber, SpeechDetector) que se componen a su alrededor1. El propio Apple presenta SpeechAnalyzer como el camino moderno: un nuevo modelo que corre en el dispositivo, soporte para audio de larga duración, gestión automática de idiomas, baja latencia para casos en tiempo real y una arquitectura modular capaz de sumar más tipos de análisis con el tiempo. SFSpeechRecognizer sigue distribuyéndose y funcionando; las razones para quedarse son el soporte de sistemas antiguos y un hueco más acotado: el vocabulario personalizado en el modelo de larga duración SpeechTranscriber del nuevo framework, ya que la ruta de corta duración DictationTranscriber sí acepta contextual strings.

Este artículo contrasta el nuevo framework con el anterior. El enfoque es «cuándo migrar» y no «cómo usar la nueva API», porque todo equipo con una integración de SFSpeechRecognizer que funciona se enfrenta a la misma decisión de triaje: ¿compensan el modelo moderno y la arquitectura del nuevo framework el costo de migrar, o la inversión ya hecha en vocabulario personalizado justifica quedarse?

En resumen

  • SpeechAnalyzer (iOS 26+) es el framework moderno de reconocimiento de voz en el dispositivo de Apple. Coordina módulos de análisis que se configuran en la inicialización; iOS 26 trae tres: SpeechTranscriber (larga duración), DictationTranscriber (enunciados cortos, el equivalente de SFSpeechRecognizer) y SpeechDetector (detección de actividad de voz, que debe emparejarse con un transcriptor)2.
  • El nuevo framework está construido alrededor del audio de larga duración: clases, reuniones, conversaciones con varias voces. Corre por completo en el dispositivo, gestiona solo los recursos de modelo de cada idioma y trae un nuevo modelo propietario de Apple que, según se ha informado, es 2× más rápido que Whisper Large V3 Turbo en tareas de transcripción equivalentes3.
  • SFSpeechRecognizer sigue distribuyéndose y funcionando, y el vocabulario personalizado ya no es exclusivo suyo. El AnalysisContext.contextualStrings del nuevo framework (que se define con SpeechAnalyzer.setContext(_:)) registra hasta 100 frases propias de un dominio para la ruta de DictationTranscriber6. El hueco que queda es el modelo de larga duración SpeechTranscriber, que no admite contextual strings.
  • La migración va función por función, no en bloque. Las apps que necesitan transcripción de larga duración, menor latencia o mejor calidad con audio lejano se pasan a SpeechAnalyzer. Las que ya invirtieron en vocabulario personalizado pueden migrar el dictado corto con DictationTranscriber más contextual strings; solo la transcripción de larga duración con vocabulario personalizado sigue justificando la API antigua.
  • El artículo sobre el framework Vision de este mismo grupo cubre la otra primitiva de percepción en el dispositivo de Apple; SpeechAnalyzer extiende al audio ese mismo patrón local, sin nube.

La arquitectura: analizador + módulos

SpeechAnalyzer no transcribe por sí mismo. Es un coordinador que gestiona una sesión de análisis de audio y reparte el búfer de audio entre uno o varios módulos2. Los módulos se configuran en la inicialización mediante el inicializador init(modules:), y el análisis arranca al alimentar una AsyncSequence de valores AnalyzerInput —cada uno envuelve un búfer de audio— con start(inputSequence:):

import Speech

let transcriber = SpeechTranscriber(
    locale: .current,
    transcriptionOptions: [],
    reportingOptions: [.volatileResults],
    attributeOptions: []
)
let analyzer = SpeechAnalyzer(modules: [transcriber])

try await analyzer.start(inputSequence: audioInputSequence)

for try await result in transcriber.results {
    if result.isFinal {
        print(result.text)
    }
}

En iOS 26 llegan tres módulos:

SpeechTranscriber. El módulo de voz a texto pensado para audio de larga duración (clases, reuniones, conversaciones con varias voces). Devuelve resultados en streaming con marcas de tiempo por token, puntuaciones de confianza y una AsyncSequence results que la app consume con for try await. Cada resultado lleva una bandera isFinal que separa las hipótesis parciales volátiles del texto ya definitivo.

DictationTranscriber. El equivalente directo del caso de uso del antiguo SFSpeechRecognizer: transcripción de enunciados cortos con el mismo modelo en el dispositivo que usa SFSpeechRecognizer. Las apps que migran desde SFSpeechRecognizer para consultas breves recurren a DictationTranscriber; las que adoptan el framework para grabaciones largas recurren a SpeechTranscriber. La división importa porque SpeechTranscriber y DictationTranscriber usan una cobertura de idiomas distinta y rutas de modelo distintas.

SpeechDetector. Detección de actividad de voz. Informa de los eventos en que el habla empieza y termina dentro del flujo de audio. El detector no puede correr solo: hay que emparejarlo con uno de los módulos de transcripción en la misma instancia de SpeechAnalyzer. Las apps lo usan para acotar el cómputo de transcripción (no transcribir el silencio) o para gobernar señales de interfaz (los indicadores de «habla ahora»).

La arquitectura modular es la mejora estructural frente a SFSpeechRecognizer. La API antigua concentra configuración, manejo del búfer y entrega de resultados en un par de recognizer y request, y dependía de que el usuario activara idiomas en la configuración; la nueva separa el coordinador de sesión de sus módulos de análisis, de modo que cada app compone lo que necesita.

Lo que aporta el nuevo modelo

El modelo de transcripción que hay detrás de SpeechTranscriber es un modelo nuevo, ejecutado en el dispositivo, que Apple desarrolló específicamente para este framework4. Estas son las mejoras que Apple destacó en la WWDC 2025:

Calidad en audio de larga duración. El modelo está entrenado para transcribir de forma sostenida durante minutos u horas, no solo consultas breves. Clases, pódcast, reuniones con varias voces y sesiones de dictado se transcriben con una precisión que Apple posiciona frente a los modelos de la clase Whisper. Una prueba independiente de MacStories midió una velocidad unas 2,2× mayor que la de la versión Large V3 Turbo de MacWhisper en tareas de transcripción equivalentes3.

Manejo de audio lejano. Micrófonos al otro lado de la sala, audio de mesa de conferencias con varios hablantes, grabaciones con ruido ambiental. El modelo está entrenado para esas condiciones; el modelo antiguo de SFSpeechRecognizer las resuelve con menos soltura.

Operación en tiempo real con baja latencia. Los resultados en streaming de SpeechTranscriber llegan más rápido que las llamadas de vuelta de SFSpeechRecognitionRequest.shouldReportPartialResults del framework anterior. Las apps que muestran transcripción en vivo (subtítulos, interfaces gobernadas por voz, dictado) obtienen actualizaciones más fluidas.

Gestión automática de idiomas. La formulación de Apple (paráfrasis mía, no su término) alude a la gestión de modelos y recursos, no a cambiar de idioma a mitad del flujo. El sistema descarga e instala los recursos de modelo adecuados para cada idioma mediante AssetInventory, así que las apps dejan de administrar a mano la disponibilidad de modelos idioma por idioma. Una instancia de transcriptor sigue trabajando con un idioma a la vez —igual que en el framework anterior—, pero la fontanería de recursos que volvía penoso el multilingüismo ya es tarea del sistema.

Sin costo en el tamaño de la app. El modelo viaja con el sistema operativo, no con la app. Las apps que adoptan SpeechAnalyzer no empaquetan pesos de modelo adicionales. El contraste con distribuir un modelo de la clase Whisper dentro del bundle es notable: una pila de transcripción local competitiva cuesta cero bytes de bundle.

Lo que el framework antiguo todavía ofrece

SFSpeechRecognizer sigue distribuyéndose y funcionando en iOS 26. Hay tres razones por las que una app podría conservarlo:

Vocabulario personalizado en audio de larga duración. SFSpeechRecognitionRequest.contextualStrings permite que la app registre una lista de palabras clave conocidas (nombres propios, términos técnicos, nombres de producto) que el modelo reconocerá con mayor probabilidad de acierto. La función mejora bastante la precisión en apps de dominio específico (dictado médico con nombres de fármacos, apps jurídicas con citas de jurisprudencia, apps de ingeniería con números de pieza). El nuevo framework tiene su propia versión de esto en la ruta de dictado: AnalysisContext.contextualStrings admite hasta 100 frases agrupadas por etiqueta, se define en el analizador con SpeechAnalyzer.setContext(_:), y las frases registradas ahí pueden reconocerse incluso cuando faltan en el vocabulario del sistema6. DictationTranscriber acepta además una configuración de modelo de lenguaje propia a través de su pista de contenido ContentHint.customizedLanguage(modelConfiguration:)7. Lo que todavía no tiene equivalente son las contextual strings en el modelo de larga duración SpeechTranscriber: una app que necesita vocabulario personalizado en transcripción de larga duración retrocedería si migrara esa ruta.

Soporte de sistemas antiguos. SFSpeechRecognizer está disponible desde iOS 10; SpeechAnalyzer exige iOS 26 o posterior. Las apps que apuntan a iOS 18 o anterior necesitan el framework heredado.

Una integración existente que funciona. Las apps con integraciones de SFSpeechRecognizer estables, auditadas y con buen rendimiento no tienen ninguna urgencia por migrar. Las mejoras del nuevo framework pesan sobre todo en casos nuevos (transcripción de larga duración, audio lejano, conversaciones con varias voces); las apps que resuelven consultas de voz breves con la API heredada quizá no ganen lo suficiente como para justificar la migración.

Cuándo migrar

Vale la pena nombrar tres detonantes de migración:

La app procesa audio de larga duración. Una grabadora de reuniones, una app de transcripción de clases, una herramienta que convierte pódcast en texto. El entrenamiento del nuevo modelo con audio sostenido encaja justo aquí; el modelo antiguo se degrada a lo largo de sesiones largas. Migra esto primero.

La app necesita audio lejano o ruidoso. Transcripción en sala de reuniones, grabación de entrevistas con un único micrófono distante, audio capturado en entornos con ruido de fondo. El nuevo modelo resuelve esas condiciones bastante mejor.

La app muestra una interfaz de transcripción en vivo. Capas de subtítulos, interfaces de dictado, interfaces asistivas gobernadas por voz. La menor latencia de los resultados en streaming de SpeechTranscriber hace que la interfaz se sienta más ágil.

Casos que no obligan necesariamente a migrar:

  • La transcripción de larga duración que depende de vocabulario personalizado (una grabadora de reuniones que debe capturar nombres de fármacos o citas de jurisprudencia). El modelo de larga duración SpeechTranscriber no admite contextual strings, así que esa combinación se queda en SFSpeechRecognizer hasta que Apple cierre el hueco. Las consultas de voz breves con vocabulario personalizado migran sin fricción: DictationTranscriber más AnalysisContext.contextualStrings las cubre6.
  • Las apps que deben dar soporte a iOS 18 o anterior. SpeechAnalyzer solo existe en iOS 26; la base de código va a necesitar el framework heredado para los objetivos antiguos de todos modos.

El patrón lado a lado

Para las apps que apuntan a versiones antiguas del sistema y a la vez quieren la calidad del nuevo framework en iOS 26+, el patrón lado a lado es el enfoque correcto:

import Speech

if #available(iOS 26.0, *) {
    let transcriber = DictationTranscriber(locale: .current, preset: .shortDictation)
    let analyzer = SpeechAnalyzer(modules: [transcriber])
    try await analyzer.start(inputSequence: audioInputSequence)
    for try await result in transcriber.results {
        if result.isFinal {
            handleTranscription(result.text)
        }
    }
} else {
    let recognizer = SFSpeechRecognizer(locale: .current)!
    let request = SFSpeechAudioBufferRecognitionRequest()
    request.shouldReportPartialResults = true
    request.requiresOnDeviceRecognition = true
    let task = recognizer.recognitionTask(with: request) { result, error in
        guard let result else { return }
        handleTranscription(result.bestTranscription.formattedString)
    }
}

DictationTranscriber es la elección correcta para la rama de iOS 26+ porque el destino de la migración es el caso de uso de SFSpeechRecognizer (consultas breves con el mismo modelo de dictado). Las apps orientadas al audio de larga duración cambian DictationTranscriber por SpeechTranscriber en la rama de iOS 26.

Los dos frameworks coexisten; la comprobación en tiempo de ejecución elige el adecuado según la disponibilidad. Ninguno bloquea al otro; la tubería de transcripción de la app se adapta.

Privacidad y la superficie de autorización de voz

Los dos frameworks difieren en la capa de autorización. SFSpeechRecognizer conserva su autorización dedicada al reconocimiento de voz: NSSpeechRecognitionUsageDescription en el Info.plist más el aviso de SFSpeechRecognizer.requestAuthorization(_:)5. SpeechAnalyzer no recurre a esa superficie: una app que transcribe audio en vivo con él necesita permiso de micrófono (NSMicrophoneUsageDescription) y nada más para transcribir audio que ya posee. En privacidad, ambos trabajan en el dispositivo: SpeechAnalyzer es local por diseño; SFSpeechRecognizer corre en local cuando la bandera requiresOnDeviceRecognition se pone en true sobre la propia SFSpeechRecognitionRequest —es obligatorio, no viene por defecto—, y en caso contrario puede tomar una ruta de servidor.

Lo que esto implica para el patrón lado a lado: una app que ejecuta ambos frameworks carga con las dos superficies de permiso —el aviso de micrófono para la rama de SpeechAnalyzer y la autorización de reconocimiento de voz para la rama heredada— y la etiqueta de privacidad de la App Store debería reflejar las dos.

Para las apps que transmiten audio del micrófono al analizador, se aplica la configuración habitual de AVAudioSession. El artículo sobre el Privacy Manifest de este grupo cubre las entradas del manifiesto para apps que usan Speech; ambos frameworks caen bajo las mismas declaraciones de privacidad.

La conexión con los flujos de trabajo de agentes

El modelo local y la salida estructurada de SpeechAnalyzer encajan con limpieza en dos patrones del grupo:

Foundation Models para razonar dentro de la app. Una tubería que transcribe audio con SpeechTranscriber y luego resume la transcripción con el LLM local (tratado en Foundation Models, el LLM en el dispositivo) corre íntegramente en el dispositivo. Llamadas de red totales: cero. Exposición de datos a terceros: cero.

App Intents para acciones gobernadas por voz. Un AppIntent que recibe una transcripción como entrada puede invocarse a través de los Vocal Shortcuts (tratados en La accesibilidad como plataforma) o de la superficie de acciones de Apple Intelligence. El método perform del intent ejecuta SpeechAnalyzer para transcribir la entrada y luego pasa el control a la lógica de la app. Todo el recorrido es privado y local.

El patrón: el nuevo framework Speech completa el triángulo de percepción local (Vision para imágenes, Foundation Models para razonamiento lingüístico, Speech para audio) que vuelve viables las funciones de IA totalmente locales en apps de iOS.

Qué significa este patrón para las apps con iOS 26+

Tres conclusiones.

  1. Usa SpeechAnalyzer por defecto en el código nuevo. El modelo moderno, la arquitectura modular y el mejor rendimiento en larga duración, audio lejano y directo lo convierten en el punto de partida correcto. El framework heredado queda como recurso cuando hace falta soporte de sistemas antiguos o vocabulario personalizado en transcripción de larga duración.

  2. Las apps que dependen del vocabulario se dividen según la duración del audio. El dictado corto con vocabulario personalizado sí migra: DictationTranscriber más AnalysisContext.contextualStrings carga los términos del dominio6. La transcripción de larga duración con vocabulario personalizado se queda en SFSpeechRecognizer hasta que el modelo SpeechTranscriber admita contextual strings. Los dos frameworks coexisten; mezclarlos función por función es el patrón correcto.

  3. El relato de privacidad local se extiende de Vision a Speech. Las apps que se construyeron alrededor de la visión por computadora local de Vision ya tienen el equivalente para audio. Combinado con Foundation Models para el razonamiento, toda la cadena de percepción a lenguaje puede correr en local sin exponer datos a terceros.

El grupo Apple Ecosystem al completo: App Intents tipados; servidores MCP; la pregunta del enrutamiento; Foundation Models; la distinción entre el LLM de ejecución y el de herramientas; tres superficies; el patrón de fuente única de verdad; dos servidores MCP; hooks para el desarrollo en Apple; Live Activities; el contrato de ejecución de watchOS; las entrañas de SwiftUI; el modelo mental espacial de RealityKit; la disciplina de esquema en SwiftData; los patrones de Liquid Glass; la distribución multiplataforma; la matriz de plataformas; el framework Vision; los Symbol Effects; la inferencia con Core ML; la API de Writing Tools; Swift Testing; el Privacy Manifest; la accesibilidad como plataforma; la tipografía SF Pro; los patrones espaciales de visionOS; aquello sobre lo que me niego a escribir. El eje está en la serie Apple Ecosystem. Para un contexto más amplio de iOS con agentes de IA, mira la guía de desarrollo de agentes en iOS.

Preguntas frecuentes

¿SFSpeechRecognizer está obsoleto?

Apple no ha declarado formalmente obsoleto a SFSpeechRecognizer. Sigue distribuyéndose en iOS 26 y mantiene el soporte. El planteamiento de la WWDC 2025 es que SpeechAnalyzer es el camino moderno y recomendado para el código nuevo; el framework heredado es la herramienta adecuada en casos concretos (vocabulario personalizado en transcripción de larga duración, soporte de sistemas antiguos).

¿Puedo usar SpeechAnalyzer con archivos de audio pregrabados?

Sí. SpeechAnalyzer.start(inputSequence:) acepta una AsyncSequence de valores AnalyzerInput, y cada uno envuelve un búfer de audio. Las apps envuelven cualquier fuente de audio (el micrófono con AVAudioEngine, URL de archivos pregrabados, instancias de AVAsset) en un adaptador de AsyncSequence y se la entregan al analizador. El flujo de transcripción se consume igual, con for try await result in transcriber.results, sea cual sea la fuente de entrada.

¿Qué pasa con el vocabulario personalizado si migro?

Depende del transcriptor en el que aterrice la migración. La ruta de dictado sí lo admite: registra hasta 100 frases con AnalysisContext.contextualStrings, define el contexto con SpeechAnalyzer.setContext(_:) y DictationTranscriber las consume6. El modelo de larga duración SpeechTranscriber no admite contextual strings, así que la transcripción larga sensible al vocabulario debería quedarse en SFSpeechRecognizer con contextualStrings hasta que Apple cierre ese hueco. Un enfoque híbrido (el nuevo framework para la transcripción general, la API heredada para la ruta larga sensible al vocabulario) funciona en iOS 26.

¿Puedo ejecutar SpeechAnalyzer en el servidor?

No. SpeechAnalyzer es un framework que solo corre en el dispositivo. No tiene ruta de servidor. Para transcribir en el servidor, las herramientas adecuadas son las API en la nube (OpenAI Whisper API, Google Cloud Speech-to-Text, AWS Transcribe) o modelos autoalojados. El valor del framework de Apple está precisamente en la privacidad local y en el costo nulo por llamada.

¿Cómo funciona la detección de idioma?

SpeechTranscriber(locale:) toma un idioma por instancia de transcriptor y no hay cambio de idioma a mitad del flujo. Lo que iOS 26 automatiza es el lado de los recursos: AssetInventory descarga y administra los recursos de modelo de cada idioma, de modo que dar soporte a varios idiomas ya no obliga a gestionar a mano la disponibilidad de modelos. Cuando el idioma se conoce de antemano (la función de dictado de una app localizada), indícalo de forma explícita. En contextos multilingües (un transcriptor de reuniones donde los hablantes pueden cambiar de idioma), detecta el idioma o deja que el usuario lo elija, y luego instancia el transcriptor para ese idioma.

¿Cómo encaja esto con los otros artículos del grupo sobre ML en el dispositivo?

SpeechAnalyzer es el tercer pilar de la pila de percepción local: Vision (tratado en El framework Vision) se ocupa de las imágenes, Speech del audio, y Core ML (tratado en Inferencia con Core ML en el dispositivo) es el motor que hay debajo de ambos. Foundation Models (tratado en Foundation Models, el LLM en el dispositivo) se encarga del razonamiento lingüístico. Juntos forman una tubería de IA local completa que no requiere llamadas de red.

Referencias


  1. Apple Developer: Bring advanced speech-to-text to your app with SpeechAnalyzer (sesión 277 de la WWDC 2025). Presentación del framework SpeechAnalyzer, de su arquitectura modular y del nuevo modelo de transcripción en el dispositivo. 

  2. Apple Developer Documentation: SpeechAnalyzer y SpeechTranscriber. La referencia del framework, que cubre la arquitectura de analizador y módulos. 

  3. MacStories: Hands-On: How Apple’s New Speech APIs Outpace Whisper for Lightning-Fast Transcription. Prueba independiente del nuevo modelo frente a Whisper Large V3 Turbo; en su test en macOS la herramienta resultó 2,2× más rápida que la versión Large V3 Turbo de MacWhisper. 

  4. Apple Developer Documentation: Bringing advanced speech-to-text capabilities to your app. La página de código de ejemplo de Apple para adoptar SpeechAnalyzer (un proyecto descargable con un resumen breve, no una guía en prosa). 

  5. Apple Developer Documentation: SFSpeechRecognizer.requestAuthorization(_:). La superficie de autorización del reconocimiento de voz, que usa la ruta de SFSpeechRecognizer; SpeechAnalyzer se apoya en el permiso de micrófono. 

  6. Apple Developer Documentation: AnalysisContext.contextualStrings (iOS 26.0+). Listas de frases agrupadas por etiqueta (hasta 100 frases) que los transcriptores pueden reconocer incluso cuando esas frases faltan en el vocabulario del sistema; se aplican a una sesión con SpeechAnalyzer.setContext(_:) y las consume DictationTranscriber

  7. Apple Developer Documentation: DictationTranscriber.ContentHint.customizedLanguage(modelConfiguration:) (iOS 26.0+). La pista de contenido que dirige el dictado corto hacia una configuración de modelo de lenguaje propia. 

Artículos relacionados

Core AI: ejecutar modelos en Apple Silicon

Core AI es el framework de ejecución de modelos de bajo nivel de iOS 27: asset frente a modelo, tensores NDArray, selecc…

22 min de lectura

Foundation Models en Private Cloud Compute

iOS 27 suma un Foundation Model de servidor en Private Cloud Compute con privacidad on-device, más un protocolo para con…

22 min de lectura

El stack de agentes del ingeniero de diseño

Los seis componentes de una infraestructura de agentes que garantiza consistencia visual, disciplina tipográfica y cumpl…

16 min de lectura