অডিও লেটেন্সি কমাতে বিক্রেতারা দুটি মূল বৈশিষ্ট্য বাস্তবায়ন করতে পারে:
- অডিওফ্লিংগারে ফাস্ট মিক্সার: অ্যান্ড্রয়েড 4.1 এ প্রবর্তিত এই বৈশিষ্ট্যটি জাভা অডিওট্র্যাক এবং AAudio ব্যবহার করে অ্যাপগুলিকে সমর্থন করে৷ FAST মিক্সার ন্যূনতম পাবলিক ক্লায়েন্ট API বা HAL API পরিবর্তনগুলি জড়িত।
- AAudio MMAP: Android 8.1-এ প্রবর্তিত, এই বৈশিষ্ট্যটি নেটিভ অ্যাপগুলিকে AAudio-এর মাধ্যমে আরও কম লেটেন্সি অর্জন করতে সক্ষম করে৷ আরও তথ্যের জন্য AAudio এবং MMAP দেখুন।
এই পৃষ্ঠাটি প্রাথমিক অডিও লেটেন্সি ডিজাইনের বর্ণনা দেয়, যা সময়ের সাথে সাথে বিকশিত হতে থাকে। ডিভাইস OEM এবং SoC বিক্রেতাদের তাদের নির্দিষ্ট ডিভাইস এবং চিপসেটে সঠিক বাস্তবায়ন নিশ্চিত করতে এই ডিজাইনের একটি দৃঢ় উপলব্ধি অত্যন্ত গুরুত্বপূর্ণ। এই পৃষ্ঠাটি অ্যাপ ডেভেলপারদের উদ্দেশ্যে নয়।
ট্র্যাক সৃষ্টি
ক্লায়েন্ট ঐচ্ছিকভাবে AudioTrack C++ কনস্ট্রাক্টর বা AudioTrack::set()
এর audio_output_flags_t
প্যারামিটারে AUDIO_OUTPUT_FLAG_FAST
বিট সেট করতে পারে। বর্তমানে একমাত্র ক্লায়েন্ট যারা এটি করে:
- OpenSL ES বা AAudio ভিত্তিক Android নেটিভ অডিও
-
android.media.SoundPool
-
android.media.ToneGenerator
AudioTrack C++ বাস্তবায়ন AUDIO_OUTPUT_FLAG_FAST
অনুরোধ পর্যালোচনা করে এবং ক্লায়েন্ট স্তরে ঐচ্ছিকভাবে অনুরোধ অস্বীকার করতে পারে। যদি এটি অনুরোধটি পাস করার সিদ্ধান্ত নেয়, তাহলে এটি IAudioTrack
ফ্যাক্টরি পদ্ধতি IAudioFlinger::createTrack()
এর track_flags_t
প্যারামিটারের TRACK_FAST
বিট ব্যবহার করে।
AudioFlinger অডিও সার্ভার TRACK_FAST
অনুরোধ পর্যালোচনা করে এবং সার্ভার স্তরে ঐচ্ছিকভাবে অনুরোধ অস্বীকার করতে পারে৷ শেয়ার্ড মেমরি কন্ট্রোল ব্লকের বিট CBLK_FAST
এর মাধ্যমে অনুরোধটি গৃহীত হয়েছে কি না তা ক্লায়েন্টকে জানায়।
সিদ্ধান্তকে প্রভাবিত করে এমন কারণগুলির মধ্যে রয়েছে:
- এই আউটপুটের জন্য একটি দ্রুত মিক্সার থ্রেডের উপস্থিতি (নীচে দেখুন)
- ট্র্যাক নমুনা হার
- এই ট্র্যাকের জন্য কলব্যাক হ্যান্ডলার চালানোর জন্য একটি ক্লায়েন্ট থ্রেডের উপস্থিতি
- ট্র্যাক বাফার আকার
- উপলব্ধ ফাস্ট ট্র্যাক স্লট (নীচে দেখুন)
যদি ক্লায়েন্টের অনুরোধ গৃহীত হয়, এটিকে দ্রুত ট্র্যাক বলা হয়। অন্যথায় এটাকে সাধারণ ট্র্যাক বলা হয়।
মিক্সার থ্রেড
যখন AudioFlinger একটি সাধারণ মিক্সার থ্রেড তৈরি করে, তখন এটি একটি দ্রুত মিক্সার থ্রেড তৈরি করবে কি না তা সিদ্ধান্ত নেয়। সাধারণ মিক্সার এবং ফাস্ট মিক্সার উভয়ই একটি নির্দিষ্ট ট্র্যাকের সাথে সম্পর্কিত নয়, বরং ট্র্যাকের সেটের সাথে যুক্ত। সবসময় একটি সাধারণ মিশুক থ্রেড আছে. দ্রুত মিক্সার থ্রেড, যদি এটি বিদ্যমান থাকে, তবে সাধারণ মিক্সার থ্রেডের অধীনস্থ এবং এটির নিয়ন্ত্রণে কাজ করে।
দ্রুত মিশুক
বৈশিষ্ট্য
দ্রুত মিক্সার থ্রেড এই বৈশিষ্ট্যগুলি প্রদান করে:
- সাধারণ মিক্সারের সাব-মিক্স এবং সাতটি পর্যন্ত ক্লায়েন্ট ফাস্ট ট্র্যাকের মিশ্রণ
- প্রতি ট্র্যাক ক্ষয়করণ
বাদ দেওয়া বৈশিষ্ট্য:
- প্রতি ট্র্যাক নমুনা হার রূপান্তর
- ট্র্যাক প্রভাব প্রতি
- প্রতি মিশ্রণ প্রভাব
সময়কাল
দ্রুত মিক্সারটি পর্যায়ক্রমে চলে, দুই থেকে তিন মিলিসেকেন্ডের প্রস্তাবিত সময়ের সাথে, অথবা সময় নির্ধারণের স্থিতিশীলতার জন্য প্রয়োজন হলে 5 ms এর সামান্য বেশি সময়কালের সাথে। এই নম্বরটি বেছে নেওয়া হয়েছিল যাতে, সম্পূর্ণ বাফার পাইপলাইনের জন্য হিসাব করে, মোট লেটেন্সি 10 ms হয়৷ ছোট মান সম্ভব কিন্তু CPU সময়সূচী পূর্বাভাসযোগ্যতার উপর নির্ভর করে বিদ্যুত খরচ বৃদ্ধি এবং সমস্যা হওয়ার সম্ভাবনা হতে পারে। বড় মান সম্ভব, 20 ms পর্যন্ত, কিন্তু এর ফলে মোট বিলম্বিত হয় এবং তাই এড়ানো উচিত।
সময়সূচী
দ্রুত মিক্সারটি উন্নত SCHED_FIFO
অগ্রাধিকারে চলে৷ এটির জন্য খুব কম সিপিইউ সময় প্রয়োজন, তবে এটি অবশ্যই প্রায়শই এবং কম শিডিউলিং জিটার সহ চালাতে হবে। জিটার চক্র সময়ের তারতম্য প্রকাশ করে: এটি প্রকৃত চক্র সময়ের বনাম প্রত্যাশিত চক্র সময়ের মধ্যে পার্থক্য। খুব দেরিতে দৌড়ানোর ফলে আন্ডাররানের কারণে সমস্যা হয়। ট্র্যাক ডেটা সরবরাহ করার আগে দ্রুত ট্র্যাক থেকে টানার কারণে খুব তাড়াতাড়ি দৌড়ানোর ফলে সমস্যা হয়৷
ব্লকিং
আদর্শভাবে HAL write()
ব্যতীত ফাস্ট মিক্সার থ্রেড কখনই ব্লক করে না। ফাস্ট মিক্সারের মধ্যে ব্লক করার অন্যান্য ঘটনাগুলিকে বাগ হিসাবে বিবেচনা করা হয়। বিশেষ করে, মিউটেক্স এড়ানো হয়। পরিবর্তে, নন-ব্লকিং অ্যালগরিদম (লক-মুক্ত অ্যালগরিদম নামেও পরিচিত) ব্যবহার করা হয়। এই বিষয়ে আরও জানতে অগ্রাধিকার বিপরীতমুখী এড়িয়ে চলুন দেখুন।
অন্যান্য উপাদানের সাথে সম্পর্ক
ফাস্ট মিক্সারের ক্লায়েন্টদের সাথে সামান্য সরাসরি মিথস্ক্রিয়া আছে। বিশেষ করে, এটি বাইন্ডার-স্তরের ক্রিয়াকলাপগুলি দেখতে পায় না, তবে এটি ক্লায়েন্টের ভাগ করা মেমরি নিয়ন্ত্রণ ব্লক অ্যাক্সেস করে।
ফাস্ট মিক্সার একটি স্টেট কিউ এর মাধ্যমে সাধারণ মিক্সার থেকে কমান্ড গ্রহণ করে।
ট্র্যাক ডেটা টানা ছাড়া, ক্লায়েন্টদের সাথে মিথস্ক্রিয়া স্বাভাবিক মিক্সারের মাধ্যমে হয়।
ফাস্ট মিক্সারের প্রাথমিক সিঙ্ক হল অডিও HAL।
সাধারণ মিশুক
বৈশিষ্ট্য
সমস্ত বৈশিষ্ট্য সক্রিয় করা হয়েছে:
- 32টি ট্র্যাক পর্যন্ত
- প্রতি ট্র্যাক টেনশন
- প্রতি ট্র্যাক নমুনা হার রূপান্তর
- প্রভাব প্রক্রিয়াকরণ
সময়কাল
পিরিয়ডটিকে ফাস্ট মিক্সার পিরিয়ডের প্রথম অবিচ্ছেদ্য মাল্টিপল হিসেবে গণনা করা হয় যা হল >= 20 ms।
সময়সূচী
স্বাভাবিক মিক্সারটি উন্নত SCHED_OTHER
অগ্রাধিকারে চলে৷
ব্লকিং
সাধারণ মিক্সারটিকে ব্লক করার অনুমতি দেওয়া হয় এবং প্রায়শই এটি বিভিন্ন মিউটেক্সের পাশাপাশি একটি ব্লকিং পাইপে তার সাব-মিক্স লেখার জন্য করে।
অন্যান্য উপাদানের সাথে সম্পর্ক
সাধারণ মিক্সার বাইন্ডার থ্রেড, অডিও পলিসি ম্যানেজার, ফাস্ট মিক্সার থ্রেড এবং ক্লায়েন্ট ট্র্যাক সহ বাইরের বিশ্বের সাথে ব্যাপকভাবে যোগাযোগ করে।
সাধারণ মিক্সারের সিঙ্ক হল ফাস্ট মিক্সারের ট্র্যাক 0-এ একটি ব্লকিং পাইপ।
পতাকা
AUDIO_OUTPUT_FLAG_FAST
বিট একটি ইঙ্গিত। অনুরোধ পূরণ হবে কোন গ্যারান্টি নেই.
AUDIO_OUTPUT_FLAG_FAST
একটি ক্লায়েন্ট-স্তরের ধারণা। এটা সার্ভারে প্রদর্শিত হয় না.
TRACK_FAST
একটি ক্লায়েন্ট -> সার্ভার ধারণা।