Audio Session — wat is het, categorieën en configuratie in iOS

Auteur: IT Sectr Gepubliceerd: 2026-05-24 Leestijd: 8 min

Audio Session — het centrale mechanisme van iOS voor het beheren van het audiogedrag van de app: interactie met het systeem, afhandeling van onderbrekingen en routering van geluid. Elke iOS-app krijgt één enkele audiosessie die bepaalt hoe geluid zich gedraagt bij het vergrendelen van het scherm, tijdens oproepen en het verbinden van Bluetooth. Volgens Apple Developer Documentation, 2026 wordt Audio Session geconfigureerd via categorie en modus — zonder correcte configuratie kan de app mogelijk geen geluid op de achtergrond afspelen.

Belangrijkste punten

  • Audio Session (AVAudioSession) — het systeemobject van iOS dat het audiogedrag van de app op besturingssysteemniveau beheert.
  • De categorie van de sessie bepaalt het basisgedrag: playback, record, ambient, playAndRecord en andere.
  • Modi en opties verfijnen het gedrag: default, voiceChat, videoRecording, allowBluetooth.
  • Bij onderbreking (oproep, alarm) ontvangt de sessie een melding via NotificationCenter met het type interruptionType.
  • Voor achtergrondweergave moet Background Modes — Audio, AirPlay and Picture in Picture worden geactiveerd.

Wat is Audio Session?

Audio Session — is één enkele AVAudioSession-instantie die door het systeem wordt gemaakt bij het starten van de app en gedurende de hele levenscyclus bestaat. Het fungeert als tussenpersoon tussen de app en het iOS-audiosysteem: de configuratie van de categorie bepaalt of de app geluid op de achtergrond mag afspelen, of het geluid wordt gedempt tijdens een oproep en naar welke apparaten audio wordt uitgevoerd.

In tegenstelling tot Android Audio Focus, waarbij elke app onafhankelijk focus aanvraagt en vrijgeeft, wordt iOS Audio Session centraal beheerd via één sessie per app. Bij activering van de sessie deactiveert het systeem automatisch de sessie van de vorige app en stuurt deze een onderbrekingsmelding. Dit architectuurverschil bepaalt een andere benadering van audioverwerking op de twee platforms.

Volgens WWDC 2024 Session 211 wordt ongeveer 40% van de audioproblemen in iOS-apps veroorzaakt door een onjuiste configuratie van Audio Session. De meest voorkomende fout — het kiezen van de categorie ambient in plaats van playback, waardoor geluid verdwijnt bij het vergrendelen van het scherm.

Werkingsprincipe van AVAudioSession

Bij het starten krijgt de app de sharedInstance van de sessie, stelt de categorie in via de aanroep setCategory(_:mode:options:) en activeert de sessie via setActive(true). Na activering houdt iOS rekening met het categoriebeleid voor routering. Als een andere app zijn sessie activeert, ontvangt de huidige een melding AudioSessionInterruptionType.began via Notification.Name.AVAudioSessionInterruption.

Categorieën van Audio Session

Categorie — de belangrijkste parameter van Audio Session, die zes vooraf gedefinieerde gedragsvarianten bepaalt. De keuze van de categorie is de eerste en belangrijkste beslissing bij het configureren van audio in iOS.

CategorieWanneer gebruikenAchtergrondaudioDempen bij mute
ambientSpelletjes, achtergrondeffectenNeeJa
playbackMuziek, podcasts, audioboekenJaNee
recordDictafoon, geluidsopnameNeeN.V.T.
playAndRecordVoIP, spraakberichtenJaNee
multiRouteDJ-mixers, karaokeJaNee
soloAmbientStandaard (iOS default)NeeJa

Categorie playback — de belangrijkste keuze voor spelers

Gebruik voor muziek- en videospelers altijd playback. Deze categorie maakt het mogelijk: geluid afspelen met vergrendeld scherm, met uitgeschakelde mute-schakelaar (fysieke knop op de iPhone-behuizing) en met geminimaliseerde app. Zonder de categorie playback wordt de sessie gedeactiveerd bij het vergrendelen van het scherm of minimaliseren van de app.

De categorie ambient is geschikt voor spelletjes en apps met achtergrondgeluiden — het stelt andere apps in staat om door te gaan met afspelen. Bijvoorbeeld, als de gebruiker naar muziek luistert en een spelletje opent met een ambient-sessie, blijft de muziek over de geluiden van het spelletje heen spelen. Dit is een fundamenteel verschil met Android, waar een dergelijk scenario expliciete duck-toestemming vereist.

Hoe Audio Session configureren

De configuratie van Audio Session moet worden uitgevoerd voordat er wordt afgespeeld. Het wordt aanbevolen om de sessie te configureren in de methode application(_:didFinishLaunchingWithOptions:) of in de initialisator van de speler. Na het configureren van de categorie moet de sessie worden geactiveerd.

