Audio Session — qu’est-ce que c’est, catégories et configuration dans iOS

Auteur : IT Sectr Publié le : 2026-05-24 Temps de lecture : 8 min

Audio Session est le mécanisme central d’iOS pour gérer le comportement audio d’une application : interaction avec le système, gestion des interruptions et routage audio. Chaque application iOS reçoit une session audio unique qui détermine comment le son se comporte lorsque l’écran est verrouillé, pendant les appels et lors de la connexion Bluetooth. Selon la Documentation Développeur Apple, 2026, Audio Session se configure via une catégorie et un mode — sans configuration correcte, l’application peut ne pas lire le son en arrière-plan.

Points clés

  • Audio Session (AVAudioSession) est un objet système dans iOS qui gère le comportement audio de l’application au niveau du système d’exploitation.
  • La catégorie de session définit le comportement de base : playback, record, ambient, playAndRecord et autres.
  • Les modes et options affinent le comportement : default, voiceChat, videoRecording, allowBluetooth.
  • En cas d’interruption (appel, alarme), la session reçoit une notification via NotificationCenter avec le type interruptionType.
  • Pour la lecture en arrière-plan, il est nécessaire d’activer Background Modes — Audio, AirPlay and Picture in Picture.

Qu’est-ce qu’Audio Session ?

Audio Session est une instance unique d’AVAudioSession créée par le système au lancement d’une application et qui existe pendant tout son cycle de vie. Elle agit comme intermédiaire entre l’application et le système audio d’iOS : la configuration de la catégorie détermine si l’application peut lire du son en arrière-plan, si le son sera coupé pendant un appel et vers quels périphériques sortir l’audio.

Contrairement à Android Audio Focus, où chaque application demande et libère le focus de manière indépendante, Audio Session d’iOS est géré de manière centralisée via une session par application. Lorsqu’une session est activée, le système désactive automatiquement la session de l’application précédente, lui envoyant une notification d’interruption. Cette différence architecturale définit les différentes approches de gestion audio sur les deux plateformes.

Selon la session 211 de la WWDC 2024, environ 40 % des problèmes audio dans les applications iOS sont causés par une configuration incorrecte d’Audio Session. L’erreur la plus fréquente est de choisir la catégorie ambient au lieu de playback, ce qui fait disparaître le son lorsque l’écran est verrouillé.

Comment fonctionne AVAudioSession

Au lancement, l’application obtient le sharedInstance de la session, définit la catégorie via l’appel setCategory(_:mode:options:) et active la session via setActive(true). Après l’activation, iOS prend en compte les politiques de catégorie pour le routage. Si une autre application active sa session, la session actuelle reçoit une notification AudioSessionInterruptionType.began via Notification.Name.AVAudioSessionInterruption.

Catégories d’Audio Session

La catégorie est le paramètre principal d’Audio Session, définissant six options de comportement prédéfinies. Choisir une catégorie est la première et la plus importante décision lors de la configuration audio dans iOS.

CatégorieQuand l’utiliserAudio en arrière-planSilence affecte
ambientJeux, effets d’arrière-planNonOui
playbackMusique, podcasts, livres audioOuiNon
recordDictaphone, enregistrement audioNonN/D
playAndRecordVoIP, messages vocauxOuiNon
multiRouteMixeurs DJ, karaokéOuiNon
soloAmbientPar défaut (iOS default)NonOui

Catégorie Playback — le choix principal pour les lecteurs

Pour les lecteurs de musique et de vidéo, utilisez toujours playback. Cette catégorie permet : de lire du son avec l’écran verrouillé, avec l’interrupteur silence désactivé (bouton physique sur l’iPhone) et avec l’application en arrière-plan. Sans la catégorie playback, la session est désactivée lors du verrouillage de l’écran ou de la minimisation de l’application.

La catégorie ambient convient aux jeux et aux applications avec des sons d’arrière-plan — elle permet aux autres applications de continuer à lire. Par exemple, si un utilisateur écoute de la musique et ouvre un jeu avec une session ambient, la musique continue de jouer par-dessus les sons du jeu. C’est une différence fondamentale avec Android, où un tel scénario nécessite une autorisation explicite de duck.

Comment configurer Audio Session

La configuration d’Audio Session doit être effectuée avant le début de toute lecture. Il est recommandé de configurer la session dans la méthode application(_:didFinishLaunchingWithOptions:) ou dans l’initialisateur du lecteur. Après avoir défini la catégorie, la session doit être activée.

Configuration de base d’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("Échec de configuration d’Audio Session : \(error.localizedDescription)")
}

Le paramètre options inclut allowBluetooth (sortie vers un casque Bluetooth) et defaultToSpeaker (lecture via le haut-parleur plutôt que l’écouteur). L’option allowBluetooth est obligatoire pour les applications prenant en charge les casques Bluetooth — sans elle, le son peut êre dirigé vers le haut-parleur intégré même lorsqu’un casque est connecté.

Configuration pour l’enregistrement et la lecture (VoIP)

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

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

La catégorie playAndRecord avec le mode voiceChat optimise le chemin audio pour la communication vocale : active la suppression d’écho, le contrôle automatique de gain (AGC) et sélectionne le codec optimal. OverrideOutputAudioPort(.speaker) force la sortie via le haut-parleur même lorsqu’un casque est connecté — utile pour le haut-parleur.

Activation et désactivation de la session

L’appel à setActive(true) active la session et notifie le système que l’application utilisera l’audio. Lorsque la lecture est mise en pause, il est recommandé de désactiver la session pour que d’autres applications puissent obtenir le flux audio. L’exception concerne les applications avec une lecture prolongée en arrière-plan (musique, podcasts), où la session reste active pendant tout le morceau.

Il est important de gérer les erreurs lors de l’appel à setActive. Si une autre session de haute priorité est active (par exemple, Téléphone pendant un appel), setActive peut générer une erreur. Dans ce cas, attendez la notification AudioSessionInterruptionType.ended et réessayez l’activation.

Modes et politiques d’Audio Session

Le mode affine la catégorie et optimise le chemin audio pour un cas d’utilisation spécifique. Chaque mode modifie le comportement de l’AGC, de la suppression d’écho et des codecs. Les modes ne remplacent pas la catégorie mais la complètent — une catégorie peut fonctionner avec différents modes.

  • default — mode standard pour la musique et la vidéo. AGC désactivé, suppression d’écho minimale.
  • voiceChat — optimisation pour VoIP. Active la suppression d’écho, l’AGC, la réduction de bruit. Utilisez avec la catégorie playAndRecord.
  • videoRecording — pour l’enregistrement vidéo. Priorise la qualité d’enregistrement sur la lecture. Utilisez avec la catégorie record ou playAndRecord.
  • measurement — pour les mesures audio. Traitement minimal du signal, pas d’AGC ni de suppression d’écho.
  • gameChat — pour le chat vocal dans les jeux. Similaire à voiceChat, mais avec priorité pour l’audio du jeu.
  • moviePlayback — pour regarder des films. Optimisation pour l’audio multicanal (5.1, 7.1) et Dolby Atmos.

Options de catégorie d’Audio Session

Les options offrent un réglage fin du comportement de la session. Chaque option est un indicateur qui peut êre combiné avec d’autres dans un tableau. Par exemple, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] permet la sortie sonore vers un casque Bluetooth, utilise le haut-parleur par défaut et se mélange avec les livres audio.

Sur iOS 17+, l’option spatialAudio est apparue, qui active l’audio spatial personnalisé pour AirPods via AVAudioSessionSpatialPreferences. Selon la WWDC 2024, l’audio spatial augmente l’engagement des utilisateurs dans les applications musicales de 25 % dans les tests d’Apple.

Gestion des interruptions et des appels

Les interruptions sont une différence clé entre Audio Session et Android Audio Focus. Sous iOS, les interruptions sont gérées via NotificationCenter en s’abonnant à AVAudioSession.interruptionNotification. La notification contient un dictionnaire avec le type d’interruption : began ou ended.

Abonnement aux notifications d’interruption

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

Lors de la réception de interruptionType.began, le lecteur doit mettre en pause la lecture. Lors de la réception de interruptionType.ended, la propriété interruptionOptionKey indique si le lecteur peut reprendre automatiquement (shouldResume). Si l’utilisateur a refusé l’appel, shouldResume = true. Si l’appel s’est terminé par un délai d’attente — shouldResume = false, la reprise n’est pas autorisée.

Gestion des interruptions provenant d’autres applications

Lorsqu’une autre application active son Audio Session avec la catégorie playback, la session actuelle reçoit une notification d’interruption. Si une autre application utilise ambient, aucune interruption ne se produit — les sons sont mélangés. Ce comportement est radicalement différent d’Android, où toute activation d’Audio Focus déclenche un événement LOSS.

Pour les applications qui doivent continuer la lecture lors de l’activation d’autres sessions (par exemple, la navigation pendant la lecture de musique), utilisez l’option .mixWithOthers. Cette option permet le mélange du son avec d’autres applications et aucune interruption n’est envoyée. MixWithOthers est l’équivalent iOS du mode duck dans Android.

Routage audio et Bluetooth

Audio Session gère automatiquement le routage audio entre les haut-parleurs intégrés, les écouteurs, les casques Bluetooth et les périphériques AirPlay. L’application peut surveiller la route actuelle via la propriété currentRoute et recevoir des notifications de changement via AVAudioSession.routeChangeNotification.

Lorsque des écouteurs Bluetooth sont connectés, iOS bascule automatiquement la sortie audio vers eux si la session est configurée avec l’option allowBluetooth. Sans cette option, le son continue via le haut-parleur intégré. À partir d’iOS 16, lors de la connexion d’AirPods Pro, le système active automatiquement la synchronisation ProMotion pour réduire la latence.

Surveillance des changements de route

S’abonner à routeChangeNotification permet de réagir à la connexion et la déconnexion des écouteurs. Lorsqu’un casque Bluetooth est déconnecté, le lecteur doit mettre en pause la lecture — l’utilisateur pourrait ne pas s’attendre à ce que le son commence à sortir du haut-parleur du téléphone. Selon Apple HIG (2026), c’est un comportement obligatoire pour les applications musicales.

Les propriétés availableInputs et availableOutputs retournent une liste des périphériques audio disponibles avec leurs types (builtInSpeaker, headphones, bluetoothA2DP, hdmi). Le développeur peut sélectionner programmatiquement un périphérique spécifique via overrideOutputAudioPort pour des scénarios de routage personnalisés.

Foire aux questions

En quoi Audio Session diffère-t-il d’Android Audio Focus ?

La différence clé est l’architecture. Audio Session est une session centralisée unique par application configurée une fois. Android Audio Focus nécessite une demande manuelle de focus à chaque lecture. De plus, iOS prend en charge le mélange via l’option mixWithOthers, tandis que sur Android, duck est la seule alternative à l’arrêt complet.

Pourquoi le son disparaît-il lorsque l’écran de l’iPhone est verrouillé ?

La cause la plus fréquente est une catégorie Audio Session incorrecte. Si ambient ou soloAmbient est sélectionné, le son s’arrête lorsque l’écran est verrouillé. Basculez la catégorie sur playback et assurez-vous que Background Modes — Audio, AirPlay, and Picture in Picture est ajouté dans Info.plist.

Comment permettre à deux applications de lire simultanément sur iOS ?

Ajoutez l’option .mixWithOthers à setCategory. Cela permettra de mélanger le son de votre application avec d’autres sessions actives. Sans cette option, une nouvelle application interrompt l’application en cours. MixWithOthers est l’analogue du mode duck dans Android, mais avec une préservation complète du volume.

Comment basculer programmatiquement le son vers un haut-parleur Bluetooth ?

Utilisez overrideOutputAudioPort avec nil pour la sélection automatique. Pour une sortie forcée vers Bluetooth : obtenez AVAudioSessionRouteDescription à partir d’availableOutputs, sélectionnez un port de type .bluetoothA2DP et transmettez-le à overrideOutputAudioPort. Assurez-vous que la session est configurée avec allowBluetooth.

Dois-je appeler setActive(false) lors de la mise en pause du lecteur ?

Pour la plupart des applications — oui. La désactivation de la session en pause permet aux autres applications d’obtenir le focus audio. L’exception concerne les lecteurs de musique avec une lecture prolongée en arrière-plan. Si la pause est courte (moins de 5 secondes), il est préférable de garder la session active pour une reprise rapide.

Résumé

  • Audio Session (AVAudioSession) est la session audio unique par application dans iOS qui gère le comportement sonore au niveau du système d’exploitation.
  • Six catégories : ambient, playback, record, playAndRecord, multiRoute, soloAmbient — définissent le comportement audio de base.
  • Pour la lecture en arrière-plan, la catégorie playback et Background Modes dans Info.plist sont obligatoires.
  • Les interruptions sont gérées via NotificationCenter avec les types began (pause) et ended (reprise lorsque shouldResume).
  • L’option .mixWithOthers active le mélange sonore avec d’autres applications sans interruption.
  • Le routage est géré automatiquement mais surveillé via routeChangeNotification pour mettre en pause lors de la déconnexion des écouteurs.
  • La catégorie playAndRecord avec le mode voiceChat est la norme pour les applications VoIP avec suppression d’écho et AGC.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi