Android 10 ব্যবহারকারীর অভিজ্ঞতা উন্নত করে, এর জন্য একাধিক অ্যাক্টিভ অডিও ক্যাপচার একই সাথে হতে হবে, যেমন, ব্যবহারকারী যদি অ্যাক্সেসিবিলিটি পরিষেবা প্রদান করা ভয়েস কমান্ডের মাধ্যমে VoIP কল বা ভিডিও রেকর্ডার নিয়ন্ত্রণ করতে চান।
অডিও ফ্রেমওয়ার্ক এমন নীতি প্রয়োগ করে যা শুধুমাত্র বিশেষ সুবিধা প্রাপ্ত অ্যাপগুলিকে সাধারণ অ্যাপের সাথে একসাথে ক্যাপচার করার অনুমতি দেয়।
কনকারেন্সি নীতি প্রয়োগ করার জন্য, ক্যাপচার করা অডিও বন্ধ করে দেওয়া হয়, কোনও অ্যাপ্লিকেশনকে ক্যাপচার শুরু করা থেকে আটকানো হয় না। এটি ফ্রেমওয়ার্ককে অ্যাক্টিভ ক্যাপচার ব্যবহার করার কেসগুলির সংখ্যা ও ধরনের পরিবর্তনগুলি ডাইনামিক পদ্ধতিতে অ্যাড্রেস করতে দেয়। এর ফলে, অন্য কোনও অ্যাপ ক্যাপচার করা শেষ করার পরে কোনও অ্যাপ মাইক্রোফোনের সম্পূর্ণ অ্যাক্সেস ফিরে পেলে, সেই অ্যাপকে ক্যাপচার শুরু করা থেকে বাধা দেওয়া হয় না।
অডিও HAL এবং অডিও সাবসিস্টেমের জন্য এর ফলাফল হল যে তাদের অবশ্যই একসাথে একাধিক অ্যাক্টিভ ইনপুট স্ট্রিম সাপোর্ট করতে হবে, এমনকি কিছু ক্ষেত্রে, শুধুমাত্র একটি স্ট্রিম অ্যাক্টিভ ক্লায়েন্টকে নন-সাইলেন্ট অডিও প্রদান করে।
CDD সংক্রান্ত প্রয়োজনীয়তা
একসাথে ক্যাপচার করার সুবিধা সংক্রান্ত প্রয়োজনীয়তা সম্পর্কে জানতে CDD দেখুন।
অডিও HAL থেকে পরিস্থিতি ক্যাপচার করা
একসাথে ক্যাপচার করার সিনারিওতে অ্যাক্টিভ ইনপুট স্ট্রিমের সংখ্যা, ইনপুট ডিভাইস বেছে নেওয়া বা প্রসেসিং-পূর্ব কনফিগারেশনের ক্ষেত্রে বিভিন্ন পরিস্থিতি তৈরি হতে পারে।
নিম্নলিখিতগুলির মধ্যে কনকারেন্সি হতে পারে:
- অ্যাপ্লিকেশন প্রসেসর (AP) থেকে একাধিক ইনপুট স্ট্রিম
- ইনপুট স্ট্রিম ও ভয়েস কল
- ইনপুট স্ট্রিম এবং একটি অডিও ডিএসপি কম-পাওয়ার হটওয়ার্ড শনাক্তকরণ প্রয়োগ করছে
AP ইনপুট স্ট্রিমের কনকারেন্ট অ্যাক্টিভিটি
অডিও ফ্রেমওয়ার্কের মাধ্যমে অডিও নীতি কনফিগারেশন ফাইল audio_policy_configuration.xml ব্যবহার করা হয় যাতে
কতগুলি ইনপুট স্ট্রিম একসাথে খোলা ও অ্যাক্টিভ রাখা যাবে তা নির্ধারণ করা যায়।
ন্যূনতম, অডিও HAL-কে ওপেন
ও অ্যাক্টিভ কনফিগারেশন ফাইলে তালিকাভুক্ত প্রতিটি ইনপুট
প্রোফাইলের অন্তত একটি ইনস্ট্যান্স (mixPort রোল sink) কাজ করতে হবে।
ডিভাইস বেছে নেওয়া
একই HAL ইনপুট স্ট্রিমে একাধিক অ্যাক্টিভ ক্লায়েন্ট অ্যাটাচ করা থাকলে, ফ্রেমওয়ার্ক ব্যবহারের কেস সংক্রান্ত অগ্রাধিকারের ভিত্তিতে এই ইনপুট স্ট্রিমের জন্য উপযুক্ত ডিভাইস বেছে নেয়।
একাধিক ইনপুট স্ট্রিম অ্যাক্টিভ থাকলে, প্রতিটি স্ট্রিমের জন্য আলাদা ডিভাইস বেছে নেওয়া যেতে পারে।
প্রযুক্তিটি মানানসই হলে, অডিও HAL এবং সাবসিস্টেমকে ব্লুটুথ হেডসেট এবং বিল্ট-ইন মাইকের মতো বিভিন্ন ডিভাইস থেকে বিভিন্ন স্ট্রিম ক্যাপচার করার অনুমতি দেওয়ার পরামর্শ দেওয়া হয়।
যদি কোনও ইনকম্প্যাটিবিলিটি থাকে (যেমন, দুটি ডিভাইস একই ডিজিটাল অডিও ইন্টারফেস বা ব্যাক এন্ড শেয়ার করে) তাহলে অডিও HAL-কে বেছে নিতে হবে কোন স্ট্রিম ডিভাইস কন্ট্রোল করবে।
এই ক্ষেত্রে:
- একই পরিস্থিতি বারবার ঘটলে, ফলাফল একই হতে হবে এবং একই ডিভাইস বেছে নেওয়ার বিকল্প অফার করতে হবে।
- কনকারেন্সি স্টেট শেষ হয়ে গেলে, বাকি অ্যাক্টিভ স্ট্রিমকে অবশ্যই এই স্ট্রিমের শুরুতে অনুরোধ করা ডিভাইসে রাউট করতে হবে।
অডিও HAL-এর মাধ্যমে অ্যাক্টিভ ব্যবহারের ক্ষেত্রে অগ্রাধিকারের ক্রম নির্ধারণ করা থাকলে, source_priority()-এ
frameworks/av/services/audiopolicy/common/include/policy.h-এ
যে ক্রম পাওয়া গেছে সেটি অনুসরণ করুন
প্রিপ্রসেসিং বেছে নেওয়া
অডিও ফ্রেমওয়ার্ক addEffect() বা removeEffect() HAL পদ্ধতি ব্যবহার করে ইনপুট স্ট্রিমে প্রিপ্রসেসিংয়ের অনুরোধ করতে পারে।
প্রদত্ত ইনপুট স্ট্রিমে প্রিপ্রসেসিংয়ের জন্য, অডিও ফ্রেমওয়ার্ক শুধুমাত্র ইনপুট স্ট্রিমে সবচেয়ে বেশি অগ্রাধিকারপ্রাপ্ত অ্যাক্টিভ ব্যবহারের ক্ষেত্রে প্রযোজ্য কনফিগারেশন চালু করে। তবে, ব্যবহারের ক্ষেত্রে অ্যাক্টিভেশন ও ডিঅ্যাক্টিভেশনের সময় কিছু ওভারল্যাপ হতে পারে, যার ফলে একই ইনপুট স্ট্রিমে দুটি অ্যাক্টিভ প্রসেস (যেমন, ইকো ক্যানসেলারের দুটি ইনস্ট্যান্স) একসাথে চলতে পারে। এই ক্ষেত্রে, HAL ইমপ্লিমেন্টেশন বেছে নেয় কোন অনুরোধটি গ্রহণ করা হবে; এটি অ্যাক্টিভ অনুরোধ ট্র্যাক করে এবং কোনও একটি প্রসেস বন্ধ করা হলে সঠিক অবস্থা রিস্টোর করে।
একসাথে একাধিক ক্যাপচার স্ট্রিম অ্যাক্টিভ থাকলে, আলাদা আলাদা স্ট্রিমে আলাদা আলাদা প্রিপ্ৰসেসিং অনুরোধ রান করা হতে পারে।
HAL এবং অডিও সাবসিস্টেমের প্রয়োগের ফলে বিভিন্ন স্ট্রিমের উপর আলাদা আলাদা প্রসেসিং প্রয়োগ করা যায়, এমনকি সেগুলি একই ইনপুট ডিভাইস শেয়ার করলেও। অর্থাৎ, প্রাইমারি ক্যাপচার সোর্স থেকে স্ট্রিম ডিমাক্স করার পরে প্রি-প্রসেসিং প্রয়োগ করতে হবে।
কোনও প্রদত্ত অডিও সাবসিস্টেমে টেকনিক্যাল কারণে এটি সম্ভব না হলে, অডিও HAL-কে ডিভাইস বেছে নেওয়া বিভাগে তালিকাভুক্ত প্রায় একই ধরনের অগ্রাধিকার সংক্রান্ত নিয়ম প্রয়োগ করতে হবে।
AP থেকে একই সাথে ভয়েস কল ও ক্যাপচার
ভয়েস কল অ্যাক্টিভ থাকাকালীন AP থেকে ক্যাপচার করা হতে পারে। এই পরিস্থিতি Android 10-এ নতুন নয় এবং এটি সরাসরি কনকারেন্ট ক্যাপচার ফিচারের সাথে সম্পর্কিত নয়, তবে এই পরিস্থিতির জন্য নির্দেশিকা উল্লেখ করা দরকার।
কল চলাকালীন AP থেকে দুই ধরনের আলাদা আলাদা ক্যাপচার প্রয়োজন।
কল RX ও TX ক্যাপচার করা
কল RX ও TX ক্যাপচার করার বিষয়টি অডিও সোর্স
AudioSource.VOICE_UPLINK বা AudioSource.VOICE_DOWNLINK এবং/অথবা ডিভাইস
AudioDevice.IN_TELEPHONY_RX ব্যবহার করার মাধ্যমে ট্রিগার করা হয়।
অডিও HAL-এর ইনপুট প্রোফাইলে (sink রোলের mixPort)
AudioDevice.IN_TELEPHONY_RX ডিভাইস থেকে উপলভ্য রুট সহ এক্সপোজ করা উচিত।
কল কানেক্ট হলে (অডিও মোড AudioMode.IN_CALL), ডিভাইস AudioDevice.IN_TELEPHONY_RX থেকে অন্তত একটি অ্যাক্টিভ ক্যাপচার স্ট্রিম থাকা উচিত।
কল অ্যাক্টিভ থাকলে ইনপুট ডিভাইস থেকে ক্যাপচার করুন
কল চালু থাকলে (অডিও মোড AudioMode.IN_CALL), AP ইনপুট স্ট্রিমের কনকারেন্ট অ্যাক্টিভিটি
বিভাগে উল্লেখ করা AP থেকে ইনপুট স্ট্রিম খোলা ও চালু করা উচিত।
তবে, AP ইনপুট স্ট্রিম থেকে আসা অনুরোধের সাথে কোনও দ্বন্দ্ব হলে, ডিভাইস বেছে নেওয়া এবং প্রি-প্রসেসিংয়ের ক্ষেত্রে ভয়েস কলকে সবসময় অগ্রাধিকার দিতে হবে।
DSP ও AP থেকে একইসাথে ক্যাপচার করা
অডিও সাবসিস্টেমে কম-পাওয়ার অডিও কনটেক্সট বা হটওয়ার্ড শনাক্তকরণ ফাংশন সাপোর্ট করে এমন DSP থাকলে, ইমপ্লিমেন্টেশনে AP ও অডিও DSP থেকে একইসাথে ক্যাপচার করার সুবিধা থাকতে হবে।
এর মধ্যে প্রাথমিক শনাক্তকরণ ফেজ চলাকালীন DSP-এর মাধ্যমে ক্যাপচার করা এবং DSP-এর মাধ্যমে শনাক্তকরণ ট্রিগার হওয়ার পরে AP-এর মাধ্যমে ক্যাপচার করা
AudioSource.HOTWORD দুটিই অন্তর্ভুক্ত।
এটি সাউন্ড ট্রিগার HAL-এর মাধ্যমে রিপোর্ট করা কনকারেন্ট ক্যাপচার ফ্ল্যাগ দ্বারা প্রতিফলিত হওয়া উচিত
ইমপ্লিমেন্টেশন ডেসক্রিপ্টর: ISoundTriggerHw.Properties.concurrentCapture = true.
এছাড়াও, অডিও HAL-কে AudioInputFlag.HW_HOTWORD ফ্ল্যাগ দ্বারা চিহ্নিত করা হটওয়ার্ড ক্যাপচারের জন্য নির্দিষ্ট ইনপুট প্রোফাইল প্রকাশ করতে হবে।
এই প্রোফাইলে, সাউন্ড ট্রিগার HAL একই সাথে যতগুলি সাউন্ড মডেল লোড করতে পারে, অন্তত ততগুলি স্ট্রিম খোলার ও
অ্যাক্টিভেট করার সুবিধা ইমপ্লিমেন্টেশনে থাকতে হবে।
অন্য ইনপুট প্রোফাইল অ্যাক্টিভ থাকাকালীন এই ইনপুট প্রোফাইল থেকে ক্যাপচার করা সম্ভব হতে হবে।
Assistant প্রয়োগের ক্ষেত্রে প্রভাব
ডেটা ব্যবহার ও ব্যবহারকারীকে বিজ্ঞপ্তি পাঠানো সংক্রান্ত প্রয়োজনীয়তা
কারণ, একই সাথে মাইক্রোফোন ব্যবহার করার সুবিধা অপব্যবহার করা হলে, ব্যবহারকারীর ব্যক্তিগত ডেটা ফাঁস হয়ে যেতে পারে, তাই আমাদের নিম্নলিখিত শর্তাবলী ও গ্যারান্টি প্রয়োজন যা Assistant-এর ভূমিকা পালন করার জন্য অনুরোধ করা প্রি-লোড করা বিশেষ অ্যাপের ক্ষেত্রে প্রযোজ্য হবে।
- ব্যবহারকারী Assistant-এর সাথে ইন্টার্যাক্ট না করলে, মাইক্রোফোনের মাধ্যমে সংগ্রহ করা ডেটা ডিভাইসের বাইরে পাঠানো যাবে না। যেমন, হটওয়ার্ড ট্রিগার হওয়ার পরে।
- একসাথে শোনা অ্যাপ্লিকেশনগুলিকে হটওয়ার্ড শনাক্ত করার পরে ব্যবহারকারীকে ভিজ্যুয়াল ইঙ্গিত দিতে হবে। এটি ব্যবহারকারীদের বুঝতে সাহায্য করে যে পরবর্তী কথোপকথন Assistant-এর মতো অন্য অ্যাপের মাধ্যমে হবে।
- ব্যবহারকারীর কাছে মাইক্রোফোন বা Assistant ট্রিগার বন্ধ করার সুবিধা থাকতে হবে।
- অডিও রেকর্ডিং সেভ করা হলে, ব্যবহারকারীদের যেকোনও সময় রেকর্ডিং অ্যাক্সেস, পর্যালোচনা ও মুছে দেওয়ার সুবিধা থাকতে হবে।
Android 10-এর জন্য ফাংশনাল উন্নতি
Assistant একে অপরকে ব্লক করছে না
Android 9 বা তার আগের যেকোনও ভার্সনে, ডিভাইসে দুটি সবসময় চালু থাকা অ্যাসিস্ট্যান্ট থাকলে, সেগুলির মধ্যে শুধুমাত্র একটি অ্যাসিস্ট্যান্টই তার হটওয়ার্ড শোনার জন্য অপেক্ষা করতে পারে। তাই, দুটি Assistant-এর মধ্যে পরিবর্তন করার প্রয়োজন ছিল। Android 10-এ, ডিফল্ট অ্যাসিস্ট্যান্ট অন্য অ্যাসিস্ট্যান্টের সাথে একসাথে শুনতে পারে। এর ফলে, ব্যবহারকারীরা দুটি অ্যাসিস্ট্যান্টের সাথেই অনেক মসৃণ অভিজ্ঞতা পান।
মাইক খোলা আছে এমন অ্যাপ
Shazam বা Waze-এর মতো অ্যাপ মাইক খোলা রাখলেও, ডিফল্ট Assistant এখনও হটওয়ার্ড শোনার জন্য অপেক্ষা করতে পারে।
ডিফল্ট নয় এমন Assistant অ্যাপের ক্ষেত্রে, Android 10-এ আচরণের কোনও পরিবর্তন হয় না।
অডিও HAL প্রয়োগের নমুনা
এই ডকুমেন্টে উল্লিখিত নির্দেশিকা মেনে অডিও HAL প্রয়োগের একটি উদাহরণ AOSP-তে পাওয়া যাবে।