Basisconfiguratie van Audio Session in Swift

swift
import AVFAudio

let session = AVAudioSession.sharedInstance

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

De parameter options bevat allowBluetooth (uitvoer naar Bluetooth-headset) en defaultToSpeaker (afspelen via luidspreker in plaats van oortje). De optie allowBluetooth is verplicht voor apps die Bluetooth-hoofdtelefoons ondersteunen — zonder deze optie kan geluid worden uitgevoerd via de ingebouwde luidspreker, zelfs met een aangesloten headset.

Configuratie voor opname en afspelen (VoIP)

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

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

De categorie playAndRecord met de modus voiceChat optimaliseert het audiopad voor spraakcommunicatie: inclusief echo-onderdrukking, automatische versterkingsregeling (AGC) en selectie van de optimale codec. OverrideOutputAudioPort(.speaker) forceert uitvoer via de luidspreker, zelfs met een aangesloten headset — handig voor handsfree gesprekken.

Activering en deactivering van de sessie

De aanroep setActive(true) activeert de sessie en stelt het systeem op de hoogte dat de app audio zal gebruiken. Bij pauzeren van de weergave wordt aanbevolen de sessie te deactiveren zodat andere apps de audiostream kunnen krijgen. Uitzondering — apps met langdurige achtergrondweergave (muziek, podcasts), waarbij de sessie gedurende het hele nummer actief blijft.

Het is belangrijk om fouten bij setActive af te handelen. Als een andere sessie met hoge prioriteit actief is (bijv. Telefoon tijdens een gesprek), kan setActive een fout geven. In dat geval moet u wachten op de melding AudioSessionInterruptionType.ended en de activering opnieuw proberen.

Modi en beleidsregels van Audio Session

De modus (mode) verfijnt de categorie en optimaliseert het audiopad voor een specifiek gebruikerstype. Elke modus verandert het gedrag van AGC, echo-onderdrukking en codecs. Modi vervangen de categorie niet, maar vullen deze aan — één categorie kan met verschillende modi werken.

  • default — standaardmodus voor muziek en video. AGC uitgeschakeld, echo-onderdrukking minimaal.
  • voiceChat — optimalisatie voor VoIP. Inclusief echo-onderdrukking, AGC, ruisonderdrukking. Gebruik met de categorie playAndRecord.
  • videoRecording — voor video-opname. Prioriteit van opnamekwaliteit boven weergave. Gebruik met de categorie record of playAndRecord.
  • measurement — voor audiometingen. Minimale signaalverwerking, geen AGC of echo-onderdrukking.
  • gameChat — voor spraakchat in spelletjes. Vergelijkbaar met voiceChat, maar met prioriteit voor spelgeluid.
  • moviePlayback — voor het bekijken van films. Optimalisatie voor meerkanaals audio (5.1, 7.1) en Dolby Atmos.

Opties van de Audio Session-categorie

Opties bieden fijnafstemming van het sessiegedrag. Elke optie is een vlag die met andere in een array wordt gecombineerd. Bijvoorbeeld, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] maakt het mogelijk om geluid uit te voeren naar Bluetooth-headset, standaard de luidspreker te gebruiken en te mixen met audioboeken.

In iOS 17+ verscheen de optie spatialAudio, die gepersonaliseerd ruimtelijk geluid voor AirPods inschakelt via AVAudioSessionSpatialPreferences. Volgens WWDC 2024 verhoogt ruimtelijk geluid de betrokkenheid van gebruikers van muziekapps met 25% in Apple-testen.

Afhandeling van onderbrekingen en oproepen

Onderbrekingen (interruptions) — het belangrijkste verschil tussen Audio Session en Android Audio Focus. In iOS worden onderbrekingen afgehandeld via NotificationCenter door te abonneren op AVAudioSession.interruptionNotification. De melding bevat een woordenboek met het type onderbreking: began of ended.

Abonneren op onderbrekingsmeldingen

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

Bij ontvangst van interruptionType.began moet de speler de weergave pauzeren. Bij interruptionType.ended geeft de eigenschap interruptionOptionKey aan of de speler automatisch kan hervatten (shouldResume). Als de gebruiker het gesprek heeft beëindigd, shouldResume = true. Als het gesprek is afgelopen door timeout — shouldResume = false, hervatten is niet toegestaan.

Afhandeling van onderbrekingen door andere apps

Wanneer een andere app zijn Audio Session activeert met de categorie playback, ontvangt de huidige sessie een onderbrekingsmelding. Als de andere app ambient gebruikt, vindt er geen onderbreking plaats — geluiden worden gemengd. Dit gedrag verschilt fundamenteel van Android, waar elke activering van Audio Focus een LOSS-gebeurtenis veroorzaakt.

