Audio Session — nedir, kategorileri ve iOS’ta yapılandırma

Yazar: IT Sectr Yayınlanma: 2026-05-24 Okuma süresi: 8 dk

Audio Session, bir uygulamanın ses davranışını yönetmek için iOS’un merkezi mekanizmasıdır: sistemle etkileşim, kesintileri yönetme ve ses yönlendirmesi. Her iOS uygulaması, ekran kilitlendiğinde, aramalar sırasında ve Bluetooth bağlantısında sesin nasıl davranacağını belirleyen tek bir ses oturumu alır. Apple Developer Documentation, 2026’ya göre, Audio Session bir kategori ve mod aracılığıyla yapılandırılır — doğru yapılandırma olmadan uygulama arka planda ses çalamayabilir.

Kilit Noktalar

  • Audio Session (AVAudioSession), işletim sistemi düzeyinde uygulamanın ses davranışını yöneten iOS’ta bir sistem nesnesidir.
  • Oturum kategorisi temel davranışı tanımlar: playback, record, ambient, playAndRecord ve diğerleri.
  • Modlar ve seçenekler davranışı hassaslaştırır: default, voiceChat, videoRecording, allowBluetooth.
  • Kesinti (arama, alarm) durumunda oturum, interruptionType türüyle NotificationCenter aracılığıyla bir bildirim alır.
  • Arka planda oynatma için Background Modes — Audio, AirPlay and Picture in Picture’ı etkinleştirmek gerekir.

Audio Session Nedir?

Audio Session, bir uygulama başlatıldığında sistem tarafından oluşturulan ve tüm yaşam döngüsü boyunca var olan tek bir AVAudioSession örneğidir. Uygulama ile iOS ses sistemi arasında bir aracı görevi görür: kategori yapılandırması, uygulamanın arka planda ses çalmasına izin verilip verilmediğini, bir arama sırasında sesin kısılıp kısılmayacağını ve hangi cihazlara ses çıkışı yapılacağını belirler.

Her uygulamanın bağımsız olarak odak talep edip serbest bıraktığı Android Audio Focus’un aksine, iOS Audio Session uygulama başına bir oturum aracılığıyla merkezi olarak yönetilir. Bir oturum etkinleştirildiğinde, sistem otomatik olarak önceki uygulamanın oturumunu devre dışı bırakır ve ona bir kesinti bildirimi gönderir. Bu mimari fark, iki platformda ses işleme konusundaki farklı yaklaşımları tanımlar.

WWDC 2024 Oturum 211’e göre, iOS uygulamalarındaki ses sorunlarının yaklaşık %40’ı yanlış Audio Session yapılandırmasından kaynaklanır. En yaygın hata, playback yerine ambient kategorisini seçmektir ve bu da ekran kilitlendiğinde sesin kaybolmasına neden olur.

AVAudioSession Nasıl Çalışır

Başlatıldığında, uygulama oturumun sharedInstance’ını alır, setCategory(_:mode:options:) çağrısıyla kategoriyi ayarlar ve setActive(true) aracılığıyla oturumu etkinleştirir. Etkinleştirmeden sonra iOS, yönlendirme için kategori politikalarını dikkate alır. Başka bir uygulama oturumunu etkinleştirirse, mevcut uygulama Notification.Name.AVAudioSessionInterruption aracılığıyla bir AudioSessionInterruptionType.began bildirimi alır.

Audio Session Kategorileri

Kategori, Audio Session’ın altı önceden tanımlanmış davranış seçeneğini tanımlayan ana parametresidir. Kategori seçmek, iOS’ta ses ayarları yaparken ilk ve en önemli karardır.

KategoriNe Zaman KullanılırArka Plan SesiSessiz Anahtarı Etkiler
ambientOyunlar, arka plan efektleriHayırEvet
playbackMüzik, podcast, sesli kitaplarEvetHayır
recordSes kaydı, sesli notlarHayırYok
playAndRecordVoIP, sesli mesajlarEvetHayır
multiRouteDJ mikserleri, karaokeEvetHayır
soloAmbientVarsayılan (iOS default)HayırEvet

Playback Kategorisi — Oynatıcılar İçin Ana Seçim

Müzik ve video oynatıcıları için her zaman playback kullanın. Bu kategori şunlara izin verir: ekran kilitliyken, sessiz anahtarı kapalıyken (iPhone’daki fiziksel düğme) ve uygulama arka plandayken ses çalma. playback kategorisi olmadan, ekran kilitlendiğinde veya uygulama küçültüldüğünde oturum devre dışı bırakılır.

ambient kategorisi oyunlar ve arka plan sesleri olan uygulamalar için uygundur — diğer uygulamaların çalmaya devam etmesine izin verir. Örneğin, bir kullanıcı müzik dinliyorsa ve ambient oturumu olan bir oyun açarsa, müzik oyun seslerinin üzerinde çalmaya devam eder. Bu, Android’den temel bir farktır; Android’de böyle bir senaryo açık duck izni gerektirir.

Audio Session Nasıl Yapılandırılır

Audio Session yapılandırması, herhangi bir oynatma başlamadan önce yapılmalıdır. Oturumun application(_:didFinishLaunchingWithOptions:) yönteminde veya oynatıcının başlatıcısında yapılandırılması önerilir. Kategori ayarlandıktan sonra oturum etkinleştirilmelidir.

Swift’te Temel Audio Session Kurulumu

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 yapılandırması başarısız: \(error.localizedDescription)")
}

options parametresi, allowBluetooth (Bluetooth kulaklığa çıkış) ve defaultToSpeaker (kulaklık yerine hoparlörden çalma) içerir. allowBluetooth seçeneği, Bluetooth kulaklıkları destekleyen uygulamalar için zorunludur — bu seçenek olmadan, kulaklık bağlı olsa bile ses dahili hoparlöre yönlendirilebilir.

Kayıt ve Oynatma (İçin Yapılandırma VoIP)

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

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

voiceChat modundaki playAndRecord kategorisi, sesli iletişim için ses yolunu optimize eder: yankı önlemeyi, otomatik kazanç kontrolünü (AGC) etkinleştirir ve en uygun kodeki seçer. OverrideOutputAudioPort(.speaker), kulaklık bağlı olsa bile hoparlörden çıkışı zorlar — hoparlör için kullanışlıdır.

Oturum Etkinleştirme ve Devre Dışı Bırakma

setActive(true) çağrısı oturumu etkinleştirir ve sisteme uygulamanın ses kullanacağını bildirir. Oynatma duraklatıldığında, diğer uygulamaların ses akışını alabilmesi için oturumun devre dışı bırakılması önerilir. İstisna, oturumun tüm parça boyunca aktif kaldığı uzun süreli arka plan oynatması (müzik, podcast) olan uygulamalardır.

setActive çağrısında hataları yönetmek önemlidir. Yüksek öncelikli başka bir oturum aktifse (örneğin, arama sırasında Telefon), setActive bir hata verebilir. Bu durumda, AudioSessionInterruptionType.ended bildirimini bekleyin ve etkinleştirmeyi yeniden deneyin.

Audio Session Modları ve Politikaları

Mod, kategoriyi hassaslaştırır ve belirli bir kullanım durumu için ses yolunu optimize eder. Her mod, AGC, yankı önleme ve kodeklerin davranışını değiştirir. Modlar kategoriyi değiştirmez, tamamlar — bir kategori farklı modlarla çalışabilir.

  • default — müzik ve video için standart mod. AGC kapalı, yankı önleme minimum.
  • voiceChat — VoIP için optimizasyon. Yankı önleme, AGC, gürültü bastırmayı etkinleştirir. playAndRecord kategorisiyle kullanın.
  • videoRecording — video kaydı için. Oynatmaya göre kayıt kalitesine öncelik verir. record veya playAndRecord kategorisiyle kullanın.
  • measurement — ses ölçümleri için. Minimum sinyal işleme, AGC veya yankı önleme yok.
  • gameChat — oyunlarda sesli sohbet için. voiceChat’e benzer, ancak oyun sesine öncelik verir.
  • moviePlayback — film izlemek için. Çok kanallı ses (5.1, 7.1) ve Dolby Atmos için optimizasyon.

Audio Session Kategori Seçenekleri

Seçenekler, oturum davranışının ince ayarını sağlar. Her seçenek, bir dizide diğerleriyle birleştirilebilen bir bayraktır. Örneğin, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] Bluetooth kulaklığa ses çıkışına izin verir, varsayılan olarak hoparlörü kullanır ve sesli kitaplarla karıştırır.

iOS 17+ üzerinde, AVAudioSessionSpatialPreferences aracılığıyla AirPods için kişiselleştirilmiş uzamsal sesi etkinleştiren spatialAudio seçeneği ortaya çıktı. WWDC 2024’e göre, uzamsal ses Apple’ın testlerinde müzik uygulamalarında kullanıcı katılımını %25 artırır.

Kesintileri ve Aramaları Yönetme

Kesintiler, Audio Session ve Android Audio Focus arasındaki temel bir farktır. iOS’ta, kesintiler NotificationCenter aracılığıyla AVAudioSession.interruptionNotification’a abone olunarak yönetilir. Bildirim, kesinti türünü içeren bir sözlük içerir: began veya ended.

Kesinti Bildirimlerine Abone Olma

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 alındığında, oynatıcı oynatmayı duraklatmalıdır. interruptionType.ended alındığında, interruptionOptionKey özelliği oynatıcının otomatik olarak devam edip edemeyeceğini (shouldResume) belirtir. Kullanıcı aramayı reddettiyse, shouldResume = true. Arama zaman aşımıyla sona erdiyse — shouldResume = false, devama izin verilmez.

Diğer Uygulamalardan Gelen Kesintileri Yönetme

Başka bir uygulama playback kategorisiyle Audio Session’unu etkinleştirdiğinde, mevcut oturum bir kesinti bildirimi alır. Başka bir uygulama ambient kullanırsa, kesinti oluşmaz — sesler karıştırılır. Bu davranış, herhangi bir Audio Focus etkinleştirmesinin LOSS olayını tetiklediği Android’den kökten farklıdır.

Diğer oturumlar etkinleştirildiğinde oynatmaya devam etmesi gereken uygulamalar için (örneğin, müzik êlarken navigasyon), .mixWithOthers seçeneğini kullanın. Bu seçenek, diğer uygulamalarla ses karıştırmaya izin verir ve hiçbir kesinti gönderilmez. MixWithOthers, Android’deki duck modunun iOS karşılığıdır.

Ses Yönlendirmesi ve Bluetooth

Audio Session, dahili hoparlörler, kulaklıklar, Bluetooth kulaklıklar ve AirPlay cihazları arasında ses yönlendirmesini otomatik olarak yönetir. Uygulama, currentRoute özelliği aracılığıyla mevcut yolu izleyebilir ve AVAudioSession.routeChangeNotification aracılığıyla değişiklikler hakkında bildirim alabilir.

Bluetooth kulaklıklar bağlandığında, oturum allowBluetooth seçeneğiyle yapılandırılmışsa, iOS otomatik olarak ses çıkışını onlara yönlendirir. Bu seçenek olmadan, ses dahili hoparlörden devam eder. iOS 16’dan itibaren, AirPods Pro bağlandığında, sistem gecikmeyi azaltmak için otomatik olarak ProMotion senkronizasyonunu etkinleştirir.

Yol Değişikliklerini İzleme

routeChangeNotification’a abone olmak, kulaklık bağlantısı ve bağlantı kesilmesine tepki vermeyi sağlar. Bir Bluetooth kulaklık bağlantısı kesildiğinde, oynatıcı oynatmayı duraklatmalıdır — kullanıcı telefon hoparlöründen ses gelmeye başlamasını beklemeyebilir. Apple HIG (2026)’ya göre, bu müzik uygulamaları için zorunlu bir davranıştır.

availableInputs ve availableOutputs özellikleri, türleriyle (builtInSpeaker, headphones, bluetoothA2DP, hdmi) birlikte kullanılabilir ses cihazlarının bir listesini döndürür. Geliştirici, özel yönlendirme senaryoları için overrideOutputAudioPort aracılığıyla programlama yoluyla belirli bir cihazı seçebilir.

Sıkça Sorulan Sorular

Audio Session, Android Audio Focus’tan nasıl farklıdır?

Temel fark mimaridir. Audio Session, uygulama başına bir kez yapılandırılan tek bir merkezi oturumdur. Android’de Audio Focus, her oynatmada manuel olarak odak talep etmeyi gerektirir. Ayrıca iOS, mixWithOthers seçeneği aracılığıyla karıştırmayı desteklerken, Android’de duck tam durdurmanın tek alternatifidir.

iPhone ekranı kilitlendiğinde ses neden kaybolur?

En yaygın neden yanlış bir Audio Session kategorisidir. ambient veya soloAmbient seçilirse, ekran kilitlendiğinde ses durur. Kategoriyi playback’e değiştirin ve Info.plist’e Background Modes — Audio, AirPlay, and Picture in Picture eklendiğinden emin olun.

iOS’ta iki uygulamanın aynı anda oynatmasına nasıl izin verilir?

setCategory’ye .mixWithOthers seçeneğini ekleyin. Bu, uygulamanızın sesinin diğer aktif oturumlarla karışmasına izin verir. Bu seçenek olmadan, yeni bir uygulama mevcut olanı kesintiye uğratır. MixWithOthers, Android’deki duck modunun benzeridir ancak tam ses seviyesi korumasıyla.

Programlama yoluyla ses bir Bluetooth hoparlöre nasıl yönlendirilir?

Otomatik seçim için nil ile overrideOutputAudioPort kullanın. Bluetooth’a zorunlu çıkış için: availableOutputs’tan AVAudioSessionRouteDescription alın, .bluetoothA2DP türünde bir port seçin ve overrideOutputAudioPort’a iletin. Oturumun allowBluetooth ile yapılandırıldığından emin olun.

Oynatıcıyı duraklatırken setActive(false) çağırmalı mıyım?

Çoğu uygulama için — evet. Duraklatmada oturumu devre dışı bırakmak, diğer uygulamaların ses odağını almasına izin verir. İstisna, uzun süreli arka plan oynatması olan müzik oynatıcılarıdır. Duraklatma kısaysa (5 saniyeden az), hızlı devam için oturumu aktif tutmak daha iyidir.

Özet

  • Audio Session (AVAudioSession), işletim sistemi düzeyinde ses davranışını yöneten iOS’ta uygulama başına tek ses oturumudur.
  • Altı kategori: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — temel ses davranışını tanımlar.
  • Arka plan oynatması için playback kategorisi ve Info.plist’te Background Modes gereklidir.
  • Kesintiler NotificationCenter aracılığıyla began (duraklatma) ve ended (shouldResume olduğunda devam) türleriyle yönetilir.
  • .mixWithOthers seçeneği, kesinti olmadan diğer uygulamalarla ses karıştırmayı etkinleştirir.
  • Yönlendirme otomatik olarak yönetilir ancak kulaklıklar kesildiğinde duraklatmak için routeChangeNotification aracılığıyla izlenir.
  • playAndRecord kategorisi voiceChat moduyla, yankı önleme ve AGC’ye sahip VoIP uygulamaları için standarttır.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun