گوشی اندرویدیتان درباره صدایی که میشنوید به شما دروغ میگوید.
فناوری زیربنایی صدای اندروید، یعنی AudioFlinger، آنطور که گمان میکنید کار نمیکند و بهندرت هم نشان میدهد واقعاً در پسزمینه چه میگذرد. در نتیجه، هرگاه تصور میکنید در حال شنیدن صدای وضوحبالا هستید، به احتمال زیاد واقعیت چیز دیگری است؛ زیرا AudioFlinger فایلهای وضوحبالا را عمداً به نرخ نمونهبرداری 48kHz کاهش میدهد و در این فرایند کیفیت صدا را از بین میبرد.
برای آزمودن این موضوع، چهار فایل FLAC بدون افت را روی گوشیهای سامسونگ گلکسی زد فولد، موتورولا ریزر فولد، ناتینگ فون ۳ و تکنو کمون ۵۰ اولترا ریختم، آنها را به یک هدفون و یک جفت ایرباد وضوحبالا متصل کردم و دادههای صوتی را بیرون کشیدم؛ در نهایت فقط یکی از این گوشیها درست عمل کرد.
آزمون صدای اندروید
چهار فایل FLAC، چهار گوشی هوشمند

آزمون روی همین چهار گوشی و با هدفون پرطرفدار ۵۰ دلاری FiiO EH13 و یک جفت ایرباد Status Pro X انجام شد. هر دو گواهی پخش صدای وضوحبالا دارند و برای هر گوشی از راه بلوتوث متصل شدند.
برای اطمینان از یکسانبودن شرایط، از چهار فایل آزمایشی FLAC با نرخهای ۴۴.1kHz، 48kHz، 96kHz و 192kHz استفاده کردم.
سپس هنگام پخش فایلها، فرمان adb shell dumpsys media.audio_flinger را در محیط adb اندروید اجرا کردم تا دادههای زنده صدای دستگاه را بیرون بکشم و دقیقاً ببینم AudioFlinger در پشت صحنه چگونه فایلهای صوتی وضوحبالا را مدیریت میکند.
برنده: موتورولا ریزر فولد
فقط گوشی تاشوی موتورولا از پس کار برآمد؛ البته تا حدی





در میان این چهار گوشی، موتورولا ریزر فولد تنها دستگاهی بود که همهچیز را به اجبار با یک نرخ نمونهبرداری ثابت پردازش نکرد.
فایلهای ۴۴.1kHz و 48kHz از میکسر AudioFlinger اندروید گذشتند و نرخ نمونهبرداری هر دو روی 48kHz ثابت شد؛ همان رفتاری که انتظارش را داشتم.
اما ریزر فولد برای فایل 96kHz کاری کرد که هیچیک از دستگاههای دیگر انجام نداد: مسیر خروجی کاملاً متفاوتی گشود که کیفیت صدا را دستنخورده نگه میداشت. بنابراین بهجای AudioFlinger، از یک رشته DIRECT بهره گرفت و توانست محدودیتها را دور بزند. نمونه صوتی 192kHz نیز به همین شیوه پردازش شد.
تا اینجا همهچیز عادی به نظر میرسید؛ دقیقاً همان رفتاری بود که انتظار داشتم در تکتک دستگاههای اندرویدی آزمایششده ببینم. اما سخت در اشتباه بودم.
همه دستگاههای دیگر به نرخ نمونهبرداری 48kHz آدیوفلینگر محدود نبودند
نتایج یکدست نبودند
| نرخ فایل | ریزر فولد (AAC) | ریزر فولد (LDAC) | زد فولد ۸ (AAC) | زد فولد ۸ (LDAC) | فون ۳ (AAC) | فون ۳ (LDAC) | کمون ۵۰ اولترا (AAC) | کمون ۵۰ اولترا (LDAC) |
|---|---|---|---|---|---|---|---|---|
| ۴۴.۱ کیلوهرتز | ۴۸,۰۰۰ (میکسر) | ۴۸,۰۰۰ (میکسر) | 44,100 | 96,000 | 48,000 | 48,000 | 44,100 | 96,000 |
| ۴۸ کیلوهرتز | ۴۸,۰۰۰ (میکسر) | ۴۸,۰۰۰ (میکسر) | 44,100 | 96,000 | 48,000 | 48,000 | 44,100 | 96,000 |
| ۹۶ کیلوهرتز | ۹۶,۰۰۰ (مستقیم) | ۹۶,۰۰۰ (مستقیم) | 44,100 | 96,000 | 48,000 | 48,000 | 44,100 | 96,000 |
| ۱۹۲ کیلوهرتز | ۱۹۲,۰۰۰ (مستقیم) | ۱۹۲,۰۰۰ (مستقیم) | 44,100 | 96,000 | 48,000 | 48,000 | 44,100 | 96,000 |
سه دستگاه دیگر به پای Razr Fold نرسیدند، اما نتیجهها بسته به دستگاه متفاوت بود و AudioFlinger نیز هر بار در پردازش صدا دخالت داشت.
- گوشی Nothing Phone ۳ هر فایل را از میکسر مشترک پخش کرد و خروجی در همه موارد 48kHz بود.
- گوشی Samsung Z Fold ۸ نرخ نمونهبرداری همه فایلها را به ۴۴.1kHz کاهش داد و آن را حتی پایینتر آورد. بااینحال، وقتی به LDAC روی آوردم، این نرخ به 96kHz افزایش یافت.
- گوشی Tecno Camon ۵۰ Ultra دقیقاً مانند Samsung عمل کرد.
این نتیجههای ناهمگون نشان میدهند که Android صدا را آنگونه که تصور میکنید یا حتی آنطور که برای پخش ساخته شده است پردازش نمیکند؛ بااینهمه، این رفتار در واقع همان عملکرد مورد انتظار Android است.
چرا دستگاههای Android فایلهای صوتی را متفاوت پردازش میکنند؟
این یک قابلیت است، نه ایراد

پاسخ را باید عمدتاً در پشته صوتی Android جستوجو کرد که «لایه انتزاع سختافزار» (HAL) نام دارد، و نیز در چگونگی تعامل برنامهها و صدا با آن. بهطور خلاصه، وقتی دکمه پخش را میزنید، پخشکننده رسانه صدا را به AudioFlinger میسپارد؛ AudioFlinger نیز آن را به Audio HAL و سپس به سختافزار، یعنی دستگاه خروجی، میفرستد.
Android بهصورت بومی از صدا تا وضوح ۳۲-bit/192kHz پشتیبانی میکند؛ اما در حالت پیشفرض، برای یکدست نگهداشتن همه صداها، آنها را به PCM استریوی ۱۶ یا ۲۴ بیتی با نرخ 48kHz تبدیل میکند. همین تلاش برای یکدستی است که باعث میشود قطعههای صوتی ۴۴.1kHz و 192kHz شما در نهایت با نرخ نمونهبرداری یکسانی پخش شوند.
پس چرا Motorola Razr Fold صدا را بهتر از همه پردازش کرد؟ پاسخ ساده است: Motorola سیاستهای صوتی دستگاهش را به این شکل تنظیم کرده بود، اما دیگر سازندگان چنین نکرده بودند.
اما یک نکته مهم را نباید نادیده گرفت
صدای بلوتوث به کُدک آن محدود است

مهمترین نکته در میان این همه کاهش نرخ نمونهبرداری و دستکاری AudioFlinger آن است که Bluetooth محدودیتهایی دارد که کُدکهایش تعیین میکنند.
هر گوشی را ابتدا با AAC و سپس با کُدک وضوحبالای LDAC از طریق Bluetooth به هدفون متصل کردم. AAC از نظر فنی میتواند فایلهای صوتی تا 96kHz را پردازش کند، اما چنین پیادهسازیای بهندرت در گوشیهای هوشمند دیده میشود؛ این دستگاهها معمولاً حداکثر صدای ۲۴-bit/۴۴.1kHz را پردازش میکنند که همچنان کیفیتی بسیار خوب و حتی بهتر از CD دارد.
LDAC پا را فراتر میگذارد و از نرخ 96kHz بهطور کامل پشتیبانی میکند؛ آن هم با نرخهای بیت متفاوت ۹۹۰ kbps، ۶۶۰ kbps یا ۳۳۰ kbps.
بااینحال، هیچیک از این دو کُدک واقعاً توان انتقال صدای 192kHz را ندارند؛ این کار از عهده هیچ کُدک Bluetooth دیگری نیز برنمیآید.
بنابراین، وقتی AudioFlinger نرخ نمونهبرداری یک قطعه صوتی با وضوح بالاتر را کاهش میدهد، صرفاً بیدلیل صدا را خراب نمیکند. این رفتار اغلب بیشتر از محدودیتهای کُدک مورد استفاده و همچنین هدفون یا ایرباد ناشی میشود. در واقع، کُدک Bluetooth خود به محدودیت دیگری در زنجیره پردازش صدا تبدیل میشود.
نکته دیگری هم وجود دارد: شنوایی انسان در بهترین حالت عملاً به 20kHz محدود است و دامنه شنوایی بیشتر افراد بسیار پایینتر از این مقدار قرار دارد. بنابراین، حتی اگر AudioFlinger در Android نرخ نمونهبرداری فایلهای صوتی وضوحبالای شما را کاهش دهد، بهاحتمال زیاد بهدلیل محدودیتهای شنوایی انسان تفاوتی احساس نخواهید کرد.
در نهایت، توصیه صادقانه من این است که اینقدر نگران کیفیت صدا نباشید و موسیقی محبوبتان را هر طور که دوست دارید گوش کنید!
منبع: این مطلب ترجمه و بومیسازی مقالهای از MakeUseOf به قلم Gavin Phillips است. مشاهده مقاله اصلی