Voor apps die moeten blijven afspelen bij activering van andere sessies (bijv. navigatie tijdens het afspelen van muziek), gebruikt u de optie .mixWithOthers. Deze optie staat het mixen van geluid met andere apps toe en er worden geen onderbrekingen verzonden. MixWithOthers — de iOS-tegenhanger van de duck-modus in Android.

Geluidsroutering en Bluetooth

Audio Session beheert automatisch de routering van geluid tussen ingebouwde luidsprekers, hoofdtelefoons, Bluetooth-headsets en AirPlay-apparaten. De app kan de huidige route volgen via de eigenschap currentRoute en meldingen van wijzigingen ontvangen via AVAudioSession.routeChangeNotification.

Bij het aansluiten van Bluetooth-hoofdtelefoons schakelt iOS automatisch de audio-uitvoer hiernaartoe als de sessie is geconfigureerd met de optie allowBluetooth. Zonder deze optie blijft het geluid via de ingebouwde luidspreker stromen. Vanaf iOS 16 schakelt het systeem bij het aansluiten van AirPods Pro automatisch ProMotion-synchronisatie in om de latentie te verminderen.

Bewaking van routewijzigingen

Abonneren op routeChangeNotification maakt het mogelijk te reageren op het aansluiten en loskoppelen van hoofdtelefoons. Bij het loskoppelen van de Bluetooth-headset moet de speler de weergave pauzeren — de gebruiker verwacht mogelijk niet dat het geluid uit de telefoonluidspreker begint te spelen. Volgens Apple HIG (2026) is dit verplicht gedrag voor muziekapps.

De eigenschappen availableInputs en availableOutputs retourneren een lijst van beschikbare audioapparaten met hun typen (builtInSpeaker, headphones, bluetoothA2DP, hdmi). De ontwikkelaar kan programmatisch een specifiek apparaat selecteren via overrideOutputAudioPort voor aangepaste routeringsscenario's.

Veelgestelde vragen

Waarin verschilt Audio Session van Android Audio Focus?

Het belangrijkste verschil — architectuur. Audio Session is één gecentraliseerde sessie per app, die eenmalig wordt geconfigureerd. Audio Focus in Android vereist handmatige focusaanvraag elke keer bij het afspelen. Bovendien ondersteunt iOS mixen via de optie mixWithOthers, terwijl in Android duck het enige alternatief is voor volledig stoppen.

Waarom verdwijnt geluid bij het vergrendelen van het iPhone-scherm?

De meest voorkomende oorzaak — een onjuiste categorie van Audio Session. Als ambient of soloAmbient is gekozen, stopt het geluid bij het vergrendelen van het scherm. Schakel de categorie over naar playback en zorg ervoor dat in Info.plist Background Modes — Audio, AirPlay, and Picture in Picture is toegevoegd.

Hoe kan ik twee apps tegelijkertijd laten afspelen in iOS?

Voeg de optie .mixWithOthers toe in setCategory. Hierdoor kan het geluid van uw app worden gemengd met andere actieve sessies. Zonder deze optie onderbreekt de nieuwe app de huidige. MixWithOthers — de tegenhanger van de duck-modus in Android, maar met volledig behoud van volume.

Hoe schakel ik programmatisch geluid naar een Bluetooth-luidspreker?

Gebruik overrideOutputAudioPort met nil voor automatische selectie. Voor geforceerde uitvoer naar Bluetooth: haal AVAudioSessionRouteDescription uit availableOutputs, selecteer de poort met type .bluetoothA2DP en geef deze door aan overrideOutputAudioPort. Zorg ervoor dat de sessie is geconfigureerd met allowBluetooth.

Moet ik setActive(false) aanroepen bij het pauzeren van de speler?

Voor de meeste apps — ja. Het deactiveren van de sessie bij pauze stelt andere apps in staat om audiofocus te krijgen. Uitzondering — muziekspelers met langdurige achtergrondweergave. Als de pauze kort is (minder dan 5 seconden), kunt u de sessie beter actief laten voor snel hervatten.

Samenvatting

  • Audio Session (AVAudioSession) — één audiosessie per app in iOS die het geluidsgedrag op besturingssysteemniveau beheert.
  • Zes categorieën: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — bepalen het basisaudiogedrag.
  • Voor achtergrondweergave zijn categorie playback en Background Modes in Info.plist verplicht.
  • Onderbrekingen worden afgehandeld via NotificationCenter met types began (pauze) en ended (hervatten bij shouldResume).
  • Optie .mixWithOthers schakelt het mixen van geluid met andere apps in zonder onderbreking.
  • Routering wordt automatisch beheerd, maar gecontroleerd via routeChangeNotification voor pauzeren bij loskoppelen van hoofdtelefoon.
  • Categorie playAndRecord met modus voiceChat — standaard voor VoIP-apps met echo-onderdrukking en AGC.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook