লজিক্যাল স্ট্রীম শুরু করার আগে, একটি অ্যাপ লজিক্যাল স্ট্রিমের জন্য ব্যবহৃত একই অডিও অ্যাট্রিবিউট ব্যবহার করে অডিও ফোকাস করার অনুরোধ করে। স্বয়ংচালিত ব্যবহারের ক্ষেত্রে প্রত্যাশিতভাবে কার্য সম্পাদন করার জন্য অ্যাপটিকে অবশ্যই ফোকাস লসকে সম্মান করতে হবে।
ফোকাস অনুরোধ পাঠানোর সুপারিশ করা হয়, এটি সিস্টেম দ্বারা প্রয়োগ করা হয় না। অতএব, প্রাথমিক অডিও কন্ট্রোল মেকানিজমের পরিবর্তে প্লেব্যাকের সময় পরোক্ষভাবে নিয়ন্ত্রণ এবং সংঘর্ষ এড়াতে ফোকাসকে একটি উপায় হিসাবে বিবেচনা করুন। অডিও সাবসিস্টেম পরিচালনার জন্য গাড়ির ফোকাস সিস্টেমের উপর নির্ভর করা উচিত নয়।
মিথস্ক্রিয়া ফোকাস করুন
AAOS সমর্থন করার জন্য, অনুরোধের CarAudioContext
এবং বর্তমান ফোকাস হোল্ডারদের মধ্যে পূর্বনির্ধারিত মিথস্ক্রিয়াগুলির উপর ভিত্তি করে অডিও ফোকাস অনুরোধগুলি পরিচালনা করা হয়। তিন ধরনের মিথস্ক্রিয়া আছে:
- এক্সক্লুসিভ
- প্রত্যাখ্যান করুন
- সমসাময়িক
একচেটিয়া মিথস্ক্রিয়া
এটি Android এর সাথে সবচেয়ে বেশি ব্যবহৃত মিথস্ক্রিয়া মডেল।
একচেটিয়া মিথস্ক্রিয়ায়, শুধুমাত্র একটি অ্যাপকে একবারে ফোকাস ধরে রাখার অনুমতি দেওয়া হয়। অতএব, একটি ইনকামিং ফোকাস অনুরোধ ফোকাস মঞ্জুর করা হয় যখন বিদ্যমান ফোকাস হোল্ডার ফোকাস হারায়। যেহেতু উভয় অ্যাপই মিডিয়া চালায়, শুধুমাত্র একটি অ্যাপকে ফোকাস ধরে রাখার অনুমতি দেওয়া হয়। ফলস্বরূপ, সদ্য শুরু হওয়া অ্যাপের ফোকাস অনুরোধটি AUDIOFOCUS_REQUEST_GRANTED
সাথে ফেরত দেওয়া হয় যখন বর্তমান বাজানো মিউজিক অ্যাপটি একটি ক্ষতির স্থিতি সহ একটি ফোকাস পরিবর্তন ইভেন্ট পায় যা অনুরোধের প্রকারের সাথে মিলে যায়।
মিথস্ক্রিয়া প্রত্যাখ্যান করুন
প্রত্যাখ্যান মিথস্ক্রিয়াগুলির সাথে, আগত অনুরোধটি সর্বদা প্রত্যাখ্যান করা হয়। উদাহরণস্বরূপ, যখন একটি কল চলছে তখন সঙ্গীত চালানোর চেষ্টা করা। এই ক্ষেত্রে, যদি ডায়লার একটি কলের জন্য অডিও ফোকাস ধরে রাখে এবং একটি দ্বিতীয় অ্যাপ মিউজিক চালানোর জন্য ফোকাস করার অনুরোধ করে, তাহলে মিউজিক অ্যাপ অনুরোধের জবাবে AUDIOFOCUS_REQUEST_FAILED
পায়। যেহেতু ফোকাস অনুরোধ প্রত্যাখ্যান করা হয়েছে, বর্তমান ফোকাস ধারকের কাছে কোনো ফোকাস ক্ষতি পাঠানো হয় না।
সমসাময়িক মিথস্ক্রিয়া
AAOS-এর জন্য অনন্য হল সমবর্তী মিথস্ক্রিয়া। এটি গাড়িতে অডিও ফোকাসের অনুরোধ করে এমন অ্যাপগুলিকে অন্যান্য অ্যাপের সাথে একযোগে ফোকাস ধরে রাখার ক্ষমতা দেয়। একটি সমসাময়িক মিথস্ক্রিয়া সঞ্চালনের জন্য, নিম্নলিখিত শর্তগুলি অবশ্যই পূরণ করতে হবে। দ্য:
ইনকামিং ফোকাস অনুরোধ অবশ্যই AudioManager এর জন্য জিজ্ঞাসা করবে৷AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
বর্তমান ফোকাস হোল্ডার সেট করে না PauseWhenDucked(সত্য)
বর্তমান ফোকাস ধারক হাঁসের ইভেন্টগুলি গ্রহণ না করার জন্য বেছে নেয়
যদি এই মানদণ্ডগুলি পূরণ করা হয়, তাহলে ফোকাস অনুরোধটি AUDIOFOCUS_REQUEST_GRANTED
সাথে ফিরে আসে যখন বর্তমান ফোকাস ধারকের ফোকাসে কোনো পরিবর্তন নেই৷ যাইহোক, যদি বর্তমান ফোকাস ধারক হাঁসের ইভেন্টগুলি গ্রহণ করতে বা হাঁসের সময় বিরতি দিতে বেছে নেয়, তবে বর্তমান ফোকাস ধারক ফোকাস হারায়, যেমনটি একটি একচেটিয়া মিথস্ক্রিয়ায় ঘটে।
সমসাময়িক স্ট্রিমগুলি পরিচালনা করুন
যদিও সমসাময়িক মিথস্ক্রিয়াটির অনেকগুলি ব্যবহার রয়েছে, আউটপুট ডিভাইস জুড়ে হার্ডওয়্যার স্তরে মিশ্রণ এবং হাঁস করার ক্ষেত্রে সতর্ক থাকুন। আমরা দৃঢ়ভাবে সুপারিশ করি যে CarAudioContext
এর উদাহরণগুলি যেগুলিকে একসাথে চালানোর অনুমতি দেওয়া হয় সেগুলিকে বিভিন্ন আউটপুট ডিভাইসে রুট করা উচিত।
সমসাময়িক স্ট্রীমগুলির জন্য পৃথক আউটপুট ডিভাইস থাকার মাধ্যমে, এটি HAL-কে তাদের মিশ্রিত করার আগে একটি স্ট্রীমকে হাঁস করতে বা গাড়ির বিভিন্ন স্পিকারের কাছে শারীরিক স্ট্রিমগুলিকে রুট করতে সক্ষম করে। যদি লজিক্যাল স্ট্রীমগুলি অ্যান্ড্রয়েডের মধ্যে মিশ্রিত হয়, তবে লাভগুলি অপরিবর্তিত থাকে এবং একই শারীরিক স্ট্রিমের অংশ হিসাবে বিতরণ করা হয়।
উদাহরণস্বরূপ, যখন নেভিগেশন এবং মিডিয়া একই সাথে বিতরণ করা হয়, তখন মিডিয়া স্ট্রিমের জন্য লাভ সাময়িকভাবে হ্রাস করা যেতে পারে (বা, ডকড) যাতে নেভিগেশন নির্দেশাবলী আরও স্পষ্টভাবে শোনা যায়। বিকল্পভাবে, নেভিগেশন স্ট্রীমটি ড্রাইভার সাইড স্পীকারে রুট করা যেতে পারে যখন মিডিয়া বাকি কেবিন জুড়ে চলতে থাকে।
মিথস্ক্রিয়া ম্যাট্রিক্স
এই টেবিলটি CarAudioService
দ্বারা সংজ্ঞায়িত মিথস্ক্রিয়া ম্যাট্রিক্স দেখায়। প্রতিটি সারি বর্তমান ফোকাস হোল্ডারের CarAudioContext
প্রতিনিধিত্ব করে এবং প্রতিটি কলাম আগত অনুরোধের প্রতিনিধিত্ব করে।
উদাহরণ স্বরূপ, যখন একটি মিউজিক মিডিয়া অ্যাপ ফোকাস ধরে রাখে যেমন একটি নেভিগেশন অ্যাপ ফোকাসের অনুরোধ করে, তখন ম্যাট্রিক্স নির্দেশ করে যে দুটি মিথস্ক্রিয়া একসাথে চলতে পারে, অনুমান করে যে সমসাময়িক ইন্টারঅ্যাকশনের অন্যান্য মানদণ্ড পূরণ হয়েছে।
একযোগে মিথস্ক্রিয়াগুলির কারণে, একাধিক ফোকাস ধারক থাকা সম্ভব। এই ক্ষেত্রে, কোন ইন্টারঅ্যাকশন প্রয়োগ করতে হবে তা নির্ধারণ করার আগে একটি ইনকামিং ফোকাস অনুরোধ বর্তমান ফোকাস ধারকদের প্রত্যেকের সাথে তুলনা করা হয়। এই ক্ষেত্রে, সবচেয়ে রক্ষণশীল মিথস্ক্রিয়া জয়। প্রত্যাখ্যান, তারপর একচেটিয়া, এবং অবশেষে সমসাময়িক।
চিত্র 1. অডিও ফোকাস ইন্টারঅ্যাকশন ম্যাট্রিক্স।
ফোন কলের সময় নেভিগেশন
অ্যান্ড্রয়েড 11-এ, ব্যবহারকারীদের নেভিগেশন এবং ফোন কলগুলির মধ্যে মিথস্ক্রিয়া আচরণ পরিবর্তন করার অনুমতি দেওয়ার জন্য একটি নতুন ব্যবহারকারী সেটিং চালু করা হয়েছিল। সেট করা হলে, android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL
ইনকামিং NAVIGATION
ফোকাস অনুরোধ এবং বর্তমান CALL
ফোকাস হোল্ডারদের সমবর্তী থেকে প্রত্যাখ্যানের মধ্যে মিথস্ক্রিয়া পরিবর্তন করে। যদি কোনও ব্যবহারকারী পছন্দ করেন যে নেভিগেশন নির্দেশাবলী কোনও কলে বাধা না দেয়, তবে তারা সেটিংটি সক্ষম করতে পারে। এটি ব্যবহারকারীর জন্য অব্যাহত থাকে এবং গতিশীলভাবে সেট করা যেতে পারে যাতে পরবর্তী ফোকাস অনুরোধগুলি নতুন সেটিংকে সম্মান করে।
বিলম্বযোগ্য অডিও ফোকাস
অ্যান্ড্রয়েড 11-এ, AAOS বিলম্বযোগ্য অডিও ফোকাসের অনুরোধের জন্য সমর্থন যোগ করেছে। এটি অ-ক্ষণস্থায়ী ফোকাস অনুরোধগুলিকে বিলম্বিত করার অনুমতি দেয় যখন বর্তমান ফোকাস হোল্ডারদের সাথে তাদের মিথস্ক্রিয়া সাধারণত তাদের প্রত্যাখ্যান করা হয়। একবার ফোকাস পরিবর্তনের ফলে এমন একটি অবস্থায় পরিণত হয় যেখানে বিলম্বিত অনুরোধ ফোকাস পেতে পারে, অনুরোধটি মঞ্জুর করা হয়।
বিলম্বিত অডিও ফোকাস অনুরোধের জন্য নিয়ম
অ ক্ষণস্থায়ী অনুরোধ শুধুমাত্র. একটি বিলম্বিত অনুরোধ শুধুমাত্র অ-ক্ষণস্থায়ী উত্সের জন্য করা যেতে পারে যাতে এটি প্রাসঙ্গিক হওয়ার অনেক পরে একটি ক্ষণস্থায়ী সাউন্ড প্লে না হয়।
একবারে শুধুমাত্র একটি অনুরোধ বিলম্বিত হতে পারে। ইতিমধ্যে একটি বিলম্বিত অনুরোধ থাকাকালীন যদি একটি বিলম্বযোগ্য অনুরোধ করা হয়, তবে মূল বিলম্বিত অনুরোধটি একটি
AUDIOFOCUS_LOSS
পরিবর্তন ইভেন্ট পায় এবং নতুন অনুরোধটিAUDIOFOCUS_REQUEST_DELAYED
এর একটি সমলয় প্রতিক্রিয়া পায়।বিলম্বযোগ্য অনুরোধে অবশ্যই
OnAudioFocusChangeListener
থাকতে হবে। একটি অনুরোধ বিলম্বিত হওয়ার পরে, শ্রোতা অনুরোধকারীকে অবহিত করতে ব্যবহৃত হয় যখন অনুরোধটি শেষ পর্যন্ত মঞ্জুর করা হয় (AUDIOFOCUS_GAIN
), অথবা যদি এটি পরে প্রত্যাখ্যান করা হয় (AUDIOFOCUS_LOSS
)।
বিলম্বিত ফোকাস অনুরোধ
বিলম্বিত হতে পারে এমন একটি অনুরোধ তৈরি করতে:
AudioFocusRequest.Builder#setAcceptsDelayedFocusGain
ব্যবহার করুন।mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener(); mDelayedFocusRequest = new AudioFocusRequest .Builder(AudioManager.AUDIOFOCUS_GAIN) .setAudioAttributes(mMusicAudioAttrib) .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener) .setForceDucking(false) .setWillPauseWhenDucked(false) .setAcceptsDelayedFocusGain(true) .build();
অনুরোধ করার সময়,
AUDIOFOCUS_REQUEST_DELAYED
প্রতিক্রিয়া পরিচালনা করুন:int delayedFocusRequestResults = mAudioManager.requestAudioFocus(mDelayedFocusRequest); if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { // start audio playback return; } if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) { // audio playback delayed to audio focus listener return; }
যখন অনুরোধ বিলম্বিত হয়, ফোকাস শ্রোতা ফোকাসে পরিবর্তনগুলি পরিচালনা করে:
private final class MediaWithDelayedFocusListener implements OnAudioFocusChangeListener { @Override public void onAudioFocusChange(int focusChange) { synchronized (mLock) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: … // Start focus playback case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: … // Pause media transiently case AudioManager.AUDIOFOCUS_LOSS: … // Stop media
সিস্টেম বলবৎ বিবর্ণ
অ্যান্ড্রয়েড 15 AAOS-এ সিস্টেম-এনফোর্সড অডিও ফেড প্রবর্তন করেছে। অ্যান্ড্রয়েডে, অডিও ফোকাস সিস্টেম দ্বারা প্রয়োগ করা হয় না। তাই, অ্যাপ ডেভেলপারদের অডিও ফোকাস নির্দেশিকা মেনে চলার জন্য উৎসাহিত করা হলেও, যদি কোনও অ্যাপ অডিও ফোকাস হারানোর পরেও জোরে বাজতে থাকে, তাহলে সিস্টেম এটিকে আটকাতে পারবে না।
নিরাপত্তা-সমালোচনামূলক স্বয়ংচালিত পরিবেশে, ড্রাইভারের বিভ্রান্তি কমানোর জন্য অডিও ফোকাসের আনুগত্য অপরিহার্য। এই বৈশিষ্ট্যটির সাহায্যে, অডিও ফ্রেমওয়ার্ক এখন স্বয়ংক্রিয়ভাবে অডিও ফোকাস হারানো অ্যাপগুলিকে আরও নিয়ন্ত্রিত এবং অনুমানযোগ্য অডিও অভিজ্ঞতার জন্য বিবর্ণ করে দেয়।
এই বর্ধিতকরণটি নিশ্চিত করতে সাহায্য করে যে অ্যাপগুলি ইন্টারঅ্যাকশন ম্যাট্রিক্স দ্বারা সংজ্ঞায়িত অডিও ফোকাস ক্ষতির সিদ্ধান্ত মেনে চলে, অডিও প্লেব্যাক দ্বন্দ্ব প্রতিরোধ করে।
উচ্চ-স্তরের নকশা
নিম্নলিখিত চিত্রটি গাড়িতে ফোকাস লস বৈশিষ্ট্যের জন্য উচ্চ-স্তরের নকশা এবং সমর্থন দেখায়:
চিত্র 2. সিস্টেম-প্রবর্তিত ফেইড বৈশিষ্ট্যের জন্য উচ্চ-স্তরের নকশা।
- টার্গেটেড ফেইডিং: অ্যান্ড্রয়েড 15-এ ফ্যাডিং এর সিস্টেম এনফোর্সমেন্ট বিশেষভাবে এমন পরিস্থিতির জন্য ডিজাইন করা হয়েছে যেখানে একটি অ্যাপ অডিও ফোকাস হারায় কিন্তু অডিও চালাতে থাকে।
- ফেড-আউট মেকানিজম: যখন কোনো অ্যাপ নতুন অনুরোধকারী অ্যাপে অডিও ফোকাস হারায়:
- অডিও ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে হারিয়ে যাওয়া অ্যাপ অডিওকে বিবর্ণ করে দেয়।
- ফেইড-আউট অনুসরণ করে, অডিও স্ট্রীম সিস্টেম দ্বারা নীরব করা হয়।
- অ্যাপটি তখন একটি অডিও ফোকাস হারানোর বিজ্ঞপ্তি পায়।
- অপব্যবহারকারী অ্যাপগুলি অডিও ফোকাস ফিরে না পাওয়া পর্যন্ত নীরব করা হয়।
- ডিফল্ট লজিক হল 2 সেকেন্ড পরে বিবর্ণ হয়ে যাওয়া অ্যাপগুলিতে বিবর্ণ হওয়া। যাইহোক, OEM গুলি এটিকে যেকোন টাইমআউট মানের সাথে কনফিগার করতে পারে।
- অডিও ফ্রেমওয়ার্ক ফেইড-আউট এবং ফেড-ইন উভয় অপারেশনের জন্য OEM কনফিগারেশন ব্যবহার করে।
OEM কনফিগারেশন ফাইল: Android 15-এ একটি নতুন কনফিগারেশন ফাইল রয়েছে,
car_audio_fade_configuration.xml
:- এই ফাইলটি OEM-কে সিস্টেমের অডিও ফোকাস এনফোর্সমেন্ট কখন হারানো অ্যাপে প্রয়োগ করা হয় তার মানদণ্ড নির্ধারণ করতে দেয়।
- অডিও ফ্রেমওয়ার্ক ফেড-আউট এবং সাইলেন্সিং প্রয়োগ করে শুধুমাত্র যদি হারানো অ্যাপটি এই XML ফাইলে OEM-সংজ্ঞায়িত নিয়মের সাথে মেলে।
- এটি অ্যাপ বৈশিষ্ট্য বা অডিও ব্যবহারের প্রকারের উপর ভিত্তি করে বৈশিষ্ট্যের আচরণ কাস্টমাইজ করার জন্য OEM-এর জন্য একটি প্রক্রিয়া প্রদান করে।
RRO এর সাথে বৈশিষ্ট্য নিয়ন্ত্রণ: একটি নতুন রানটাইম রিসোর্স ওভারলে (RRO) বৈশিষ্ট্য পতাকা,
audioUseFadeManagerConfiguration
, এই বৈশিষ্ট্যটি সক্ষম বা নিষ্ক্রিয় করতে চালু করা হয়েছে:- বৈশিষ্ট্যটি ডিফল্টরূপে অক্ষম করা হয়।
- সিস্টেম-প্রয়োগকৃত অডিও ফোকাস লস সক্রিয় করতে, OEM-কে অবশ্যই এই পতাকাটিকে
true
হিসাবে সেট করতে হবে৷ - যদিও গাড়ির অডিও ফ্রেমওয়ার্ক বৈধ ফেইড কনফিগারেশনের আশা করে যখন পতাকা সক্ষম করা হয়, তবে এই ধরনের সংজ্ঞাগুলির অনুপস্থিতি স্বয়ংক্রিয়ভাবে একটি মারাত্মক ব্যতিক্রম ঘটায় না।
- ফেইড কনফিগারেশনের সব অ্যাপে অবশ্যই ফেইড সংজ্ঞা মিলে যাবে। একটি বৈধ সংজ্ঞা প্রদান না করে গাড়ির অডিও কনফিগারেশনের অংশ হিসাবে একটি ফেইড কনফিগারেশন (এর নাম অনুসারে) কল করা একটি মারাত্মক ত্রুটি।
- পতাকা নিষ্ক্রিয় করা হলে, সমস্ত ফেড কনফিগার সংজ্ঞা এবং যেকোন কনফিগার রেফারেন্স উপেক্ষা করা হয়।
ফেইড ম্যানেজার কনফিগারেশন
Android 15 অডিও ফ্রেমওয়ার্ক একটি ইউনিফাইড FadeManagerConfiguration
প্রবর্তন করে যাতে অডিও ফেইডিং আচরণের উপর দানাদার নিয়ন্ত্রণ সহ OEMs প্রদান করে। এই কাঠামোটি চিত্র 3 এ চিত্রিত করা হয়েছে:
চিত্র 3. ফেইড ম্যানেজার কনফিগারেশন।
এই কনফিগারেশন অন্তর্ভুক্ত:
- ফেড ট্রানজিশন বৈশিষ্ট্য: ফেড-আউট এবং ফেড-ইন উভয়ের জন্য সেটিংস।
- নির্দিষ্ট অডিও ব্যবহার বা বৈশিষ্ট্য দিয়ে সংজ্ঞায়িত করা যেতে পারে।
- কাস্টম সময়কাল সেটিংসের জন্য অনুমতি দেয়।
- এই সেটিংস
VolumeShaper.Configuration
নির্মাণে ব্যবহৃত হয়।
- ফেইডিং পলিসি: ফেইড হওয়ার সময় নিয়ন্ত্রণকারী নিয়ম।
- ফ্যাডিং সক্ষম বা অক্ষম করতে একটি বিশ্বব্যাপী টগল।
- বিবর্ণযোগ্য অডিও ব্যবহারের একটি কনফিগারযোগ্য তালিকা (ফোকাস হারানোর পরে ফেইড-আউটের জন্য যোগ্য)।
- বর্জন তালিকা (অবিবর্ণ) সমালোচনামূলক বা মনোনীত অডিও উত্সগুলি বিবর্ণ হতে বাধা দেয়। এই তালিকাগুলির উপর ভিত্তি করে করা যেতে পারে:
- বিষয়বস্তুর প্রকার
- অডিও বৈশিষ্ট্য
- অ্যাপ ইউআইডি (শুধুমাত্র রানটাইমের সময় সেট করা যেতে পারে)
OEM কনফিগারেশন
এই বিভাগে, আমরা উপলব্ধ OEM কাস্টমাইজেশন দেখি।
গাড়ির অডিও ফেইড কনফিগারেশন XML ফাইল
Android 15 একটি নতুন কনফিগারেশন ফাইল প্রবর্তন করেছে, car_audio_fade_configuration.xml
, ফোকাস হারানোর সময় অডিও ফেইড-আউট আচরণের ব্যাপক OEM কাস্টমাইজেশন সক্ষম করে।
- এই XML ফাইলটি একাধিক স্বতন্ত্র ফেইড কনফিগারেশনের সংজ্ঞার জন্য অনুমতি দেয়, প্রতিটির
car_audio_configuration.xml
মধ্যে ক্রস-রেফারেন্সিংয়ের জন্য একটি অনন্য নামের প্রয়োজন। - এই কনফিগারেশনগুলি নমনীয়ভাবে বিভিন্ন অডিও জোন এবং জোন কনফিগারেশন জুড়ে প্রয়োগ করা যেতে পারে।
- উল্লেখযোগ্যভাবে, প্রতিটি ফেড কনফিগারেশন শুধুমাত্র মিলিসেকেন্ডে সময়কালের মান গ্রহণ করে, যা সিস্টেমটি অভ্যন্তরীণভাবে সংশ্লিষ্ট
VolumeShaper.Configuration
তৈরি করতে ব্যবহার করে।
ব্যবহারিক বাস্তবায়ন নির্দেশিকা জন্য, device/generic/car/emulator/audio/car_audio_fade_configuration.xml
এ অবস্থিত এমুলেটরের জন্য প্রদত্ত উদাহরণ কনফিগারেশনগুলি দেখুন।
গাড়ির অডিও কনফিগারেশন XML ফাইল
Android 15 একটি আপডেট করা car_audio_configuration.xml
ফাইল প্রবর্তন করেছে, এখন সংস্করণ 4 এ, যা নতুন applyFadeConfigs
এবং fadeConfig
ট্যাগগুলিকে অন্তর্ভুক্ত করে। applyFadeConfigs
ট্যাগে একাধিক fadeConfig
সংজ্ঞা থাকতে পারে, যা নমনীয় ফেইড কনফিগারেশনের অনুমতি দেয়। প্রতিটি সংজ্ঞা:
-
isDefault = true
এর সাথে মনোনীত একটি ডিফল্টfadeConfig
অন্তর্ভুক্ত করতে হবে। - বিভিন্ন ক্ষণস্থায়ী
fadeConfig
সংজ্ঞা অন্তর্ভুক্ত করতে পারে। এই ক্ষণস্থায়ী কনফিগারেশনগুলি বিশেষভাবে অডিও ফোকাস লস ইন্টারঅ্যাকশনের সময় প্রয়োগ করা হয়, এবং শুধুমাত্র যখন অডিও ফোকাস অর্জনকারী অ্যাপটি ক্ষণস্থায়ী কনফিগারেশনের মধ্যে সংজ্ঞায়িত মানদণ্ডের সাথে মেলে।
ব্যবহারিক বাস্তবায়ন নির্দেশিকা জন্য, device/generic/car/emulator/audio/car_audio_configuration.xml
এ অবস্থিত এমুলেটরের জন্য প্রদত্ত উদাহরণ কনফিগারেশনগুলি দেখুন।
OEM অডিও ফোকাস পরিষেবা এক্সটেনশন
যে OEMগুলি একটি কাস্টম কার অডিও ফোকাস পরিষেবা প্রয়োগ করে তাদের OemCarAudioFocusResult
মধ্যে অন্তর্ভুক্ত করে অডিও ফেড সেটিংস কনফিগার করার নমনীয়তা রয়েছে৷ এটি setAudioAttributesToCarAudioFadeConfigurationMap()
নির্মাতা পদ্ধতি ব্যবহার করে অর্জন করা যেতে পারে:
/** @see OemCarAudioFocusResult#getAudioAttributesToCarAudioFadeConfigurationMap() **/
@NonNull
public Builder setAudioAttributesToCarAudioFadeConfigurationMap(@NonNull
Map<AudioAttributes, CarAudioFadeConfiguration> attrsToCarAudioFadeConfig) {
}
উল্লেখযোগ্যভাবে, OEMs হয় প্রি-কনফিগার করা বুট-টাইম ফেইড সেটিংস ব্যবহার করতে বা তাদের কাস্টম অডিও ফোকাস পরিষেবার মাধ্যমে গতিশীলভাবে কনফিগারেশন প্রয়োগ করতে বেছে নিতে পারে, অভিযোজনযোগ্য নিয়ন্ত্রণের প্রস্তাব দেয়।
সিকোয়েন্স ডায়াগ্রাম
এই সিকোয়েন্স ডায়াগ্রামটি App2
কে অডিও ফোকাস অনুদান এবং App1
দ্বারা অডিও ফোকাস হারানোর পরবর্তী আচরণকে চিত্রিত করে:
- কার অডিও পরিষেবা
App1
এ অডিও ফোকাস লস পাঠানোর পরে,App1
প্লেয়ার থেকে প্লেব্যাকটি একটি ফেড-আউট হয়ে যায় যা সক্রিয়FadeManagerConfiguration
s দ্বারা সংজ্ঞায়িত করা হয়েছে। একবার ফেইড-আউট অপারেশন সম্পূর্ণ হলে,App1
স্ট্যান্ডার্ড অডিও ফোকাস লস কলব্যাক পায়। - ঐচ্ছিকভাবে,
App1
জন্য অডিওটি কনফিগারযোগ্য সময়কালের পরে বিবর্ণ হয়ে যেতে পারে। OEM-দের তাদের নির্দিষ্ট পণ্যের প্রয়োজনীয়তা অনুযায়ীBuilder#setFadeInDurationForUsage(int, long)
এর মাধ্যমে এই সময়কাল সেট করার নমনীয়তা রয়েছে।
চিত্র 4. গাড়ির অডিও ফেড বৈশিষ্ট্যের জন্য সিকোয়েন্স ডায়াগ্রাম।
মাল্টি-জোন ফোকাস ব্যবস্থাপনা
একাধিক অডিও জোন সহ যানবাহনের জন্য, প্রতিটি জোনের জন্য অডিও ফোকাস স্বাধীনভাবে পরিচালিত হয়। যেমন, একটি জোনের অনুরোধ অন্য জোনে কী ফোকাস ধরে রাখে তা বিবেচনায় নেয় না, বা এটি অন্য জোনের ফোকাস হোল্ডারদের ফোকাস হারাতে দেয় না। এটির সাহায্যে, মূল কেবিনের ফোকাসটি পিছনের সিটের বিনোদন ব্যবস্থা থেকে আলাদাভাবে পরিচালনা করা যেতে পারে, যার ফলে একটি জোনে ফোকাসে অন্য জায়গায় পরিবর্তনের মাধ্যমে অডিও প্লেব্যাক বাধাগ্রস্ত হয় না।
সমস্ত অ্যাপের জন্য, CarAudioService
স্বয়ংক্রিয়ভাবে ফোকাস পরিচালনা করে। একটি ফোকাস অনুরোধের অডিও জোন তার সংশ্লিষ্ট UserId
বা UID
দ্বারা নির্ধারিত হয় (বিশদ বিবরণের জন্য, মাল্টি-জোন অডিও রাউটিং দেখুন)।
একযোগে একাধিক অঞ্চল থেকে অডিও অনুরোধ করুন
যদি কোনো অ্যাপ একসাথে একাধিক জোনে অডিও চালাতে চায়, তাহলে তাকে অবশ্যই বান্ডেলে AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
অন্তর্ভুক্ত করে প্রতিটি জোনের জন্য ফোকাস করার অনুরোধ করতে হবে:
//Create attribute with bundle and AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
Bundle bundle = new Bundle();
bundle.putInt(CarAudioManager.AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID,
zoneId);
AudioAttributes attributesWithZone = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.addBundle(bundle)
.build();
//Create focus request using built attributesWithZone
এই বান্ডেল প্যারামিটার অনুরোধকারীকে স্বয়ংক্রিয় অডিও জোন ম্যাপিংগুলিকে ওভাররাইড করার পরিবর্তে নির্দিষ্ট জোন আইডি ব্যবহার করার অনুমতি দেয়৷ অতএব, একটি অ্যাপ বিভিন্ন অডিও জোনের জন্য পৃথক অনুরোধ জারি করতে পারে।
HAL অডিও ফোকাস
অ্যান্ড্রয়েড 11 থেকে শুরু করে, HAL বহিরাগত স্ট্রিমগুলির পক্ষ থেকে ফোকাস করার অনুরোধ করতে সক্ষম। ঐচ্ছিক হলেও, বাহ্যিক শব্দগুলিকে অ্যান্ড্রয়েড ইকোসিস্টেমে সর্বোত্তম অংশগ্রহণকারী হতে এবং একটি নির্বিঘ্ন ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে সক্ষম করার জন্য এই APIগুলির ব্যবহারকে অত্যন্ত উৎসাহিত করা হয়।
কোন শব্দগুলিকে অগ্রাধিকার দেওয়া উচিত তা HAL চূড়ান্ত সিদ্ধান্ত নেয়৷ এই পরিমাণে, HAL-কে অডিও ফোকাস দেওয়া হোক বা না হোক, জরুরী এবং নিরাপত্তা সংক্রান্ত সমালোচনামূলক শব্দগুলি বাজানো উচিত এবং HAL অডিও ফোকাস হারাতে পারলেও যথাযথভাবে বাজানো উচিত। সরকারী প্রবিধান দ্বারা প্রয়োজনীয় যেকোনো শব্দের ক্ষেত্রেও একই কথা প্রযোজ্য।
জরুরী বা নিরাপত্তা-সমালোচনা শব্দগুলি বাজানোর সময় HAL-এর উচিত সক্রিয়ভাবে Android স্ট্রীমগুলিকে নিঃশব্দ করা যাতে সেগুলি স্পষ্টভাবে শোনা যায়।
অডিও কন্ট্রোল@2.0
অডিওকন্ট্রোল এইচএএল-এর সংস্করণ 2.0 এই নতুন APIগুলিকে প্রবর্তন করে:
API | উদ্দেশ্য |
---|---|
IAudioControl#registerFocusListener | অডিও কন্ট্রোল HAL-এর সাথে IFocusListener এর একটি উদাহরণ নিবন্ধন করে। এই শ্রোতা HAL কে অনুরোধ করতে এবং অডিও ফোকাস ত্যাগ করতে সক্ষম করে। HAL শ্রোতাকে নিবন্ধনমুক্ত করতে Android দ্বারা ব্যবহার করার জন্য একটি ICloseHandle উদাহরণ প্রদান করে। |
IAudioControl#onAudioFocusChange | প্রাথমিক ফোকাস অনুরোধের প্রতিক্রিয়া সহ IFocusListener মাধ্যমে HAL দ্বারা করা ফোকাস অনুরোধের অবস্থার পরিবর্তনের HAL-কে অবহিত করে। |
IFocusListener#requestAudioFocus | HAL-এর পক্ষ থেকে একটি নির্দিষ্ট ব্যবহার, জোন আইডি এবং ফোকাস লাভ টাইপের জন্য ফোকাস করার অনুরোধ। |
IFocusListener#abandonAudioFocus | নির্দিষ্ট ব্যবহার এবং জোন আইডির জন্য বিদ্যমান HAL ফোকাস অনুরোধগুলি পরিত্যাগ করে৷ |
HAL-এর একই সময়ে একাধিক ফোকাস অনুরোধ থাকতে পারে, কিন্তু প্রতি ব্যবহার এবং জোন আইডি জোড়ার জন্য একটি অনুরোধের মধ্যে সীমাবদ্ধ। অ্যান্ড্রয়েড অনুমান করে যে একবার অনুরোধ করা হলে HAL অবিলম্বে একটি ব্যবহারের জন্য শব্দ বাজানো শুরু করে এবং এটি ফোকাস ত্যাগ না করা পর্যন্ত এটি চালিয়ে যায়।
registerFocusListener
ব্যতীত, ফোকাস অনুরোধ প্রক্রিয়া করার সময় Android যাতে HAL-কে বিলম্ব না করে তা নিশ্চিত করার জন্য এই অনুরোধগুলি oneway
। নিরাপত্তা-সমালোচনামূলক শব্দ বাজানোর আগে HAL-এর ফোকাস পাওয়ার জন্য অপেক্ষা করা উচিত নয় । IAudioControl#onAudioFocusChange
মাধ্যমে অডিও ফোকাসের পরিবর্তনগুলি শুনতে এবং প্রতিক্রিয়া জানানো HAL-এর পক্ষে ঐচ্ছিক৷
OEM গাড়ী অডিও ফোকাস সেবা
অ্যান্ড্রয়েড 14-এ, AAOS গাড়ির কিছু উপাদানের জন্য কনফিগারযোগ্যতা সক্ষম করতে গাড়ি OEM প্লাগইন পরিষেবা চালু করেছে। কার অডিও প্লাগইন পরিষেবার জন্য, প্লাগইন পরিষেবা OEM-গুলিকে গাড়ির অডিও পরিষেবা দ্বারা বাধা দেওয়া ফোকাস অনুরোধগুলি পরিচালনা করার অনুমতি দেয়৷ এটি নিয়ম ও প্রবিধান দ্বারা প্রয়োজনীয় ফোকাস পরিচালনার ক্ষেত্রে OEM-কে আরও নমনীয়তা দেয়। যেমন, অডিও ফোকাস মিথস্ক্রিয়া নির্মাতাদের মধ্যে এবং অঞ্চল থেকে অঞ্চলে আলাদা হতে পারে। অডিও ফোকাসের মূল ভিত্তিটি এখনও ধারণ করে, যে অ্যাপগুলিকে এখনও ব্যবহারকারীর অভিজ্ঞতা বাড়ানোর জন্য আরও ভাল পরিচালনা অডিওর জন্য ফোকাসের অনুরোধ করা উচিত। সাধারণভাবে, কিছু নিয়ম এখনও অ্যাপের অডিও ফোকাস অনুরোধের জন্য প্রযোজ্য:
কোনো দাঁড়ানো ছাড়াই, উচ্চ অগ্রাধিকার অডিও ফোকাস (একটি ফোন কল, জরুরী সতর্কতা, বা নিরাপত্তা বিজ্ঞপ্তি সহ) অ্যাপগুলি অস্থায়ীভাবে বা স্থায়ীভাবে অডিও ফোকাস পেতে সক্ষম হওয়া উচিত।
যখন একটি মিডিয়া ফোকাস সক্রিয় থাকে:
কল ব্যবহারের ফোকাস অনুরোধকারী অ্যাপগুলি একযোগে বা একচেটিয়াভাবে কল গ্রহণ করতে সক্ষম হওয়া উচিত।
ন্যাভিগেশন ব্যবহারের ফোকাসের অনুরোধকারী অ্যাপগুলি একযোগে বা একচেটিয়াভাবে নেভিগেশন ফোকাস পেতে সক্ষম হওয়া উচিত।
অ্যাসিস্ট্যান্ট ব্যবহারের ফোকাস অনুরোধকারী অ্যাপগুলি একইসঙ্গে বা একচেটিয়াভাবে ব্যবহারের ফোকাস পেতে সক্ষম হওয়া উচিত।
উচ্চ অগ্রাধিকার অডিও ফোকাস (একটি ফোন কল, জরুরী সতর্কতা, বা নিরাপত্তা বিজ্ঞপ্তি সহ) অ্যাপ্লিকেশানগুলি সক্রিয় থাকা অবস্থায়, যেকোন আগত বিলম্বিত অডিও ফোকাস অনুরোধ প্রয়োজন অনুসারে মঞ্জুর করা উচিত বা বিলম্বিত করা উচিত।
যদিও এই পরামর্শগুলি সম্পূর্ণ নয়, সেগুলি অ্যাপ্লিকেশানগুলিকে সাহায্য করতে পারে ফোকাস পেতে ফোকাস পাওয়ার জন্য যদি কোনো সক্রিয় উচ্চ অগ্রাধিকার শব্দ না থাকে। উচ্চ অগ্রাধিকারের শব্দগুলি সক্রিয় থাকা সত্ত্বেও, বিলম্বিত ফোকাস অনুরোধগুলিকে এখনও সম্মান করা উচিত এবং উচ্চ অগ্রাধিকারের শব্দ বন্ধ হয়ে গেলে ফোকাস পেতে সক্ষম হওয়া উচিত।