Audio Session — یہ کیا ہے، زمرے اور iOS میں ترتیب

مصنف: IT Sectr اشاعت: 2026-05-24 مطالعے کا وقت: 8 منٹ

Audio Session iOS کا مرکزی طریقہ کار ہے جو ایپلیکیشن کے آڈیو رویے کو منظم کرتا ہے: سسٹم کے ساتھ تعامل، مداخلتوں کو سنبھالنا اور آڈیو روٹنگ۔ ہر iOS ایپلیکیشن کو ایک واحد آڈیو سیشن ملتا ہے جو یہ طے کرتا ہے کہ اسکرین لاک ہونے پر، کالز کے دوران اور Bluetooth منسلک کرتے وقت آواز کیسے برتاؤ کرتی ہے۔ Apple Developer Documentation، 2026 کے مطابق، Audio Session کو زمرہ اور موڈ کے ذریعے ترتیب دیا جاتا ہے — درست ترتیب کے بغیر، ایپلیکیشن پس منظر میں آواز نہیں چلا سکتی۔

اہم نکات

  • Audio Session (AVAudioSession) iOS میں ایک سسٹم آبجیکٹ ہے جو OS سطح پر ایپلیکیشن کے آڈیو رویے کو منظم کرتا ہے۔
  • سیشن کا زمرہ بنیادی رویے کی وضاحت کرتا ہے: playback، record، ambient، playAndRecord اور دیگر۔
  • موڈ اور اختیارات رویے کو مزید بہتر کرتے ہیں: default، voiceChat، videoRecording، allowBluetooth۔
  • مداخلت (کال، الارم) پر سیشن NotificationCenter کے ذریعے interruptionType قسم کے ساتھ ایک اطلاع حاصل کرتا ہے۔
  • پس منظر میں چلانے کے لیے Background Modes — Audio، AirPlay and Picture in Picture کو فعال کرنا ضروری ہے۔

Audio Session کیا ہے؟

Audio Session AVAudioSession کی ایک واحد مثال ہے جو سسٹم کے ذریعے اس وقت بنائی جاتی ہے جب کوئی ایپلیکیشن لانچ ہوتی ہے اور اپنی پوری زندگی کے چکر میں موجود رہتی ہے۔ یہ ایپلیکیشن اور iOS آڈیو سسٹم کے درمیان ایک ثالث کے طور پر کام کرتا ہے: زمرے کی ترتیب طے کرتی ہے کہ آیا ایپلیکیشن کو پس منظر میں آواز چلانے کی اجازت ہے، کیا کال کے دوران آواز خاموش ہوگی، اور کن آلات پر آڈیو آؤٹ پٹ کرنا ہے۔

Android Audio Focus کے برعکس، جہاں ہر ایپلیکیشن آزادانہ طور پر فوکس کی درخواست کرتی ہے اور جاری کرتی ہے، iOS Audio Session کو فی ایپلیکیشن ایک سیشن کے ذریعے مرکزی طور پر منظم کیا جاتا ہے۔ جب کوئی سیشن فعال ہوتا ہے، سسٹم خود بخود پچھلی ایپلیکیشن کے سیشن کو غیر فعال کر دیتا ہے، اسے مداخلت کی اطلاع بھیجتا ہے۔ یہ آرکیٹیکچرل فرق دونوں پلیٹ فارمز پر آڈیو ہینڈلنگ کے مختلف طریقوں کی وضاحت کرتا ہے۔

WWDC 2024 سیشن 211 کے مطابق، iOS ایپلیکیشنز میں تقریباً 40% آڈیو مسائل غلط Audio Session ترتیب کی وجہ سے ہوتے ہیں۔ سب سے عام غلطی playback کی بجائے ambient زمرہ کا انتخاب کرنا ہے، جس کی وجہ سے اسکرین لاک ہونے پر آواز غائب ہو جاتی ہے۔

AVAudioSession کیسے کام کرتا ہے

لانچ ہونے پر، ایپلیکیشن سیشن کا sharedInstance حاصل کرتی ہے، setCategory(_:mode:options:) کال کے ذریعے زمرہ متعین کرتی ہے اور setActive(true) کے ذریعے سیشن کو فعال کرتی ہے۔ فعال ہونے کے بعد، iOS روٹنگ کے لیے زمرے کی پالیسیوں پر غور کرتا ہے۔ اگر کوئی دوسری ایپلیکیشن اپنا سیشن فعال کرتی ہے، تو موجودہ ایپلیکیشن Notification.Name.AVAudioSessionInterruption کے ذریعے AudioSessionInterruptionType.began کی اطلاع حاصل کرتی ہے۔

Audio Session کے زمرے

زمرہ Audio Session کا بنیادی پیرامیٹر ہے، جو چھ پہلے سے طے شدہ رویے کے اختیارات کی وضاحت کرتا ہے۔ زمرہ کا انتخاب iOS میں آڈیو ترتیب دیتے وقت پہلا اور سب سے اہم فیصلہ ہے۔

زمرہکب استعمال کریںپس منظر کا آڈیوخاموش سوئچ متاثر کرتا ہے
ambientگیمز، پس منظر کے اثراتنہیںہاں
playbackموسیقی، پوڈکاسٹ، آڈیو بکسہاںنہیں
recordوائس میمو، آڈیو ریکارڈنگنہیںلاگو نہیں
playAndRecordVoIP، وائس پیغاماتہاںنہیں
multiRouteDJ مکسر، کاراؤکےہاںنہیں
soloAmbientڈیفالٹ (iOS default)نہیںہاں

Playback زمرہ — پلیئرز کے لیے بنیادی انتخاب

موسیقی اور ویڈیو پلیئرز کے لیے، ہمیشہ playback استعمال کریں۔ یہ زمرہ اجازت دیتا ہے: اسکرین لاک ہونے پر، خاموش سوئچ بند ہونے پر (iPhone پر جسمانی بٹن)، اور ایپلیکیشن پس منظر میں ہونے پر آواز چلانا۔ playback زمرہ کے بغیر، اسکرین لاک ہونے یا ایپلیکیشن چھوٹی ہونے پر سیشن غیر فعال ہو جاتا ہے۔

ambient زمرہ گیمز اور پس منظر کی آوازوں والی ایپلیکیشنز کے لیے موزوں ہے — یہ دوسری ایپلیکیشنز کو جاری رکھنے دیتا ہے۔ مثال کے طور پر، اگر کوئی صارف موسیقی سن رہا ہے اور ambient سیشن والا گیم کھولتا ہے، تو موسیقی گیم کی آوازوں کے اوپر چلتی رہتی ہے۔ یہ Android سے ایک بنیادی فرق ہے، جہاں اس طرح کے منظر نامے کے لیے واضح duck اجازت درکار ہوتی ہے۔

Audio Session ترتیب دینے کا طریقہ

Audio Session کی ترتیب کسی بھی پلے بیک شروع ہونے سے پہلے کی جانی چاہیے۔ application(_:didFinishLaunchingWithOptions:) طریقہ کار میں یا پلیئر کے ابتدائیہ میں سیشن ترتیب دینے کی سفارش کی جاتی ہے۔ زمرہ متعین کرنے کے بعد، سیشن کو فعال کرنا ضروری ہے۔

Swift میں بنیادی Audio Session سیٹ اپ

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 سیٹ اپ ناکام: \(error.localizedDescription)")
}

options پیرامیٹر میں allowBluetooth (Bluetooth ہیڈسیٹ پر آؤٹ پٹ) اور defaultToSpeaker (ایئر پیس کے بجائے اسپیکر کے ذریعے پلے بیک) شامل ہے۔ allowBluetooth اختیار Bluetooth ہیڈفونز کو سپورٹ کرنے والی ایپلیکیشنز کے لیے لازمی ہے — اس کے بغیر، ہیڈسیٹ منسلک ہونے پر بھی آواز بلٹ ان اسپیکر پر جا سکتی ہے۔

ریکارڈنگ اور پلے بیک (VoIP) کے لیے ترتیب

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

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

voiceChat موڈ کے ساتھ playAndRecord زمرہ صوتی مواصلات کے لیے آڈیو پاتھ کو بہتر بناتا ہے: ایکو کینسلیشن، آٹومیٹک گین کنٹرول (AGC) کو فعال کرتا ہے اور بہترین کوڈیک کا انتخاب کرتا ہے۔ OverrideOutputAudioPort(.speaker) ہیڈسیٹ منسلک ہونے پر بھی اسپیکر کے ذریعے آؤٹ پٹ پر مجبور کرتا ہے — اسپیکر فون کے لیے مفید۔

سیشن کو فعال اور غیر فعال کرنا

setActive(true) کال کرنے سے سیشن فعال ہوتا ہے اور سسٹم کو مطلع کرتا ہے کہ ایپلیکیشن آڈیو استعمال کرے گی۔ جب پلے بیک روکا جاتا ہے، سیشن کو غیر فعال کرنے کی سفارش کی جاتی ہے تاکہ دوسری ایپلیکیشنز آڈیو سٹریم حاصل کر سکیں۔ استثنا لمبے پس منظر میں پلے بیک (موسیقی، پوڈکاسٹ) والی ایپلیکیشنز ہیں، جہاں سیشن پورے ٹریک کے دوران فعال رہتا ہے۔

setActive کال کرتے وقت غلطیوں کو سنبھالنا ضروری ہے۔ اگر زیادہ ترجیح والا کوئی دوسرا سیشن فعال ہے (مثال کے طور پر، کال کے دوران فون)، setActive ایک غلطی پھینک سکتا ہے۔ اس صورت میں، AudioSessionInterruptionType.ended کی اطلاع کا انتظار کریں اور فعال کرنے کی دوبارہ کوشش کریں۔

Audio Session کے موڈ اور پالیسیاں

موڈ زمرہ کو بہتر کرتا ہے اور ایک مخصوص استعمال کے معاملے کے لیے آڈیو پاتھ کو بہتر بناتا ہے۔ ہر موڈ AGC، ایکو کینسلیشن اور کوڈیکس کے رویے کو تبدیل کرتا ہے۔ موڈ زمرہ کو تبدیل نہیں کرتے بلکہ اس کی تکمیل کرتے ہیں — ایک زمرہ مختلف موڈ کے ساتھ کام کر سکتا ہے۔

  • default — موسیقی اور ویڈیو کے لیے معیاری موڈ۔ AGC بند، ایکو کینسلیشن کم سے کم۔
  • voiceChat — VoIP کے لیے بہتر کاری۔ ایکو کینسلیشن، AGC، شور دبانے کو فعال کرتا ہے۔ playAndRecord زمرہ کے ساتھ استعمال کریں۔
  • videoRecording — ویڈیو ریکارڈنگ کے لیے۔ پلے بیک پر ریکارڈنگ کے معیار کو ترجیح دیتا ہے۔ record یا playAndRecord زمرہ کے ساتھ استعمال کریں۔
  • measurement — آڈیو پیمائش کے لیے۔ کم سے کم سگنل پروسیسنگ، کوئی AGC یا ایکو کینسلیشن نہیں۔
  • gameChat — گیمز میں صوتی چیٹ کے لیے۔ voiceChat جیسا، لیکن گیم آڈیو کو ترجیح دیتا ہے۔
  • moviePlayback — فلمیں دیکھنے کے لیے۔ ملٹی چینل آڈیو (5.1، 7.1) اور Dolby Atmos کے لیے بہتر کاری۔

Audio Session زمرہ کے اختیارات

اختیارات سیشن کے رویے کی باریک ترتیب فراہم کرتے ہیں۔ ہر اختیار ایک جھنڈی ہے جسے ایک صف میں دوسروں کے ساتھ ملایا جا سکتا ہے۔ مثال کے طور پر، [.allowBluetooth، .defaultToSpeaker، .interruptSpokenAudioAndMix] Bluetooth ہیڈسیٹ پر آواز کے آؤٹ پٹ کی اجازت دیتا ہے، ڈیفالٹ طور پر اسپیکر استعمال کرتا ہے اور آڈیو بکس کے ساتھ ملایا جاتا ہے۔

iOS 17+ پر spatialAudio اختیار ظاہر ہوا، جو AVAudioSessionSpatialPreferences کے ذریعے AirPods کے لیے ذاتی نوعیت کی مقامی آواز کو فعال کرتا ہے۔ WWDC 2024 کے مطابق، Apple کے ٹیسٹوں میں مقامی آواز موسیقی کی ایپلیکیشنز میں صارف کی مصروفیت میں 25% اضافہ کرتی ہے۔

مداخلتوں اور کالوں کو سنبھالنا

مداخلتیں Audio Session اور Android Audio Focus کے درمیان ایک اہم فرق ہیں۔ iOS میں، مداخلتوں کو NotificationCenter کے ذریعے AVAudioSession.interruptionNotification کو سبسکرائب کرکے سنبھالا جاتا ہے۔ اطلاع میں مداخلت کی قسم کے ساتھ ایک لغت ہوتی ہے: began یا ended۔

مداخلت کی اطلاعوں کو سبسکرائب کرنا

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 موصول ہوتا ہے، پلیئر کو پلے بیک روک دینا چاہیے۔ جب interruptionType.ended موصول ہوتا ہے، interruptionOptionKey پراپرٹی بتاتی ہے کہ کیا پلیئر خود بخود دوبارہ شروع کر سکتا ہے (shouldResume)۔ اگر صارف نے کال مسترد کر دی، shouldResume = true۔ اگر کال ٹائم آؤٹ پر ختم ہوئی — shouldResume = false، دوبارہ شروع کرنے کی اجازت نہیں۔

دوسری ایپلیکیشنز سے مداخلتوں کو سنبھالنا

جب کوئی دوسری ایپلیکیشن playback زمرہ کے ساتھ اپنا Audio Session فعال کرتی ہے، تو موجودہ سیشن کو مداخلت کی اطلاع ملتی ہے۔ اگر کوئی دوسری ایپلیکیشن ambient استعمال کرتی ہے، تو کوئی مداخلت نہیں ہوتی — آوازیں مل جاتی ہیں۔ یہ رویہ Android سے یکسر مختلف ہے، جہاں کوئی بھی Audio Focus فعالی LOSS ایونٹ کو متحرک کرتا ہے۔

ان ایپلیکیشنز کے لیے جنہیں دوسرے سیشن فعال ہونے پر پلے بیک جاری رکھنے کی ضرورت ہے (مثال کے طور پر، موسیقی چلتے ہوئے نیویگیشن)، .mixWithOthers اختیار استعمال کریں۔ یہ اختیار دوسری ایپلیکیشنز کے ساتھ آواز ملانے کی اجازت دیتا ہے، اور کوئی مداخلت نہیں بھیجی جاتی۔ MixWithOthers Android میں duck موڈ کا iOS ہم منصب ہے۔

آڈیو روٹنگ اور Bluetooth

Audio Session خود بخود بلٹ ان اسپیکرز، ہیڈفونز، Bluetooth ہیڈسیٹس اور AirPlay آلات کے درمیان آڈیو روٹنگ کا انتظام کرتا ہے۔ ایپلیکیشن currentRoute پراپرٹی کے ذریعے موجودہ راستے کی نگرانی کر سکتی ہے اور AVAudioSession.routeChangeNotification کے ذریعے تبدیلیوں کے بارے میں اطلاعیں حاصل کر سکتی ہے۔

جب Bluetooth ہیڈفونز منسلک ہوتے ہیں، iOS خود بخود آڈیو آؤٹ پٹ کو ان پر منتقل کر دیتا ہے اگر سیشن allowBluetooth اختیار کے ساتھ ترتیب دیا گیا ہو۔ اس اختیار کے بغیر، آواز بلٹ ان اسپیکر کے ذریعے جاری رہتی ہے۔ iOS 16 سے شروع ہو کر، جب AirPods Pro منسلک ہوتے ہیں، سسٹم خود بخود تاخیر کم کرنے کے لیے ProMotion مطابقت پذیری کو فعال کرتا ہے۔

راستے کی تبدیلیوں کی نگرانی

routeChangeNotification کو سبسکرائب کرنے سے ہیڈفون کے منسلک اور منقطع ہونے پر رد عمل ظاہر کرنے کی اجازت ملتی ہے۔ جب Bluetooth ہیڈسیٹ منقطع ہوتا ہے، پلیئر کو پلے بیک روک دینا چاہیے — صارف کو توقع نہیں ہو سکتی کہ فون کے اسپیکر سے آواز آنے لگے۔ Apple HIG (2026) کے مطابق، موسیقی کی ایپلیکیشنز کے لیے یہ لازمی رویہ ہے۔

availableInputs اور availableOutputs پراپرٹیز اپنی اقسام (builtInSpeaker، headphones، bluetoothA2DP، hdmi) کے ساتھ دستیاب آڈیو آلات کی فہرست لوٹاتی ہیں۔ ڈویلپر حسب ضرورت روٹنگ منظرناموں کے لیے overrideOutputAudioPort کے ذریعے پروگرام کے ذریعے ایک مخصوص آلہ منتخب کر سکتا ہے۔

اکثر پوچھے گئے سوالات

Audio Session Android Audio Focus سے کیسے مختلف ہے؟

بنیادی فرق آرکیٹیکچر ہے۔ Audio Session فی ایپلیکیشن ایک مرکزی سیشن ہے جو ایک بار ترتیب دیا جاتا ہے۔ Android میں Audio Focus کو چلاتے وقت ہر بار دستی طور پر فوکس کی درخواست کرنے کی ضرورت ہوتی ہے۔ اس کے علاوہ، iOS mixWithOthers اختیار کے ذریعے ملاوٹ کو سپورٹ کرتا ہے، جبکہ Android میں duck مکمل روکنے کا واحد متبادل ہے۔

iPhone کی اسکرین لاک ہونے پر آواز کیوں غائب ہو جاتی ہے؟

سب سے عام وجہ غلط Audio Session زمرہ ہے۔ اگر ambient یا soloAmbient منتخب کیا گیا ہے، تو اسکرین لاک ہونے پر آواز رک جاتی ہے۔ زمرہ کو playback میں تبدیل کریں اور یقینی بنائیں کہ Info.plist میں Background Modes — Audio, AirPlay, and Picture in Picture شامل کیا گیا ہے۔

iOS پر دو ایپلیکیشنز کو ایک ساتھ چلانے کی اجازت کیسے دی جائے؟

setCategory میں .mixWithOthers اختیار شامل کریں۔ یہ آپ کی ایپلیکیشن کی آواز کو دوسرے فعال سیشنز کے ساتھ ملانے کی اجازت دے گا۔ اس اختیار کے بغیر، ایک نئی ایپلیکیشن موجودہ کو روک دیتی ہے۔ MixWithOthers Android میں duck موڈ کا مشابہ ہے، لیکن مکمل حجم کے تحفظ کے ساتھ۔

پروگرام کے ذریعے آواز کو Bluetooth اسپیکر پر کیسے منتقل کیا جائے؟

خودکار انتخاب کے لیے nil کے ساتھ overrideOutputAudioPort استعمال کریں۔ Bluetooth پر زبردستی آؤٹ پٹ کے لیے: availableOutputs سے AVAudioSessionRouteDescription حاصل کریں، .bluetoothA2DP قسم کا ایک پورٹ منتخب کریں اور اسے overrideOutputAudioPort کو بھیجیں۔ یقینی بنائیں کہ سیشن allowBluetooth کے ساتھ ترتیب دیا گیا ہے۔

کیا پلیئر کو روکتے وقت setActive(false) کال کرنا چاہیے؟

زیادہ تر ایپلیکیشنز کے لیے — ہاں۔ روکنے پر سیشن کو غیر فعال کرنے سے دوسری ایپلیکیشنز کو آڈیو فوکس مل سکتا ہے۔ استثنا لمبے پس منظر میں پلے بیک والے موسیقی کے پلیئرز ہیں۔ اگر روکنا مختصر ہے (5 سیکنڈ سے کم)، فوری دوبارہ شروع کرنے کے لیے سیشن کو فعال رکھنا بہتر ہے۔

خلاصہ

  • Audio Session (AVAudioSession) iOS میں فی ایپلیکیشن واحد آڈیو سیشن ہے جو OS سطح پر آواز کے رویے کا انتظام کرتا ہے۔
  • چھ زمرے: ambient، playback، record، playAndRecord، multiRoute، soloAmbient — بنیادی آڈیو رویے کی وضاحت کرتے ہیں۔
  • پس منظر میں پلے بیک کے لیے playback زمرہ اور Info.plist میں Background Modes ضروری ہیں۔
  • مداخلتوں کو NotificationCenter کے ذریعے began (روکنا) اور ended (shouldResume پر دوبارہ شروع) اقسام کے ساتھ سنبھالا جاتا ہے۔
  • .mixWithOthers اختیار مداخلت کے بغیر دوسری ایپلیکیشنز کے ساتھ آواز ملانے کو فعال کرتا ہے۔
  • روٹنگ خود بخود منظم ہوتی ہے لیکن ہیڈفونز منقطع ہونے پر روکنے کے لیے routeChangeNotification کے ذریعے نگرانی کی جاتی ہے۔
  • playAndRecord زمرہ voiceChat موڈ کے ساتھ ایکو کینسلیشن اور AGC والی VoIP ایپلیکیشنز کے لیے معیار ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں