Audio Session — bu nima, kategoriyalari va iOS-da konfiguratsiya

Muallif: IT Sectr Nashr etilgan: 2026-05-24 O'qish vaqti: 8 daq

Audio Session — iOS-ning ilovaning audio harakatini boshqarish uchun markaziy mexanizmi: tizim bilan o‘zaro aloqa, uzilishlarni qayta ishlash va tovushni yo‘naltirish. Har bir iOS ilovasi bitta audio sessiyani oladi, u ekran bloklanganda, qo‘ng‘iroqlar va Bluetooth ulanishida tovush qanday harakat qilishini aniqlaydi. Apple Developer Documentation, 2026 ma’lumotiga ko‘ra, Audio Session kategoriya va rejim orqali sozlanadi — to‘g‘ri konfiguratsiyasiz ilova fonda tovush chiqara olmasligi mumkin.

Asosiy fikrlar

  • Audio Session (AVAudioSession) — iOS-ning operatsion tizim darajasida ilovaning audio harakatini boshqaruvchi tizim obyekti.
  • Sessiya kategoriyasi asosiy harakatni aniqlaydi: playback, record, ambient, playAndRecord va boshqalar.
  • Rejimlar va opsiyalar harakatni aniqroq belgilaydi: default, voiceChat, videoRecording, allowBluetooth.
  • Uzilish vaqtida (qo‘ng‘iroq, signal) sessiya NotificationCenter orqali interruptionType turi bilan xabarnoma oladi.
  • Fonda ijro etish uchun Background Modes — Audio, AirPlay and Picture in Picture faollashtirilishi kerak.

Audio Session nima?

Audio Session — tizim tomonidan ilova ishga tushirilganda yaratiladigan va uning butun hayotiy sikli davomida mavjud bo‘ladigan yagona AVAudioSession namunasidir. U ilova va iOS audio tizimi o‘rtasida vositachi vazifasini bajaradi: kategoriya sozlamasi ilovaning fonda tovush chiqara olishini, qo‘ng‘iroq vaqtida tovushning pasaytirilishini va audioning qaysi qurilmalarga chiqarilishini aniqlaydi.

Har bir ilova mustaqil ravishda fokus talab qiladigan va bo‘shatadigan Android Audio Focus-dan farqli o‘laroq, iOS Audio Session ilova bo‘yicha bitta sessiya orqali markazlashtirilgan holda boshqariladi. Sessiya faollashtirilganda, tizim avtomatik ravishda oldingi ilovaning sessiyasini o‘chiradi va unga uzilish haqida xabarnoma yuboradi. Ushbu arxitektura farqi ikki platformada audioni qayta ishlashga turlicha yondashuvni belgilaydi.

WWDC 2024 Session 211 ma’lumotiga ko‘ra, iOS ilovalaridagi audio muammolarining taxminan 40% Audio Session noto‘g‘ri konfiguratsiyasidan kelib chiqadi. Eng keng tarqalgan xato — playback o‘rniga ambient kategoriyasini tanlash, bu esa ekran bloklanganda tovushning yo‘qolishiga olib keladi.

AVAudioSession ishlash prinsipi

Ishga tushirilganda, ilova sessiyaning sharedInstance-ni oladi, setCategory(_:mode:options:) chaqiruvi orqali kategoriyani o‘rnatadi va setActive(true) orqali sessiyani faollashtiradi. Faollashtirilgandan so‘ng, iOS yo‘naltirish uchun kategoriya siyosatlarini hisobga oladi. Agar boshqa ilova o‘z sessiyasini faollashtirsa, joriy ilova Notification.Name.AVAudioSessionInterruption orqali AudioSessionInterruptionType.began xabarnomasini oladi.

Audio Session kategoriyalari

Kategoriya — Audio Session-ning oltita oldindan belgilangan harakat variantini aniqlaydigan asosiy parametri. Kategoriya tanlash iOS-da audio konfiguratsiyasidagi birinchi va eng muhim qarordir.

KategoriyaQachon ishlatishFonda audioMute rejimida pasaytirish
ambientO‘yinlar, fon effektlariYo‘qHa
playbackMusiqa, podkastlar, audiokitoblarHaYo‘q
recordDiktafon, tovush yozishYo‘qY/T
playAndRecordVoIP, ovozli xabarlarHaYo‘q
multiRouteDJ mikserlari, karaokeHaYo‘q
soloAmbientOdatiy (iOS default)Yo‘qHa

Playback kategoriyasi — pleyerlar uchun asosiy tanlov

Musiqa va video pleyerlar uchun doim playback dan foydalaning. Ushbu kategoriya quyidagilarga imkon beradi: bloklangan ekranda tovush chiqarish, o‘chirilgan mute tugmasi (iPhone korpusidagi jismoniy tugma) bilan va minimallashtirilgan ilovada tovush chiqarish. Playback kategoriyasisiz sessiya ekran bloklanganda yoki ilova minimallashtirilganda o‘chadi.

Ambient kategoriyasi o‘yinlar va fon tovushlari bo‘lgan ilovalar uchun mos keladi — boshqa ilovalarga ijroni davom ettirishga imkon beradi. Masalan, foydalanuvchi musiqa tinglayotgan bo‘lsa va ambient sessiyasi bilan o‘yinni ochsa, musiqa o‘yin tovushlari bilan birga ijro etilishda davom etadi. Bu Android-dan tubdan farq qiladi, bu yerda bunday stsenariy aniq duck ruxsatini talab qiladi.

Audio Session-ni qanday sozlash

Audio Session konfiguratsiyasi har qanday ijro boshlanishidan oldin bajarilishi kerak. Sessiyani application(_:didFinishLaunchingWithOptions:) metodida yoki pleyer inicializatorida sozlash tavsiya etiladi. Kategoriyani sozlagandan so‘ng, sessiyani faollashtirish kerak.

Swift-da Audio Session asosiy sozlamasi

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 sozlamasi muvaffaqiyatsiz tugadi: \(error.localizedDescription)")
}

Options parametri allowBluetooth (Bluetooth naushnikiga chiqish) va defaultToSpeaker (gapirish dinamigi o‘rniga karnay orqali ijro) ni o‘z ichiga oladi. allowBluetooth opsiyasi Bluetooth naushniklarini qo‘llab-quvvatlaydigan ilovalar uchun majburiydir — usiz tovush hatto naushnik ulangan bo‘lsa ham ichki karnay orqali chiqishi mumkin.

Yozish va ijro etish uchun sozlash (VoIP)

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

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

PlayAndRecord kategoriyasi voiceChat rejimi bilan ovozli aloqa uchun audio yo‘lini optimallashtiradi: aks-sadoni bostirish, avtomatik kuchaytirishni sozlash (AGC) va optimal kodekni tanlashni o‘z ichiga oladi. OverrideOutputAudioPort(.speaker) hatto naushnik ulangan bo‘lsa ham tovushni karnay orqali chiqarishga majbur qiladi — karnayli aloqa uchun foydali.

Sessiyani faollashtirish va o‘chirish

SetActive(true) chaqiruvi sessiyani faollashtiradi va tizimga ilova audiodan foydalanishi haqida xabar beradi. Ijro to‘xtatilganda, boshqa ilovalar audio oqimini olishi uchun sessiyani o‘chirish tavsiya etiladi. Istisno — uzoq muddatli fonda ijro qiladigan ilovalar (musiqa, podkastlar), bu yerda sessiya butun trek davomida faol qoladi.

SetActive da xatolarni boshqarish muhim. Agar yuqori prioritetli boshqa sessiya faol bo‘lsa (masalan, qo‘ng‘iroq vaqtida Telefon), setActive xato berishi mumkin. Bunday holda AudioSessionInterruptionType.ended xabarnomasini kutish va faollashtirishni takrorlash kerak.

Audio Session rejimlari va siyosatlari

Rejim (mode) kategoriyani aniqroq belgilaydi va audio yo‘lini muayyan foydalanish turi uchun optimallashtiradi. Har bir rejim AGC, aks-sadoni bostirish va kodeklarning harakatini o‘zgartiradi. Rejimlar kategoriyani almashtirmaydi, balki uni to‘ldiradi — bitta kategoriya turli rejimlar bilan ishlashi mumkin.

  • default — musiqa va video uchun standart rejim. AGC o‘chirilgan, aks-sadoni bostirish minimal.
  • voiceChat — VoIP uchun optimallashtirish. Aks-sadoni bostirish, AGC, shovqinni kamaytirishni o‘z ichiga oladi. PlayAndRecord kategoriyasi bilan foydalaning.
  • videoRecording — video yozish uchun. Yozish sifatiga ijrodan ustunlik beriladi. Record yoki playAndRecord kategoriyasi bilan foydalaning.
  • measurement — audio o‘lchashlar uchun. Minimal signal qayta ishlash, hech qanday AGC yoki aks-sadoni bostirish yo‘q.
  • gameChat — o‘yinlarda ovozli suhbat uchun. VoiceChat ga o‘xshash, lekin o‘yin tovushiga ustunlik beriladi.
  • moviePlayback — filmlarni ko‘rish uchun. Ko‘p kanalli audio (5.1, 7.1) va Dolby Atmos uchun optimallashtirish.

Audio Session kategoriya opsiyalari

Opsiyalar sessiya harakatini nozik sozlashni ta’minlaydi. Har bir opsiya massivda boshqalar bilan birlashtiriladigan bayroqdir. Masalan, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] tovushni Bluetooth naushnikiga chiqarish, odatiy bo‘yicha karnaydan foydalanish va audiokitoblar bilan aralashtirishga imkon beradi.

iOS 17+ da AVAudioSessionSpatialPreferences orqali AirPods uchun shaxsiylashtirilgan fazoviy tovushni faollashtiradigan spatialAudio opsiyasi paydo bo‘ldi. WWDC 2024 ma’lumotiga ko‘ra, fazoviy tovush Apple testlarida musiqa ilovalari foydalanuvchilarining jalb qilinishini 25% ga oshiradi.

Uzilishlar va qo‘ng‘iroqlarni qayta ishlash

Uzilishlar (interruptions) — Audio Session-ni Android Audio Focus-dan asosiy farqi. iOS-da uzilishlar AVAudioSession.interruptionNotification ga obuna bo‘lish orqali NotificationCenter orqali qayta ishlanadi. Xabarnoma uzilish turiga ega lug‘atni o‘z ichiga oladi: began yoki ended.

Uzilish xabarnomalariga obuna bo‘lish

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

InterruptionType.began olinganda pleyer ijroni to‘xtatishi kerak. InterruptionType.ended da interruptionOptionKey xususiyati pleyerning avtomatik ravishda davom ettirishi mumkinligini ko‘rsatadi (shouldResume). Agar foydalanuvchi qo‘ng‘iroqni tugatgan bo‘lsa, shouldResume = true. Agar qo‘ng‘iroq vaqt tugashi bilan tugagan bo‘lsa — shouldResume = false, davom ettirish mumkin emas.

Boshqa ilovalardan kelgan uzilishlarni qayta ishlash

Boshqa ilova playback kategoriyasi bilan o‘z Audio Session-ni faollashtirganda, joriy sessiya uzilish haqida xabarnoma oladi. Agar boshqa ilova ambient dan foydalansa, uzilish sodir bo‘lmaydi — tovushlar aralashtiriladi. Bu xatti-harakat Android-dan tubdan farq qiladi, bu yerda har qanday Audio Focus faollashtirilishi LOSS hodisasini keltirib chiqaradi.

Boshqa sessiyalar faollashtirilganda ijroni davom ettirishi kerak bo‘lgan ilovalar uchun (masalan, musiqa ijro etilayotganda navigatsiya) .mixWithOthers opsiyasidan foydalaning. Ushbu opsiya tovushni boshqa ilovalar bilan aralashtirishga ruxsat beradi va uzilishlar yuborilmaydi. MixWithOthers — Android-dagi duck rejimining iOS analoglari.

Tovushni yo‘naltirish va Bluetooth

Audio Session ichki karnaylar, naushniklar, Bluetooth naushniklari va AirPlay qurilmalari o‘rtasida tovushni yo‘naltirishni avtomatik boshqaradi. Ilova joriy yo‘nalishni currentRoute xususiyati orqali kuzatishi va AVAudioSession.routeChangeNotification orqali o‘zgarishlar haqida xabarnomalar olishi mumkin.

Bluetooth naushniklari ulanganda, iOS sessiya allowBluetooth opsiyasi bilan sozlangan bo‘lsa, avtomatik ravishda audio chiqishini ularga o‘tkazadi. Ushbu opsiyasiz tovush ichki karnay orqali oqishda davom etadi. iOS 16 dan boshlab, AirPods Pro ulanganda tizim kechikishni kamaytirish uchun avtomatik ravishda ProMotion sinxronizatsiyasini faollashtiradi.

Yo‘nalish o‘zgarishini kuzatish

RouteChangeNotification ga obuna bo‘lish naushniklarning ulanishi va uzilishiga reaksiya berishga imkon beradi. Bluetooth naushnigi uzilganda pleyer ijroni to‘xtatishi kerak — foydalanuvchi tovush telefon karnayidan chiqishini kutmasligi mumkin. Apple HIG (2026) ma’lumotiga ko‘ra, bu musiqa ilovalari uchun majburiy xatti-harakatdir.

AvailableInputs va availableOutputs xususiyatlari mavjud audio qurilmalar ro‘yxatini ularning turlari bilan qaytaradi (builtInSpeaker, headphones, bluetoothA2DP, hdmi). Dasturchi moslashtirilgan yo‘naltirish stsenariylari uchun overrideOutputAudioPort orqali dasturiy ravishda muayyan qurilmani tanlashi mumkin.

Tez-tez beriladigan savollar

Audio Session Android Audio Focus-dan nimasi bilan farq qiladi?

Asosiy farq — arxitektura. Audio Session — ilova bo‘yicha bitta markazlashtirilgan sessiya, bir marta sozlanadi. Android-da Audio Focus har safar ijroda qo‘lda fokus talab qiladi. Bundan tashqari, iOS mixWithOthers opsiyasi orqali aralashtirishni qo‘llab-quvvatlaydi, Android-da esa duck to‘liq to‘xtatishning yagona alternatividir.

Nega iPhone ekrani bloklanganda tovush yo‘qoladi?

Eng keng tarqalgan sabab — Audio Session-ning noto‘g‘ri kategoriyasi. Agar ambient yoki soloAmbient tanlangan bo‘lsa, tovush ekran bloklanganda to‘xtaydi. Kategoriyani playback ga o‘zgartiring va Info.plist da Background Modes — Audio, AirPlay, and Picture in Picture qo‘shilganligiga ishonch hosil qiling.

iOS-da ikkita ilovaning bir vaqtda tovush chiqarishiga qanday ruxsat berish mumkin?

SetCategory da .mixWithOthers opsiyasini qo‘shing. Bu ilovangiz tovushining boshqa faol sessiyalar bilan aralashtirilishiga imkon beradi. Ushbu opsiyasiz yangi ilova joriy ilovani to‘xtatadi. MixWithOthers — Android-dagi duck rejimining analogi, ammo tovush darajasi to‘liq saqlanib qoladi.

Bluetooth karnayiga tovushni dasturiy ravishda qanday o‘tkazish mumkin?

Avtomatik tanlash uchun overrideOutputAudioPort dan nil bilan foydalaning. Bluetooth-ga majburiy chiqish uchun: availableOutputs dan AVAudioSessionRouteDescription oling, .bluetoothA2DP turidagi portni tanlang va overrideOutputAudioPort ga uzating. Sessiya allowBluetooth bilan sozlanganligiga ishonch hosil qiling.

Pleyer to‘xtatilganda setActive(false) chaqirish kerakmi?

Aksariyat ilovalar uchun — ha. To‘xtash vaqtida sessiyani o‘chirish boshqa ilovalarga audio fokusni olishga imkon beradi. Istisno — uzoq muddatli fonda ijro qiladigan musiqa pleyerlari. Agar pauza qisqa bo‘lsa (5 soniyadan kam), tez davom ettirish uchun sessiyani faol saqlash yaxshiroqdir.

Xulosa

  • Audio Session (AVAudioSession) — iOS-da operatsion tizim darajasida tovush harakatini boshqaradigan ilova bo‘yicha yagona audio sessiya.
  • Oltita kategoriya: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — asosiy audio harakatini aniqlaydi.
  • Fonda ijro etish uchun playback kategoriyasi va Info.plist da Background Modes majburiydir.
  • Uzilishlar NotificationCenter orqali began (pauza) va ended (shouldResume bilan davom) turlari bilan qayta ishlanadi.
  • .MixWithOthers opsiyasi to‘xtatmasdan boshqa ilovalar bilan tovush aralashtirishni faollashtiradi.
  • Yo‘naltirish avtomatik boshqariladi, lekin naushnik uzilganda to‘xtatish uchun routeChangeNotification orqali kuzatiladi.
  • PlayAndRecord kategoriyasi voiceChat rejimi bilan — aks-sadoni bostirish va AGC bilan VoIP ilovalari uchun standart.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing