Audio Session — qué es, categorías y configuración en iOS

Autor: IT Sectr Publicado: 2026-05-24 Tiempo de lectura: 8 min

Audio Session es el mecanismo central de iOS para gestionar el comportamiento de audio de una aplicación: interacción con el sistema, manejo de interrupciones y enrutamiento de audio. Cada aplicación de iOS recibe una única sesión de audio que determina cómo se comporta el sonido cuando la pantalla está bloqueada, durante llamadas y al conectar Bluetooth. Según la Documentación para Desarrolladores de Apple, 2026, Audio Session se configura mediante una categoría y un modo — sin una configuración adecuada, la aplicación puede no reproducir sonido en segundo plano.

Puntos Clave

  • Audio Session (AVAudioSession) es un objeto del sistema en iOS que gestiona el comportamiento de audio de la aplicación a nivel del sistema operativo.
  • La categoría de la sesión define el comportamiento básico: playback, record, ambient, playAndRecord y otros.
  • Los modos y opciones refinan el comportamiento: default, voiceChat, videoRecording, allowBluetooth.
  • Ante una interrupción (llamada, alarma), la sesión recibe una notificación a través de NotificationCenter con el tipo interruptionType.
  • Para la reproducción en segundo plano, es necesario activar Background Modes — Audio, AirPlay and Picture in Picture.

¿Qué es Audio Session?

Audio Session es una única instancia de AVAudioSession creada por el sistema cuando se inicia una aplicación y existe durante todo su ciclo de vida. Actúa como intermediario entre la aplicación y el sistema de audio de iOS: la configuración de la categoría determina si la aplicación puede reproducir sonido en segundo plano, si el sonido se silenciará durante una llamada y a qué dispositivos enviar el audio.

A diferencia de Android Audio Focus, donde cada aplicación solicita y libera el foco de forma independiente, Audio Session de iOS se gestiona de forma centralizada a través de una sesión por aplicación. Cuando se activa una sesión, el sistema desactiva automáticamente la sesión de la aplicación anterior, enviándole una notificación de interrupción. Esta diferencia arquitectónica define los distintos enfoques para el manejo de audio en las dos plataformas.

Según la sesión 211 de WWDC 2024, aproximadamente el 40% de los problemas de audio en aplicaciones iOS se deben a una configuración incorrecta de Audio Session. El error más común es elegir la categoría ambient en lugar de playback, lo que provoca que el sonido desaparezca al bloquear la pantalla.

Cómo Funciona AVAudioSession

Al iniciarse, la aplicación obtiene la sharedInstance de la sesión, establece la categoría mediante la llamada setCategory(_:mode:options:) y activa la sesión a través de setActive(true). Después de la activación, iOS considera las políticas de categoría para el enrutamiento. Si otra aplicación activa su sesión, la actual recibe una notificación AudioSessionInterruptionType.began a través de Notification.Name.AVAudioSessionInterruption.

Categorías de Audio Session

La categoría es el parámetro principal de Audio Session, que define seis opciones predefinidas de comportamiento. Elegir una categoría es la primera y más importante decisión al configurar el audio en iOS.

CategoríaCuándo UsarAudio en Segundo PlanoSilencio Afecta
ambientJuegos, efectos de fondoNo
playbackMúsica, podcasts, audiolibrosNo
recordGrabadora de voz, grabación de audioNoN/D
playAndRecordVoIP, mensajes de vozNo
multiRouteMezcladores DJ, karaokeNo
soloAmbientPredeterminado (iOS default)No

Categoría Playback — la Principal Opción para Reproductores

Para reproductores de música y video, use siempre playback. Esta categoría permite: reproducir sonido con la pantalla bloqueada, con el interruptor de silencio apagado (botón físico en el iPhone) y con la aplicación en segundo plano. Sin la categoría playback, la sesión se desactiva al bloquear la pantalla o minimizar la aplicación.

La categoría ambient es adecuada para juegos y aplicaciones con sonidos de fondo — permite que otras aplicaciones continúen reproduciendo. Por ejemplo, si un usuario está escuchando música y abre un juego con una sesión ambient, la música continúa sonando sobre los sonidos del juego. Esta es una diferencia fundamental con Android, donde tal escenario requiere un permiso explícito de duck.

Cómo Configurar Audio Session

La configuración de Audio Session debe realizarse antes de comenzar cualquier reproducción. Se recomienda configurar la sesión en el método application(_:didFinishLaunchingWithOptions:) o en el inicializador del reproductor. Después de establecer la categoría, la sesión debe activarse.

Configuración Básica de Audio Session en Swift

swift
import AVFAudio

let session = AVAudioSession.sharedInstance

do {
    try session.setCategory(
        playback,
        mode: default,
        options: [allowBluetooth, defaultToSpeaker]
    )
    try session.setActive(true)
} catch {
    print("Error al configurar Audio Session: \(error.localizedDescription)")
}

El parámetro options incluye allowBluetooth (salida a auriculares Bluetooth) y defaultToSpeaker (reproducción a través del altavoz en lugar del auricular). La opción allowBluetooth es obligatoria para aplicaciones que admiten auriculares Bluetooth — sin ella, el sonido puede dirigirse al altavoz incorporado incluso cuando hay un auricular conectado.

Configuración para Grabación y Reproducción (VoIP)

swift
let session = AVAudioSession.sharedInstance
try session.setCategory(
    playAndRecord,
    mode: voiceChat,
    options: [allowBluetooth, allowBluetoothA2DP]
)

try session.overrideOutputAudioPort(speaker)
try session.setActive(true)

La categoría playAndRecord con el modo voiceChat optimiza la ruta de audio para la comunicación por voz: activa la cancelación de eco, el control automático de ganancia (AGC) y selecciona el códec óptimo. OverrideOutputAudioPort(.speaker) fuerza la salida a través del altavoz incluso cuando hay un auricular conectado — útil para el manos libres.

Activación y Desactivación de la Sesión

Llamar a setActive(true) activa la sesión y notifica al sistema que la aplicación usará audio. Cuando se pausa la reproducción, se recomienda desactivar la sesión para que otras aplicaciones puedan obtener el flujo de audio. La excepción son las aplicaciones con reproducción prolongada en segundo plano (música, podcasts), donde la sesión permanece activa durante toda la pista.

Es importante manejar los errores al llamar a setActive. Si otra sesión con alta prioridad está activa (por ejemplo, Teléfono durante una llamada), setActive puede lanzar un error. En este caso, debe esperar la notificación AudioSessionInterruptionType.ended y reintentar la activación.

Modos y Políticas de Audio Session

El modo refina la categoría y optimiza la ruta de audio para un caso de uso específico. Cada modo cambia el comportamiento del AGC, la cancelación de eco y los códecs. Los modos no reemplazan la categoría sino que la complementan — una categoría puede funcionar con diferentes modos.

  • default — modo estándar para música y video. AGC desactivado, cancelación de eco mínima.
  • voiceChat — optimización para VoIP. Activa cancelación de eco, AGC, supresión de ruido. Úselo con la categoría playAndRecord.
  • videoRecording — para grabación de video. Prioriza la calidad de grabación sobre la reproducción. Úselo con la categoría record o playAndRecord.
  • measurement — para mediciones de audio. Procesamiento de señal mínimo, sin AGC ni cancelación de eco.
  • gameChat — para chat de voz en juegos. Similar a voiceChat, pero con prioridad para el audio del juego.
  • moviePlayback — para ver películas. Optimización para audio multicanal (5.1, 7.1) y Dolby Atmos.

Opciones de Categoría de Audio Session

Las opciones proporcionan un ajuste fino del comportamiento de la sesión. Cada opción es una bandera que se puede combinar con otras en un array. Por ejemplo, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] permite la salida de sonido a un auricular Bluetooth, usa el altavoz por defecto y se mezcla con audiolibros.

En iOS 17+ apareció la opción spatialAudio, que activa el audio espacial personalizado para AirPods a través de AVAudioSessionSpatialPreferences. Según WWDC 2024, el audio espacial aumenta la participación de los usuarios en aplicaciones de música en un 25% en las pruebas de Apple.

Manejo de Interrupciones y Llamadas

Las interrupciones son una diferencia clave entre Audio Session y Android Audio Focus. En iOS, las interrupciones se manejan a través de NotificationCenter suscribiéndose a AVAudioSession.interruptionNotification. La notificación contiene un diccionario con el tipo de interrupción: began o ended.

Suscripción a Notificaciones de Interrupción

swift
override func viewDidLoad() {
    super.viewDidLoad()
    let center = NotificationCenter.default
    center.addObserver(
        self,
        selector: #selector(handleInterruption),
        name: AVAudioSession.interruptionNotification,
        object: nil
    )
}

@objc func handleInterruption(_ notification: Notification) {
    guard let userInfo = notification.userInfo,
        let type = userInfo[AVAudioSession.interruptionTypeKey]
            as? AVAudioSessionInterruptionType
    else { return }

    switch type {
    case began:
        pausePlayback()
    case ended:
        guard let options = userInfo[AVAudioSession.interruptionOptionKey]
            as? AVAudioSessionInterruptionOptions
        else { return }

        if options.contains(shouldResume) {
            resumePlayback()
        }
    }

Al recibir interruptionType.began, el reproductor debe pausar la reproducción. Al recibir interruptionType.ended, la propiedad interruptionOptionKey indica si el reproductor puede reanudarse automáticamente (shouldResume). Si el usuario rechazó la llamada, shouldResume = true. Si la llamada terminó por tiempo de espera — shouldResume = false, no se permite la reanudación.

Manejo de Interrupciones de Otras Aplicaciones

Cuando otra aplicación activa su Audio Session con la categoría playback, la sesión actual recibe una notificación de interrupción. Si otra aplicación usa ambient, no ocurre ninguna interrupción — los sonidos se mezclan. Este comportamiento es drásticamente diferente de Android, donde cualquier activación de Audio Focus desencadena un evento LOSS.

Para las aplicaciones que necesitan continuar reproduciendo cuando se activan otras sesiones (por ejemplo, navegación mientras se reproduce música), use la opción .mixWithOthers. Esta opción permite la mezcla de sonido con otras aplicaciones y no se envían interrupciones. MixWithOthers es el equivalente iOS del modo duck en Android.

Enrutamiento de Audio y Bluetooth

Audio Session gestiona automáticamente el enrutamiento de audio entre altavoces integrados, auriculares, dispositivos Bluetooth y dispositivos AirPlay. La aplicación puede monitorear la ruta actual a través de la propiedad currentRoute y recibir notificaciones sobre cambios mediante AVAudioSession.routeChangeNotification.

Cuando se conectan auriculares Bluetooth, iOS cambia automáticamente la salida de audio a ellos si la sesión está configurada con la opción allowBluetooth. Sin esta opción, el sonido continúa a través del altavoz integrado. A partir de iOS 16, al conectar AirPods Pro, el sistema activa automáticamente la sincronización ProMotion para reducir la latencia.

Monitoreo de Cambios de Ruta

Suscribirse a routeChangeNotification permite reaccionar a la conexión y desconexión de auriculares. Cuando se desconecta un auricular Bluetooth, el reproductor debe pausar la reproducción — el usuario podría no esperar que el sonido comience a salir del altavoz del teléfono. Según Apple HIG (2026), este es un comportamiento obligatorio para aplicaciones de música.

Las propiedades availableInputs y availableOutputs devuelven una lista de dispositivos de audio disponibles con sus tipos (builtInSpeaker, headphones, bluetoothA2DP, hdmi). El desarrollador puede seleccionar programáticamente un dispositivo específico a través de overrideOutputAudioPort para escenarios de enrutamiento personalizados.

Preguntas Frecuentes

¿En qué se diferencia Audio Session de Android Audio Focus?

La diferencia clave es la arquitectura. Audio Session es una única sesión centralizada por aplicación que se configura una vez. Audio Focus en Android requiere solicitar el foco manualmente cada vez que se reproduce. Además, iOS admite la mezcla a través de la opción mixWithOthers, mientras que en Android duck es la única alternativa a la detención completa.

¿Por qué desaparece el sonido al bloquear la pantalla del iPhone?

La causa más común es una categoría incorrecta de Audio Session. Si se selecciona ambient o soloAmbient, el sonido se detiene al bloquear la pantalla. Cambie la categoría a playback y asegúrese de que Background Modes — Audio, AirPlay, and Picture in Picture esté agregado en Info.plist.

¿Cómo permitir que dos aplicaciones reproduzcan simultáneamente en iOS?

Agregue la opción .mixWithOthers a setCategory. Esto permitirá mezclar el sonido de su aplicación con otras sesiones activas. Sin esta opción, una nueva aplicación interrumpe la actual. MixWithOthers es el análogo del modo duck en Android, pero con preservación completa del volumen.

¿Cómo cambiar programáticamente el sonido a un altavoz Bluetooth?

Use overrideOutputAudioPort con nil para selección automática. Para salida forzada a Bluetooth: obtenga AVAudioSessionRouteDescription de availableOutputs, seleccione un puerto con el tipo .bluetoothA2DP y páselo a overrideOutputAudioPort. Asegúrese de que la sesión esté configurada con allowBluetooth.

¿Debo llamar a setActive(false) al pausar el reproductor?

Para la mayoría de las aplicaciones — . Desactivar la sesión al pausar permite que otras aplicaciones obtengan el foco de audio. La excepción son los reproductores de música con reproducción prolongada en segundo plano. Si la pausa es corta (menos de 5 segundos), es mejor mantener la sesión activa para una reanudación rápida.

Resumen

  • Audio Session (AVAudioSession) es la única sesión de audio por aplicación en iOS que gestiona el comportamiento del sonido a nivel del sistema operativo.
  • Seis categorías: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — definen el comportamiento básico del audio.
  • Para reproducción en segundo plano, son obligatorios la categoría playback y Background Modes en Info.plist.
  • Las interrupciones se manejan a través de NotificationCenter con tipos began (pausa) y ended (reanudación cuando shouldResume).
  • La opción .mixWithOthers activa la mezcla de sonido con otras aplicaciones sin interrupción.
  • El enrutamiento se gestiona automáticamente pero se monitorea a través de routeChangeNotification para pausar al desconectar auriculares.
  • La categoría playAndRecord con el modo voiceChat es el estándar para aplicaciones VoIP con cancelación de eco y AGC.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también