২০২৬ সাল থেকে কার্যকর, আমাদের ট্রাঙ্ক স্থিতিশীল উন্নয়ন মডেলের সাথে সামঞ্জস্যপূর্ণ করতে এবং ইকোসিস্টেমের জন্য প্ল্যাটফর্ম স্থিতিশীলতা নিশ্চিত করতে, আমরা Q2 এবং Q4 তে AOSP-তে সোর্স কোড প্রকাশ করব। AOSP তৈরি এবং অবদান রাখার জন্য, আমরা aosp-main এর পরিবর্তে android-latest-release ব্যবহার করার পরামর্শ দিচ্ছি। android-latest-release ম্যানিফেস্ট শাখা সর্বদা AOSP-তে পুশ করা সাম্প্রতিকতম রিলিজটি উল্লেখ করবে। আরও তথ্যের জন্য, AOSP-তে পরিবর্তনগুলি দেখুন।
অডিও নীতি কনফিগার করুন
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
অ্যান্ড্রয়েড ১০ রিলিজে অডিও পলিসি ম্যানেজারের একটি উল্লেখযোগ্য রিফ্যাক্টরিং অন্তর্ভুক্ত করা হয়েছে, যা জটিল অটোমোটিভ ব্যবহারের ক্ষেত্রগুলোকে সমর্থন করার জন্য আরও বেশি নমনীয়তা প্রদান করে:
OEM-নির্দিষ্ট রাউটিং কৌশল।
একই ভলিউম কার্ভ ব্যবহার করে লিগ্যাসি স্ট্রিম টাইপের গ্রুপগুলোর জন্য কাস্টমাইজযোগ্য ভলিউম গ্রুপ।
রাউটিং কৌশলগুলো হার্ড কোড করা না হয়ে অডিও পলিসি ইঞ্জিন দ্বারা ঘোষিত হয়।
অডিও পলিসি ইঞ্জিন দ্বারা পরিচালিত ভলিউম কার্ভ এবং গ্রুপসমূহ।
ভবিষ্যতে কমন কোড এবং কনফিগারযোগ্য কোডের মধ্যে বিভাজন এবং আরও উন্নত অডিও ডিভাইস ম্যানেজমেন্টের সুবিধার জন্য অভ্যন্তরীণ রিফ্যাক্টরিং করা হচ্ছে। উদাহরণস্বরূপ, পলিসি রুলে শুধু ডিভাইসের টাইপ নয়, এর সমস্ত প্রপার্টি ব্যবহার করা।
অ্যান্ড্রয়েড ৭.০ আপনার অডিও টপোলজি বর্ণনা করার জন্য একটি অডিও পলিসি কনফিগারেশন ফাইল ফরম্যাট (XML) চালু করেছে।
পূর্ববর্তী অ্যান্ড্রয়েড রিলিজগুলোতে আপনার পণ্যে উপস্থিত অডিও ডিভাইসগুলো ঘোষণা করার জন্য device/<company>/<device>/audio/audio_policy.conf ব্যবহার করার প্রয়োজন হতো (গ্যালাক্সি নেক্সাস অডিও হার্ডওয়্যারের জন্য এই ফাইলের একটি উদাহরণ আপনি device/samsung/tuna/audio/audio_policy.conf এ দেখতে পারেন)। তবে, CONF হলো একটি সরল, মালিকানাধীন ফরম্যাট যা টেলিভিশন এবং গাড়ির মতো ক্ষেত্রগুলোর জটিল টপোলজি বর্ণনা করার জন্য খুবই সীমিত।
অ্যান্ড্রয়েড ৭.০-তে audio_policy.conf অপ্রচলিত ঘোষণা করা হয়েছে এবং একটি XML ফাইল ফরম্যাট ব্যবহার করে অডিও টপোলজি সংজ্ঞায়িত করার সুবিধা যোগ করা হয়েছে। এই ফরম্যাটটি আরও সহজে পাঠযোগ্য, এতে সম্পাদনা ও পার্সিংয়ের জন্য বিভিন্ন টুল রয়েছে এবং এটি জটিল অডিও টপোলজি বর্ণনা করার জন্য যথেষ্ট নমনীয়। অ্যান্ড্রয়েড ৭.০ কনফিগারেশন ফাইলের XML ফরম্যাট বেছে নেওয়ার জন্য USE_XML_AUDIO_POLICY_CONF বিল্ড ফ্ল্যাগটি ব্যবহার করে।
এক্সএমএল ফরম্যাটের সুবিধাগুলি
CONF ফাইলের মতোই, XML ফাইলটি আউটপুট ও ইনপুট স্ট্রিম প্রোফাইলের সংখ্যা ও প্রকার, প্লেব্যাক ও ক্যাপচারের জন্য ব্যবহারযোগ্য ডিভাইস এবং অডিও অ্যাট্রিবিউট নির্ধারণ করতে সক্ষম করে। এছাড়াও, XML ফরম্যাটটি নিম্নলিখিত বর্ধিত সুবিধাগুলো প্রদান করে:
অ্যান্ড্রয়েড ১০-এ একই সাথে একাধিক সক্রিয় রেকর্ডিং অ্যাপ ব্যবহারের অনুমতি রয়েছে।
যুগপৎ ক্রিয়াকলাপের কারণে রেকর্ডিং শুরু কখনো প্রত্যাখ্যাত হয় না।
` registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) কলব্যাকটি ক্লায়েন্টদের ক্যাপচার পাথের পরিবর্তন সম্পর্কে অবহিত করে।
নিম্নলিখিত পরিস্থিতিগুলিতে, একজন ক্লায়েন্ট নীরব অডিও নমুনা পেয়ে থাকেন:
একটি গোপনীয়তা-সংবেদনশীল ব্যবহারের ক্ষেত্র (যেমন, VOICE_COMMUNICATION ) সক্রিয় আছে।
ক্লায়েন্টের কোনো ফোরগ্রাউন্ড সার্ভিস বা ফোরগ্রাউন্ড UI নেই।
নীতিমালা দ্বারা বিশেষ ভূমিকাগুলো স্বীকৃত:
অ্যাক্সেসিবিলিটি পরিষেবা: গোপনীয়তা-সংবেদনশীল কোনো ব্যবহার সক্রিয় থাকলেও রেকর্ড করতে পারে।
সহকারী: UI উপরে থাকলে এটিকে গোপনীয়তা-সংবেদনশীল বলে বিবেচনা করা হয়।
অডিও প্রোফাইলগুলোর গঠন HDMI সিম্পল অডিও ডেসক্রিপ্টরের অনুরূপ, যা প্রতিটি অডিও ফরম্যাটের জন্য ভিন্ন ভিন্ন স্যাম্পলিং রেট/চ্যানেল মাস্ক ব্যবহারের সুযোগ দেয়।
ডিভাইস এবং স্ট্রিমের মধ্যে সমস্ত সম্ভাব্য সংযোগের জন্য সুস্পষ্ট সংজ্ঞা রয়েছে। পূর্বে, একটি অন্তর্নিহিত নিয়মের কারণে একই HAL মডিউলের সাথে সংযুক্ত সমস্ত ডিভাইসকে সংযুক্ত করা যেত, যা অডিও প্যাচ এপিআই (API) দ্বারা অনুরোধ করা সংযোগগুলিকে অডিও পলিসির নিয়ন্ত্রণে বাধা দিত। XML ফরম্যাটে, টপোলজি বর্ণনা সংযোগের সীমাবদ্ধতা নির্ধারণ করে।
এর সাপোর্টের ফলে স্ট্যান্ডার্ড A2DP, USB, বা রিরাউট সাবমিট ডেফিনিশনের পুনরাবৃত্তি এড়ানো যায়।
ভলিউম কার্ভগুলো কাস্টমাইজ করা যায়। পূর্বে, ভলিউম টেবিলগুলো হার্ডকোড করা থাকতো। XML ফরম্যাটে, ভলিউম টেবিলগুলোর বর্ণনা দেওয়া থাকে এবং সেগুলো কাস্টমাইজ করা যায়।
frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml এ থাকা টেমপ্লেটটিতে এই বৈশিষ্ট্যগুলোর অনেকগুলোর ব্যবহার দেখানো হয়েছে।
ফাইলের ফরম্যাট এবং অবস্থান
নতুন অডিও পলিসি কনফিগারেশন ফাইলটি হলো audio_policy_configuration.xml এবং এটি /system/etc তে অবস্থিত। নিম্নলিখিত উদাহরণগুলিতে অ্যান্ড্রয়েড ১২ এবং এর পূর্ববর্তী সংস্করণগুলির জন্য XML ফাইল ফরম্যাটে একটি সাধারণ অডিও পলিসি কনফিগারেশন দেখানো হয়েছে।
শীর্ষ-স্তরের কাঠামোটিতে প্রতিটি অডিও HAL হার্ডওয়্যার মডিউলের সাথে সঙ্গতিপূর্ণ মডিউল থাকে, যেখানে প্রতিটি মডিউলে মিক্স পোর্ট, ডিভাইস পোর্ট এবং রাউটের একটি তালিকা থাকে:
মিক্স পোর্টগুলো সেইসব স্ট্রিমের সম্ভাব্য কনফিগারেশন প্রোফাইল বর্ণনা করে, যেগুলো প্লেব্যাক ও ক্যাপচারের জন্য অডিও HAL-এ খোলা যেতে পারে।
ডিভাইস পোর্টগুলো সংযুক্ত করা যায় এমন ডিভাইসগুলোর ধরন (এবং প্রাসঙ্গিক হলে, ঐচ্ছিকভাবে অ্যাড্রেস ও অডিও বৈশিষ্ট্যসহ) বর্ণনা করে।
রাউটসকে মিক্স পোর্ট ডেসক্রিপ্টর থেকে আলাদা করা হয়েছে, যা ডিভাইস থেকে ডিভাইসে অথবা স্ট্রিম থেকে ডিভাইসে রাউটের বর্ণনা দিতে সক্ষম করে।
ভলিউম টেবিল হলো কিছু পয়েন্টের সাধারণ তালিকা, যা একটি UI ইনডেক্স থেকে dB-তে ভলিউম রূপান্তর করার জন্য ব্যবহৃত কার্ভকে সংজ্ঞায়িত করে। একটি আলাদা ইনক্লুড ফাইল ডিফল্ট কার্ভগুলো সরবরাহ করে, কিন্তু নির্দিষ্ট ব্যবহারের ক্ষেত্র এবং ডিভাইসের ক্যাটাগরির জন্য প্রতিটি কার্ভকে ওভাররাইট করা যায়।
অন্যান্য XML ফাইলে অবস্থিত অডিও পলিসি কনফিগারেশন তথ্য অন্তর্ভুক্ত করার জন্য XML ইনক্লুশন (XInclude) পদ্ধতিটি ব্যবহার করা যেতে পারে। অন্তর্ভুক্ত করা সমস্ত ফাইলকে অবশ্যই উপরে বর্ণিত কাঠামো অনুসরণ করতে হবে এবং নিম্নলিখিত সীমাবদ্ধতাগুলো থাকতে হবে:
ফাইলে শুধুমাত্র শীর্ষ-স্তরের উপাদান থাকতে পারে।
ফাইলে XInclude এলিমেন্ট থাকতে পারবে না।
স্ট্যান্ডার্ড অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP) অডিও HAL মডিউলের কনফিগারেশন তথ্য সমস্ত অডিও পলিসি কনফিগারেশন ফাইলে কপি করা এড়াতে 'includes' ব্যবহার করুন (যা ত্রুটিপ্রবণ)। নিম্নলিখিত অডিও HAL-গুলোর জন্য একটি স্ট্যান্ডার্ড অডিও পলিসি কনফিগারেশন XML ফাইল সরবরাহ করা হয়েছে:
AudioPolicyManager.cpp কয়েকটি মডিউলে বিভক্ত করা হয়েছে যাতে এর রক্ষণাবেক্ষণ ও কনফিগারেশন সহজ হয়। frameworks/av/services/audiopolicy এর বিন্যাসে নিম্নলিখিত মডিউলগুলো অন্তর্ভুক্ত রয়েছে।
মডিউল
বর্ণনা
/managerdefault
এতে সকল অ্যাপের জন্য সাধারণ ইন্টারফেস এবং আচরণের বাস্তবায়ন অন্তর্ভুক্ত রয়েছে। এটি AudioPolicyManager.cpp এর অনুরূপ, তবে এতে ইঞ্জিনের কার্যকারিতা এবং সাধারণ ধারণাগুলোকে আড়াল করা হয়েছে।
/common
বেস ক্লাসগুলো সংজ্ঞায়িত করে (উদাহরণস্বরূপ, ইনপুট আউটপুট অডিও স্ট্রিম প্রোফাইল, অডিও ডিভাইস ডেসক্রিপ্টর, অডিও প্যাচ এবং অডিও পোর্টের জন্য ডেটা স্ট্রাকচার)। এটি পূর্বে AudioPolicyManager.cpp ভিতরে সংজ্ঞায়িত ছিল।
/engine
এটি সেই নিয়মগুলো প্রয়োগ করে যা নির্ধারণ করে যে একটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে কোন ডিভাইস এবং ভলিউম ব্যবহার করা উচিত। এটি জেনেরিক অংশের সাথে একটি স্ট্যান্ডার্ড ইন্টারফেস প্রয়োগ করে, যেমন একটি নির্দিষ্ট প্লেব্যাক বা ক্যাপচার ব্যবহারের ক্ষেত্রে উপযুক্ত ডিভাইস পাওয়া, অথবা সংযুক্ত ডিভাইস বা বাহ্যিক অবস্থা (অর্থাৎ, বাধ্যতামূলক ব্যবহারের একটি কল স্টেট) সেট করা যা রাউটিং সিদ্ধান্ত পরিবর্তন করতে পারে।
পলিসি ইঞ্জিন বাস্তবায়ন যা প্যারামিটার ফ্রেমওয়ার্কের উপর নির্ভর করে (নিচে দেখুন)। কনফিগারেশনটি প্যারামিটার ফ্রেমওয়ার্কের উপর ভিত্তি করে তৈরি এবং যেখানে পলিসিটি এক্সএমএল (XML) ফাইলের মাধ্যমে সংজ্ঞায়িত করা হয়।
/enginedefault
পূর্ববর্তী অ্যান্ড্রয়েড অডিও পলিসি ম্যানেজার ইমপ্লিমেন্টেশনগুলোর উপর ভিত্তি করে পলিসি ইঞ্জিন বাস্তবায়ন করা হয়েছে। এটিই ডিফল্ট এবং এতে নেক্সাস ও এওএসপি (AOSP) ইমপ্লিমেন্টেশনগুলোর সাথে সামঞ্জস্যপূর্ণ হার্ড-কোডেড নিয়মাবলী অন্তর্ভুক্ত রয়েছে।
/service
এর মধ্যে বাইন্ডার ইন্টারফেস, থ্রেডিং এবং লকিং ইমপ্লিমেন্টেশনের পাশাপাশি ফ্রেমওয়ার্কের বাকি অংশের সাথে ইন্টারফেসও অন্তর্ভুক্ত রয়েছে।
প্যারামিটার ফ্রেমওয়ার্ক ব্যবহার করে কনফিগারেশন
অডিও পলিসি কোড এমনভাবে সাজানো হয়েছে যাতে এটি সহজে বোঝা ও রক্ষণাবেক্ষণ করা যায় এবং একই সাথে এটি সম্পূর্ণরূপে কনফিগারেশন ফাইল দ্বারা সংজ্ঞায়িত একটি অডিও পলিসিকেও সমর্থন করে। এর গঠন এবং অডিও পলিসি ডিজাইন ইন্টেলের প্যারামিটার ফ্রেমওয়ার্কের উপর ভিত্তি করে তৈরি, যা প্যারামিটার পরিচালনার জন্য একটি প্লাগইন-ভিত্তিক এবং নিয়ম-ভিত্তিক ফ্রেমওয়ার্ক।
কনফিগারযোগ্য অডিও পলিসি ব্যবহার করে ভেন্ডর ও OEM-রা নিম্নলিখিত কাজগুলো করতে পারে:
XML-এ একটি সিস্টেমের কাঠামো এবং এর প্যারামিটারগুলো বর্ণনা করুন।
বর্ণিত প্যারামিটারগুলো অ্যাক্সেস করার জন্য (C++ এ) একটি ব্যাকএন্ড (প্লাগইন) লিখুন অথবা পুনরায় ব্যবহার করুন।
(XML-এ অথবা ডোমেইন-নির্দিষ্ট ভাষায়) এমন শর্ত বা নিয়ম সংজ্ঞায়িত করুন, যার ভিত্তিতে একটি প্রদত্ত প্যারামিটারকে অবশ্যই একটি নির্দিষ্ট মান গ্রহণ করতে হবে।
AOSP-তে Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml প্যারামিটার ফ্রেমওয়ার্ক ব্যবহার করে এমন একটি অডিও পলিসি কনফিগারেশন ফাইলের উদাহরণ অন্তর্ভুক্ত রয়েছে। বিস্তারিত জানতে, প্যারামিটার ফ্রেমওয়ার্ক সম্পর্কিত ইন্টেল ডকুমেন্টেশন দেখুন।
অ্যান্ড্রয়েড ১০ বা তার নিচের সংস্করণে, USE_CONFIGURABLE_AUDIO_POLICY বিল্ড অপশনটি ব্যবহার করে কনফিগারযোগ্য অডিও পলিসি নির্বাচন করা হয়। অ্যান্ড্রয়েড ১১ বা তার উপরের সংস্করণে, audio_policy_configuration.xml ফাইলে অডিও পলিসি ইঞ্জিনের সংস্করণটি নির্বাচন করা হয়। কনফিগারযোগ্য অডিও পলিসি ইঞ্জিন নির্বাচন করতে, নিচের উদাহরণের মতো globalConfiguration এলিমেন্টের engine_library অ্যাট্রিবিউটের মান configurable এ সেট করুন:
অ্যান্ড্রয়েড ৬.০ একটি পাবলিক এনুমারেশন এবং সিলেকশন এপিআই চালু করেছে, যা অডিও প্যাচ/অডিও পোর্ট পরিকাঠামোর উপর ভিত্তি করে কাজ করে এবং অ্যাপ ডেভেলপারদের সংযুক্ত অডিও রেকর্ড বা ট্র্যাকের জন্য একটি নির্দিষ্ট ডিভাইস আউটপুট বা ইনপুটের পছন্দ নির্দেশ করার সুযোগ দেয়।
অ্যান্ড্রয়েড ৭.০-তে, এনুমারেশন এবং সিলেকশন এপিআই-কে CTS টেস্টের মাধ্যমে যাচাই করা হয়েছে এবং নেটিভ C/C++ (OpenSL ES) অডিও স্ট্রিমের জন্য রাউটিং অন্তর্ভুক্ত করতে এটিকে সম্প্রসারিত করা হয়েছে। নেটিভ স্ট্রিমগুলোর রাউটিং জাভাতেই করা অব্যাহত রয়েছে, এবং এর সাথে একটি AudioRouting ইন্টারফেস যুক্ত করা হয়েছে যা AudioTrack এবং AudioRecord ক্লাসগুলোর জন্য নির্দিষ্ট সুস্পষ্ট রাউটিং পদ্ধতিগুলোকে প্রতিস্থাপন, একত্রিত এবং অপ্রচলিত করে।
এনুমারেশন এবং সিলেকশন এপিআই সম্পর্কে বিস্তারিত জানতে, অ্যান্ড্রয়েড কনফিগারেশন ইন্টারফেস এবং OpenSLES_AndroidConfiguration.h দেখুন। অডিও রাউটিং সম্পর্কে বিস্তারিত জানতে, AudioRouting দেখুন।
মাল্টি-চ্যানেল সাপোর্ট
যদি আপনার হার্ডওয়্যার এবং ড্রাইভার HDMI-এর মাধ্যমে মাল্টিচ্যানেল অডিও সমর্থন করে, তাহলে আপনি অডিও স্ট্রিমটি সরাসরি অডিও হার্ডওয়্যারে আউটপুট করতে পারেন (এর ফলে অডিওফ্লিঙ্গার মিক্সারটি বাইপাস হয়ে যায় এবং এটি দুটি চ্যানেলে ডাউনমিক্স হয় না)। একটি আউটপুট স্ট্রিম প্রোফাইল মাল্টিচ্যানেল অডিও সক্ষমতা সমর্থন করে কিনা, তা অডিও HAL-কে অবশ্যই প্রকাশ করতে হবে। যদি HAL তার সক্ষমতা প্রকাশ করে, তাহলে ডিফল্ট পলিসি ম্যানেজার HDMI-এর মাধ্যমে মাল্টিচ্যানেল প্লেব্যাকের অনুমতি দেয়। বাস্তবায়নের বিস্তারিত তথ্যের জন্য, device/samsung/tuna/audio/audio_hw.c দেখুন।
আপনার পণ্যে একটি মাল্টিচ্যানেল অডিও আউটপুট রয়েছে তা নির্দিষ্ট করতে, আপনার পণ্যের জন্য মাল্টিচ্যানেল আউটপুট বর্ণনা করার জন্য অডিও পলিসি কনফিগারেশন ফাইলটি সম্পাদনা করুন। frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml থেকে নেওয়া নিম্নলিখিত উদাহরণটি একটি ডাইনামিক চ্যানেল মাস্ক দেখায়, যার অর্থ হলো সংযোগের পরে অডিও পলিসি ম্যানেজার HDMI সিঙ্ক দ্বারা সমর্থিত চ্যানেল মাস্কগুলো কোয়েরি করে।
আপনি AUDIO_CHANNEL_OUT_5POINT1 এর মতো একটি স্ট্যাটিক চ্যানেল মাস্কও নির্দিষ্ট করতে পারেন। যে অডিও ডিভাইস মাল্টিচ্যানেল অডিও সমর্থন করে না, সেখানে পাঠানোর সময় AudioFlinger-এর মিক্সার স্বয়ংক্রিয়ভাবে কন্টেন্টটিকে স্টেরিওতে ডাউনমিক্স করে।
মিডিয়া কোডেক
আপনার হার্ডওয়্যার এবং ড্রাইভার যে অডিও কোডেকগুলো সমর্থন করে, সেগুলো যেন আপনার পণ্যের জন্য সঠিকভাবে ঘোষিত হয়, তা নিশ্চিত করুন। বিস্তারিত জানতে, ‘ফ্রেমওয়ার্কে কোডেক উন্মোচন’ দেখুন।
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2026-06-18 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2026-06-18 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[]]