Audio Session — ce este, categorii și configurare în iOS

Autor: IT Sectr Publicat: 2026-05-24 Timp de citire: 8 min

Audio Session — mecanismul central iOS pentru gestionarea comportamentului audio al aplicației: interacțiunea cu sistemul, gestionarea întreruperilor și rutarea sunetului. Fiecare aplicație iOS primește o singură sesiune audio care determină cum se comportă sunetul la blocarea ecranului, în timpul apelurilor și la conectarea Bluetooth. Conform Apple Developer Documentation, 2026, Audio Session se configurează prin categorie și mod — fără o configurare corectă, aplicația poate să nu redea sunet în fundal.

Principalele puncte

  • Audio Session (AVAudioSession) — obiectul de sistem iOS care gestionează comportamentul audio al aplicației la nivelul sistemului de operare.
  • Categoria sesiunii determină comportamentul de bază: playback, record, ambient, playAndRecord și altele.
  • Modurile și opțiunile detaliază comportamentul: default, voiceChat, videoRecording, allowBluetooth.
  • La întrerupere (apel, alarmă) sesiunea primește o notificare prin NotificationCenter cu tipul interruptionType.
  • Pentru redarea în fundal este necesară activarea Background Modes — Audio, AirPlay and Picture in Picture.

Ce este Audio Session?

Audio Session — este o singură instanță AVAudioSession creată de sistem la pornirea aplicației și care există pe tot parcursul ciclului său de viață. Acesta acționează ca un intermediar între aplicație și sistemul audio iOS: configurarea categoriei determină dacă aplicația poate reda sunet în fundal, dacă sunetul va fi redus în timpul unui apel și pe ce dispozitive să fie trimis sunetul.

Spre deosebire de Android Audio Focus, unde fiecare aplicație solicită și eliberează focalizarea independent, iOS Audio Session este gestionată centralizat printr-o singură sesiune per aplicație. La activarea sesiunii, sistemul dezactivează automat sesiunea aplicației anterioare, trimițându-i o notificare de întrerupere. Această diferență arhitecturală determină o abordare diferită a gestionării audio pe cele două platforme.

Conform WWDC 2024 Session 211, aproximativ 40% din problemele audio în aplicațiile iOS sunt cauzate de configurarea incorectă a Audio Session. Cea mai frecventă eroare — alegerea categoriei ambient în loc de playback, ceea ce face ca sunetul să dispară la blocarea ecranului.

Principiul de funcționare AVAudioSession

La pornire, aplicația primește sharedInstance al sesiunii, setează categoria prin apelul setCategory(_:mode:options:) și activează sesiunea prin setActive(true). După activare, iOS ia în considerare politicile categoriei pentru rutare. Dacă o altă aplicație își activează sesiunea, cea curentă primește notificarea AudioSessionInterruptionType.began prin Notification.Name.AVAudioSessionInterruption.

Categoriile Audio Session

Categoria — parametrul principal al Audio Session, care definește șase variante predefinite de comportament. Alegerea categoriei este prima și cea mai importantă decizie la configurarea audio în iOS.

CategorieCând să folosițiAudio în fundalAtenuare la mut
ambientJocuri, efecte de fundalNuDa
playbackMuzică, podcasturi, cărți audioDaNu
recordReportofon, înregistrare audioNuN/A
playAndRecordVoIP, mesaje vocaleDaNu
multiRouteMixere DJ, karaokeDaNu
soloAmbientImplicit (iOS default)NuDa

Categoria playback — alegerea principală pentru playere

Pentru playerele muzicale și video folosiți întotdeauna playback. Această categorie permite: redarea sunetului cu ecranul blocat, cu comutatorul mut dezactivat (butonul fizic de pe carcasa iPhone) și cu aplicația minimizată. Fără categoria playback, sesiunea se dezactivează la blocarea ecranului sau minimizarea aplicației.

Categoria ambient este potrivită pentru jocuri și aplicații cu sunete de fundal — permite altor aplicații să continue redarea. De exemplu, dacă utilizatorul ascultă muzică și deschide un joc cu sesiune ambient, muzica continuă să redea peste sunetele jocului. Aceasta este o diferență fundamentală față de Android, unde un astfel de scenariu necesită permisiunea explicită duck.

Cum se configurează Audio Session

Configurarea Audio Session trebuie efectuată înainte de începerea oricărei redări. Se recomandă configurarea sesiunii în metoda application(_:didFinishLaunchingWithOptions:) sau în inițializatorul playerului. După configurarea categoriei, sesiunea trebuie activată.

Configurarea de bază Audio Session în Swift

swift
import AVFAudio

let session = AVAudioSession.sharedInstance

do {
    try session.setCategory(
        playback,
        mode: default,
        options: [allowBluetooth, defaultToSpeaker]
    )
    try session.setActive(true)
} catch {
    print("Configurarea Audio Session a eșuat: \(error.localizedDescription)")
}

Parametrul options include allowBluetooth (ieșire pe casca Bluetooth) și defaultToSpeaker (redare prin difuzor, nu prin cel de convorbire). Opțiunea allowBluetooth este obligatorie pentru aplicațiile care suportă căști Bluetooth — fără ea, sunetul poate fi redat prin difuzorul încorporat chiar și cu casca conectată.

Configurarea pentru înregistrare și redare (VoIP)

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

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

Categoria playAndRecord cu modul voiceChat optimizează calea audio pentru comunicarea vocală: include suprimarea ecoului, reglarea automată a amplificării (AGC) și selectarea codecului optim. OverrideOutputAudioPort(.speaker) forțează ieșirea prin difuzor chiar și cu casca conectată — util pentru convorbiri în regim hands-free.

Activarea și dezactivarea sesiunii

Apelul setActive(true) activează sesiunea și notifică sistemul că aplicația va folosi audio. La pauzarea redării, se recomandă dezactivarea sesiunii pentru ca alte aplicații să poată obține fluxul audio. Excepție — aplicațiile cu redare lungă în fundal (muzică, podcasturi), unde sesiunea rămâne activă pe tot parcursul melodiei.

Este important să gestionați erorile la setActive. Dacă o altă sesiune cu prioritate mare este activă (de exemplu, Telefon în timpul unui apel), setActive poate genera o eroare. În acest caz, trebuie să așteptați notificarea AudioSessionInterruptionType.ended și să reîncerce activarea.

Modurile și politicile Audio Session

Modul (mode) detaliază categoria și optimizează calea audio pentru un anumit tip de utilizare. Fiecare mod modifică comportamentul AGC, al suprimării ecoului și al codecurilor. Modurile nu înlocuiesc categoria, ci o completează — o categorie poate funcționa cu diferite moduri.

  • default — modul standard pentru muzică și video. AGC dezactivat, suprimarea ecoului minimă.
  • voiceChat — optimizare pentru VoIP. Include suprimarea ecoului, AGC, reducerea zgomotului. Folosiți cu categoria playAndRecord.
  • videoRecording — pentru înregistrarea video. Prioritate calității înregistrării față de redare. Folosiți cu categoria record sau playAndRecord.
  • measurement — pentru măsurători audio. Procesare minimă a semnalului, fără AGC sau suprimare a ecoului.
  • gameChat — pentru chat vocal în jocuri. Similar cu voiceChat, dar cu prioritatea sunetului jocului.
  • moviePlayback — pentru vizionarea filmelor. Optimizare pentru audio multicanal (5.1, 7.1) și Dolby Atmos.

Opțiunile categoriei Audio Session

Opțiunile oferă reglarea fină a comportamentului sesiunii. Fiecare opțiune este un flag care se combină cu altele într-un tablou. De exemplu, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] permite ieșirea sunetului pe casca Bluetooth, utilizarea difuzorului implicit și mixarea cu cărțile audio.

În iOS 17+ a apărut opțiunea spatialAudio, care activează sunetul spațial personalizat pentru AirPods prin AVAudioSessionSpatialPreferences. Conform WWDC 2024, sunetul spațial crește implicarea utilizatorilor aplicațiilor muzicale cu 25% în testele Apple.

Gestionarea întreruperilor și apelurilor

Întreruperile (interruptions) — diferența cheie dintre Audio Session și Android Audio Focus. În iOS, întreruperile sunt gestionate prin NotificationCenter prin abonarea la AVAudioSession.interruptionNotification. Notificarea conține un dicționar cu tipul întreruperii: began sau ended.

Abonarea la notificările de întrerupere

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

La primirea interruptionType.began, playerul trebuie să întrerupă redarea. La interruptionType.ended, proprietatea interruptionOptionKey indică dacă playerul poate relua automat (shouldResume). Dacă utilizatorul a terminat apelul, shouldResume = true. Dacă apelul s-a încheiat prin timeout — shouldResume = false, reluarea nu este permisă.

Gestionarea întreruperilor de la alte aplicații

Când o altă aplicație își activează Audio Session cu categoria playback, sesiunea curentă primește o notificare de întrerupere. Dacă cealaltă aplicație folosește ambient, întreruperea nu are loc — sunetele sunt mixate. Acest comportament diferă radical de Android, unde orice activare a Audio Focus declanșează evenimentul LOSS.

Pentru aplicațiile care trebuie să continue redarea la activarea altor sesiuni (de exemplu, navigația în timpul redării muzicii), folosiți opțiunea .mixWithOthers. Această opțiune permite mixarea sunetului cu alte aplicații, iar întreruperile nu sunt trimise. MixWithOthers — echivalentul iOS al modului duck în Android.

Rutarea sunetului și Bluetooth

Audio Session gestionează automat rutarea sunetului între difuzoarele încorporate, căști, căștile Bluetooth și dispozitivele AirPlay. Aplicația poate urmări ruta curentă prin proprietatea currentRoute și poate primi notificări de modificare prin AVAudioSession.routeChangeNotification.

La conectarea căștilor Bluetooth, iOS comută automat ieșirea audio pe acestea dacă sesiunea este configurată cu opțiunea allowBluetooth. Fără această opțiune, sunetul continuă să fie redat prin difuzorul încorporat. Începând cu iOS 16, la conectarea AirPods Pro, sistemul activează automat sincronizarea ProMotion pentru reducerea întârzierii.

Monitorizarea schimbării rutei

Abonarea la routeChangeNotification permite reacționarea la conectarea și deconectarea căștilor. La deconectarea căștii Bluetooth, playerul trebuie să întrerupă redarea — utilizatorul s-ar putea să nu se aștepte ca sunetul să înceapă să se redea din difuzorul telefonului. Conform Apple HIG (2026), acesta este un comportament obligatoriu pentru aplicațiile muzicale.

Proprietățile availableInputs și availableOutputs returnează lista dispozitivelor audio disponibile cu tipurile lor (builtInSpeaker, headphones, bluetoothA2DP, hdmi). Dezvoltatorul poate selecta programatic un anumit dispozitiv prin overrideOutputAudioPort pentru scenarii de rutare personalizate.

Întrebări frecvente

Cu ce diferă Audio Session de Android Audio Focus?

Diferența cheie — arhitectura. Audio Session este o sesiune centralizată per aplicație, configurată o singură dată. Audio Focus în Android necesită solicitarea manuală a focalizării de fiecare dată la redare. În plus, iOS suportă mixarea prin opțiunea mixWithOthers, iar în Android duck este singura alternativă la oprirea completă.

De ce dispare sunetul la blocarea ecranului iPhone?

Cea mai frecventă cauză — categoria incorectă a Audio Session. Dacă a fost selectată ambient sau soloAmbient, sunetul se oprește la blocarea ecranului. Schimbați categoria la playback și asigurați-vă că în Info.plist a fost adăugat Background Modes — Audio, AirPlay, and Picture in Picture.

Cum pot permite două aplicații să redea simultan în iOS?

Adăugați opțiunea .mixWithOthers în setCategory. Aceasta va permite mixarea sunetului aplicației dvs. cu alte sesiuni active. Fără această opțiune, noua aplicație o întrerupe pe cea curentă. MixWithOthers — echivalentul modului duck în Android, dar cu păstrarea completă a volumului.

Cum se comută programatic sunetul pe difuzorul Bluetooth?

Folosiți overrideOutputAudioPort cu nil pentru selecția automată. Pentru ieșire forțată pe Bluetooth: obțineți AVAudioSessionRouteDescription din availableOutputs, selectați portul cu tipul .bluetoothA2DP și transmiteți-l la overrideOutputAudioPort. Asigurați-vă că sesiunea este configurată cu allowBluetooth.

Trebuie să apelez setActive(false) la pauzarea playerului?

Pentru majoritatea aplicațiilor — da. Dezactivarea sesiunii la pauză permite altor aplicații să obțină focalizarea audio. Excepție — playerele muzicale cu redare lungă în fundal. Dacă pauza este scurtă (mai puțin de 5 secunde), este mai bine să lăsați sesiunea activă pentru reluarea rapidă.

Rezumat

  • Audio Session (AVAudioSession) — o singură sesiune audio per aplicație în iOS, care gestionează comportamentul sunetului la nivelul sistemului de operare.
  • Șase categorii: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — determină comportamentul audio de bază.
  • Pentru redarea în fundal sunt obligatorii categoria playback și Background Modes în Info.plist.
  • Întreruperile sunt gestionate prin NotificationCenter cu tipurile began (pauză) și ended (reluare la shouldResume).
  • Opțiunea .mixWithOthers activează mixarea sunetului cu alte aplicații fără întrerupere.
  • Rutarea este gestionată automat, dar monitorizată prin routeChangeNotification pentru întreruperea la deconectarea căștilor.
  • Categoria playAndRecord cu modul voiceChat — standard pentru aplicațiile VoIP cu suprimarea ecoului și AGC.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și