Audio Session — o que é, categorias e configuração no iOS

Autor: IT Sectr Publicado: 2026-05-24 Tempo de leitura: 8 min

Audio Session é o mecanismo central do iOS para gerenciar o comportamento de áudio de um aplicativo: interação com o sistema, tratamento de interrupções e roteamento de áudio. Cada aplicativo iOS recebe uma única sessão de áudio que determina como o som se comporta quando a tela está bloqueada, durante chamadas e ao conectar Bluetooth. De acordo com a Documentação do Desenvolvedor Apple, 2026, o Audio Session é configurado através de uma categoria e modo — sem a configuração correta, o aplicativo pode não reproduzir som em segundo plano.

Principais Pontos

  • Audio Session (AVAudioSession) é um objeto do sistema no iOS que gerencia o comportamento de áudio do aplicativo no nível do SO.
  • A categoria da sessão define o comportamento básico: playback, record, ambient, playAndRecord e outros.
  • Modos e opções refinam o comportamento: default, voiceChat, videoRecording, allowBluetooth.
  • Em caso de interrupção (chamada, alarme), a sessão recebe uma notificação através do NotificationCenter com o tipo interruptionType.
  • Para reprodução em segundo plano, é necessário ativar Background Modes — Audio, AirPlay and Picture in Picture.

O que é Audio Session?

Audio Session é uma única instância do AVAudioSession criada pelo sistema quando um aplicativo é iniciado e existe durante todo o seu ciclo de vida. Atua como intermediário entre o aplicativo e o sistema de áudio do iOS: a configuração da categoria determina se o aplicativo pode reproduzir som em segundo plano, se o som será silenciado durante uma chamada e para quais dispositivos enviar o áudio.

Ao contrário do Android Audio Focus, onde cada aplicativo solicita e libera o foco de forma independente, o Audio Session do iOS é gerenciado centralmente através de uma sessão por aplicativo. Quando uma sessão é ativada, o sistema desativa automaticamente a sessão do aplicativo anterior, enviando-lhe uma notificação de interrupção. Essa diferença arquitetural define as diferentes abordagens para o tratamento de áudio nas duas plataformas.

De acordo com a Sessão 211 da WWDC 2024, cerca de 40% dos problemas de áudio em aplicativos iOS são causados por configuração incorreta do Audio Session. O erro mais comum é escolher a categoria ambient em vez de playback, o que faz o som desaparecer quando a tela é bloqueada.

Como o AVAudioSession Funciona

Ao iniciar, o aplicativo obtém o sharedInstance da sessão, define a categoria através da chamada setCategory(_:mode:options:) e ativa a sessão através de setActive(true). Após a ativação, o iOS considera as políticas de categoria para o roteamento. Se outro aplicativo ativar sua sessão, o atual recebe uma notificação AudioSessionInterruptionType.began através do Notification.Name.AVAudioSessionInterruption.

Categorias de Audio Session

A categoria é o parâmetro principal do Audio Session, definindo seis opções predefinidas de comportamento. Escolher uma categoria é a primeira e mais importante decisão ao configurar áudio no iOS.

CategoriaQuando UsarÁudio em Segundo PlanoSilêncio Afeta
ambientJogos, efeitos de fundoNãoSim
playbackMúsica, podcasts, audiolivrosSimNão
recordGravador de voz, gravação de áudioNãoN/D
playAndRecordVoIP, mensagens de vozSimNão
multiRouteMixers DJ, karaokêSimNão
soloAmbientPadrão (iOS default)NãoSim

Categoria Playback — a Principal Escolha para Players

Para players de música e vídeo, use sempre playback. Esta categoria permite: reproduzir som com a tela bloqueada, com o interruptor de silêncio desligado (botão físico no iPhone) e com o aplicativo em segundo plano. Sem a categoria playback, a sessão é desativada ao bloquear a tela ou minimizar o aplicativo.

A categoria ambient é adequada para jogos e aplicativos com sons de fundo — permite que outros aplicativos continuem reproduzindo. Por exemplo, se um usuário está ouvindo música e abre um jogo com uma sessão ambient, a música continua tocando sobre os sons do jogo. Esta é uma diferença fundamental do Android, onde tal cenário requer permissão explícita de duck.

Como Configurar Audio Session

A configuração do Audio Session deve ser feita antes de iniciar qualquer reprodução. Recomenda-se configurar a sessão no método application(_:didFinishLaunchingWithOptions:) ou no inicializador do player. Após definir a categoria, a sessão deve ser ativada.

Configuração Básica de Audio Session em Swift

swift
import AVFAudio

let session = AVAudioSession.sharedInstance

do {
    try session.setCategory(
        playback,
        mode: default,
        options: [allowBluetooth, defaultToSpeaker]
    )
    try session.setActive(true)
} catch {
    print("Falha na configuração do Audio Session: \(error.localizedDescription)")
}

O parâmetro options inclui allowBluetooth (saída para fone Bluetooth) e defaultToSpeaker (reprodução através do alto-falante em vez do auricular). A opção allowBluetooth é obrigatória para aplicativos que suportam fones Bluetooth — sem ela, o som pode ser direcionado ao alto-falante integrado mesmo com um fone conectado.

Configuração para Gravação e Reprodução (VoIP)

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

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

A categoria playAndRecord com o modo voiceChat otimiza o caminho de áudio para comunicação por voz: ativa o cancelamento de eco, controle automático de ganho (AGC) e seleciona o codec ideal. OverrideOutputAudioPort(.speaker) força a saída pelo alto-falante mesmo com um fone conectado — útil para viva-voz.

Ativação e Desativação da Sessão

Chamar setActive(true) ativa a sessão e notifica o sistema que o aplicativo usará áudio. Quando a reprodução é pausada, recomenda-se desativar a sessão para que outros aplicativos possam obter o fluxo de áudio. A exceção são aplicativos com reprodução prolongada em segundo plano (música, podcasts), onde a sessão permanece ativa durante toda a faixa.

É importante tratar erros ao chamar setActive. Se outra sessão com alta prioridade estiver ativa (por exemplo, Telefone durante uma chamada), setActive pode lançar um erro. Neste caso, aguarde a notificação AudioSessionInterruptionType.ended e tente a ativação novamente.

Modos e Políticas de Audio Session

O modo refina a categoria e otimiza o caminho de áudio para um caso de uso específico. Cada modo altera o comportamento do AGC, cancelamento de eco e codecs. Os modos não substituem a categoria, mas a complementam — uma categoria pode funcionar com diferentes modos.

  • default — modo padrão para música e vídeo. AGC desligado, cancelamento de eco mínimo.
  • voiceChat — otimização para VoIP. Ativa cancelamento de eco, AGC, supressão de ruído. Use com a categoria playAndRecord.
  • videoRecording — para gravação de vídeo. Prioriza a qualidade da gravação sobre a reprodução. Use com a categoria record ou playAndRecord.
  • measurement — para medições de áudio. Processamento mínimo de sinal, sem AGC ou cancelamento de eco.
  • gameChat — para chat de voz em jogos. Similar ao voiceChat, mas com prioridade para o áudio do jogo.
  • moviePlayback — para assistir filmes. Otimização para áudio multicanal (5.1, 7.1) e Dolby Atmos.

Opções de Categoria de Audio Session

As opções fornecem ajuste fino do comportamento da sessão. Cada opção é uma flag que pode ser combinada com outras em um array. Por exemplo, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] permite a saída de som para um fone Bluetooth, usa o alto-falante por padrão e se mistura com audiolivros.

No iOS 17+, surgiu a opção spatialAudio, que ativa o áudio espacial personalizado para AirPods através do AVAudioSessionSpatialPreferences. Segundo a WWDC 2024, o áudio espacial aumenta o engajamento dos usuários em aplicativos de música em 25% nos testes da Apple.

Tratamento de Interrupções e Chamadas

As interrupções são uma diferença chave entre Audio Session e Android Audio Focus. No iOS, as interrupções são tratadas através do NotificationCenter assinando o AVAudioSession.interruptionNotification. A notificação contém um dicionário com o tipo de interrupção: began ou ended.

Assinando Notificações de Interrupção

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()
        }
    }

Ao receber interruptionType.began, o player deve pausar a reprodução. Ao receber interruptionType.ended, a propriedade interruptionOptionKey indica se o player pode retomar automaticamente (shouldResume). Se o usuário recusou a chamada, shouldResume = true. Se a chamada terminou por tempo limite — shouldResume = false, a retomada não é permitida.

Tratamento de Interrupções de Outros Aplicativos

Quando outro aplicativo ativa seu Audio Session com a categoria playback, a sessão atual recebe uma notificação de interrupção. Se outro aplicativo usar ambient, nenhuma interrupção ocorre — os sons são misturados. Este comportamento é drasticamente diferente do Android, onde qualquer ativação do Audio Focus desencadeia um evento LOSS.

Para aplicativos que precisam continuar a reprodução quando outras sessões são ativadas (por exemplo, navegação enquanto a música toca), use a opção .mixWithOthers. Esta opção permite a mistura de som com outros aplicativos e nenhuma interrupção é enviada. MixWithOthers é o equivalente iOS do modo duck no Android.

Roteamento de Áudio e Bluetooth

O Audio Session gerencia automaticamente o roteamento de áudio entre alto-falantes integrados, fones de ouvido, headsets Bluetooth e dispositivos AirPlay. O aplicativo pode monitorar a rota atual através da propriedade currentRoute e receber notificações sobre mudanças via AVAudioSession.routeChangeNotification.

Quando fones Bluetooth são conectados, o iOS alterna automaticamente a saída de áudio para eles se a sessão estiver configurada com a opção allowBluetooth. Sem esta opção, o som continua pelo alto-falante integrado. A partir do iOS 16, ao conectar AirPods Pro, o sistema ativa automaticamente a sincronização ProMotion para reduzir a latência.

Monitorando Mudanças de Rota

Assinar o routeChangeNotification permite reagir à conexão e desconexão de fones. Quando um headset Bluetooth é desconectado, o player deve pausar a reprodução — o usuário pode não esperar que o som comece a sair do alto-falante do telefone. De acordo com as Apple HIG (2026), este é um comportamento obrigatório para aplicativos de música.

As propriedades availableInputs e availableOutputs retornam uma lista de dispositivos de áudio disponíveis com seus tipos (builtInSpeaker, headphones, bluetoothA2DP, hdmi). O desenvolvedor pode selecionar programaticamente um dispositivo específico através do overrideOutputAudioPort para cenários de roteamento personalizados.

Perguntas Frequentes

Como o Audio Session difere do Android Audio Focus?

A diferença principal é a arquitetura. Audio Session é uma única sessão centralizada por aplicativo que é configurada uma vez. O Audio Focus no Android requer solicitação manual de foco cada vez que reproduz. Além disso, o iOS suporta mixagem através da opção mixWithOthers, enquanto no Android duck é a única alternativa à parada completa.

Por que o som desaparece quando a tela do iPhone é bloqueada?

A causa mais comum é uma categoria incorreta do Audio Session. Se ambient ou soloAmbient for selecionado, o som para quando a tela é bloqueada. Mude a categoria para playback e certifique-se de que Background Modes — Audio, AirPlay, and Picture in Picture está adicionado ao Info.plist.

Como permitir que dois aplicativos reproduzam simultaneamente no iOS?

Adicione a opção .mixWithOthers ao setCategory. Isso permitirá misturar o som do seu aplicativo com outras sessões ativas. Sem esta opção, um novo aplicativo interrompe o atual. MixWithOthers é o análogo do modo duck no Android, mas com preservação total do volume.

Como alternar programaticamente o som para um alto-falante Bluetooth?

Use overrideOutputAudioPort com nil para seleção automática. Para saída forçada ao Bluetooth: obtenha o AVAudioSessionRouteDescription do availableOutputs, selecione uma porta com o tipo .bluetoothA2DP e passe-a ao overrideOutputAudioPort. Certifique-se de que a sessão está configurada com allowBluetooth.

Devo chamar setActive(false) ao pausar o player?

Para a maioria dos aplicativos — sim. Desativar a sessão ao pausar permite que outros aplicativos obtenham o foco de áudio. A exceção são players de música com reprodução prolongada em segundo plano. Se a pausa for curta (menos de 5 segundos), é melhor manter a sessão ativa para retomada rápida.

Resumo

  • Audio Session (AVAudioSession) é a única sessão de áudio por aplicativo no iOS que gerencia o comportamento do som no nível do SO.
  • Seis categorias: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — definem o comportamento básico do áudio.
  • Para reprodução em segundo plano, a categoria playback e Background Modes no Info.plist são obrigatórios.
  • As interrupções são tratadas através do NotificationCenter com tipos began (pausa) e ended (retomada quando shouldResume).
  • A opção .mixWithOthers ativa a mixagem de som com outros aplicativos sem interrupção.
  • O roteamento é gerenciado automaticamente, mas monitorado através do routeChangeNotification para pausar ao desconectar fones.
  • A categoria playAndRecord com modo voiceChat é o padrão para aplicativos VoIP com cancelamento de eco e AGC.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também