ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

قبل از مطالعه این مقاله، توصیه می شود مقاله قبلی را مطالعه کنید: صدا از طریق بلوتوث: جزئیات تا حد امکان در مورد پروفایل ها، کدک ها و دستگاه ها

برخی از کاربران هدفون بی سیم هنگام استفاده از کدک استاندارد بلوتوث SBC که توسط همه دستگاه های صوتی پشتیبانی می شود، کیفیت صدای ضعیف و عدم فرکانس بالا را گزارش می دهند. یک توصیه رایج برای بهبود صدا، خرید دستگاه ها و هدفون هایی است که از کدک های aptX و LDAC پشتیبانی می کنند. این کدک ها به هزینه های مجوز نیاز دارند، بنابراین دستگاه هایی که از آنها پشتیبانی می کنند گران تر هستند.

به نظر می رسد که کیفیت پایین SBC به دلیل محدودیت های مصنوعی پشته های بلوتوث و تنظیمات هدفون است و این محدودیت را می توان در هر دستگاه موجود از طریق تغییرات نرم افزاری در تلفن هوشمند یا رایانه دور زد.

کدک SBC

کدک SBC دارای پارامترهای مختلفی است که در مرحله تنظیم اتصال مورد مذاکره قرار می گیرند. از جمله:

  • تعداد و نوع کانال: استریو مشترک، استریو، دو کانال، مونو.
  • تعداد باندهای فرکانسی: 4 یا 8;
  • تعداد بلوک در بسته: 4، 8، 12، 16;
  • الگوریتم توزیع بیت ها در طول کوانتیزاسیون: بلندی صدا، SNR.
  • حداکثر و حداقل مقدار مجموعه بیت های مورد استفاده در حین کوانتیزاسیون (bitpool): معمولاً از 2 تا 53.

دستگاه رمزگشا باید هر ترکیبی از این پارامترها را پشتیبانی کند. رمزگذار ممکن است همه چیز را اجرا نکند.
پشته‌های بلوتوث موجود معمولاً روی نمایه زیر توافق دارند: استریو مشترک، 8 باند، 16 بلوک، صدای بلند، بیت‌پول 2..53. این نمایه صدای 44.1 کیلوهرتز را با نرخ بیت 328 کیلوبیت بر ثانیه رمزگذاری می کند.
پارامتر bitpool مستقیماً بر میزان بیت در یک نمایه تأثیر می گذارد: هر چه بیشتر باشد، میزان بیت و در نتیجه کیفیت بالاتر است.
با این حال، پارامتر bitpool به یک نمایه خاص گره خورده نیست. نرخ بیت نیز تا حد زیادی تحت تأثیر پارامترهای دیگر است: نوع کانال ها، تعداد باندهای فرکانس، تعداد بلوک ها. می‌توانید با توافق بر روی پروفایل‌های غیراستاندارد، بدون تغییر بیت‌پول، نرخ بیت را به‌طور غیرمستقیم افزایش دهید.

ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

فرمول محاسبه نرخ بیت SBC

به عنوان مثال، حالت Dual Channel کانال ها را به طور جداگانه رمزگذاری می کند و از کل بیتپول برای هر کانال استفاده می کند. با اجبار دستگاه به استفاده از Dual Channel به جای Joint Stereo، تقریباً دو برابر میزان بیت با همان مقدار بیت‌پول یکسان: 617 kbps دریافت می‌کنیم.
به نظر من، استفاده از یک مقدار بیت‌پول که در مرحله مذاکره با یک پروفایل مرتبط نیست، نقصی در استاندارد A2DP است که منجر به محدودیت مصنوعی کیفیت SBC شد. مذاکره با نرخ بیت به جای بیتپول منطقی تر است.

این مقادیر Bitpool و Bitrat ثابت از جدولی با مقادیر توصیه شده برای استفاده برای صدای با کیفیت بالا سرچشمه می گیرند. اما یک توصیه دلیلی برای محدود کردن خود به این ارزش ها نیست.

ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

مشخصات A2DP v1.2 که از سال 2007 تا 2015 فعال بود، به همه دستگاه های رمزگشا نیاز دارد که با نرخ بیت تا 512 کیلوبیت بر ثانیه به درستی کار کنند:

رمزگشای SNK باید تمام مقادیر بیت‌پول ممکن را که منجر به بیش از حداکثر نرخ بیت نمی‌شوند، پشتیبانی کند. این نمایه حداکثر نرخ بیت موجود را به 320 کیلوبایت بر ثانیه برای حالت تک و 512 کیلوبایت بر ثانیه برای حالت های دو کاناله محدود می کند.

در نسخه جدید مشخصات هیچ محدودیتی در میزان بیت وجود ندارد. تخمین زده می شود که هدفون های مدرنی که پس از سال 2015 عرضه شدند و از EDR پشتیبانی می کنند، می توانند نرخ بیت تا 730 کیلوبیت بر ثانیه را پشتیبانی کنند.

بنا به دلایلی، پشته‌های بلوتوث لینوکس (PulseAudio)، Android، Blackberry و macOS که من آزمایش کردم، محدودیت‌های مصنوعی بر روی حداکثر مقدار پارامتر بیت‌پول دارند که مستقیماً بر حداکثر نرخ بیت تأثیر می‌گذارد. اما این بزرگترین مشکل نیست؛ تقریباً همه هدفون‌ها حداکثر مقدار بیت‌پول را به 53 محدود می‌کنند.
همانطور که قبلاً دیده‌ام، اکثر دستگاه‌ها بر روی یک پشته بلوتوث اصلاح‌شده با نرخ بیت ۵۵۱ کیلوبیت بر ثانیه، بدون وقفه یا ترقه، کاملاً کار می‌کنند. اما چنین نرخ بیتی هرگز در شرایط عادی، روی پشته های بلوتوث معمولی ثابت نخواهد بود.

تغییر پشته بلوتوث

هر پشته بلوتوثی که با استاندارد A2DP سازگار باشد، از حالت Dual Channel پشتیبانی می کند، اما فعال کردن آن از رابط امکان پذیر نیست.

بیایید یک ضامن به رابط اضافه کنیم! من وصله‌هایی برای Android 8.1 و Android 9 ایجاد کرده‌ام که پشتیبانی کامل از Dual Channel را به پشته اضافه می‌کنند، یک حالت را به منوی تغییر حالت در ابزار توسعه‌دهنده اضافه می‌کنند و SBC‌های دارای کانال دوگانه را طوری رفتار می‌کنند که گویی یک کدک اضافی مانند aptX هستند. ، AAC یا LDAC (اندروید این صدا را HD می نامد) با افزودن یک علامت به تنظیمات دستگاه بلوتوث. این چیزی است که به نظر می رسد:

ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

پچ برای اندروید 9
پچ برای اندروید 8.1

هنگامی که چک باکس فعال می شود، صدای بلوتوث شروع به انتقال با نرخ بیت می کند 551 کیلوبیت بر ثانیه، اگر هدفون از سرعت اتصال 3 مگابیت بر ثانیه پشتیبانی می کند یا 452 کیلوبیت بر ثانیه، اگر هدفون فقط 2 مگابیت بر ثانیه پشتیبانی می کند.

این پچ در فریمورهای جایگزین زیر موجود است:

  • LineageOS
  • رستاخیز رستاخیز
  • crDroid

551 و 452 کیلوبیت بر ثانیه از کجا آمده است؟

فناوری اشتراک گذاری هوای بلوتوث برای انتقال موثر بسته های بزرگ با اندازه ثابت طراحی شده است. انتقال اطلاعات در اسلات ها انجام می شود، بیشترین تعداد اسلات ارسال شده در یک انتقال 5 عدد است. حالت های انتقال نیز وجود دارد که از 1 یا 3 اسلات استفاده می کنند، اما از 2 یا 4 اسلات استفاده نمی کنند. در 5 اسلات می توانید تا 679 بایت را با سرعت اتصال انتقال دهید. 2 مگابیت بر ثانیه و حداکثر 1021 بایت با سرعت 3 مگابیت بر ثانیه و به ترتیب 3 - 367 و 552 بایت.

ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

اگر بخواهیم داده های کمتر از 679 یا 1021 بایت، اما بیشتر از 367 یا 552 بایت را انتقال دهیم، انتقال همچنان 5 اسلات طول می کشد و داده ها در همان زمان منتقل می شوند که باعث کاهش راندمان انتقال می شود.

ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

SBC در حالت Dual Channel، در صدای 44100 هرتز با پارامترهای Bitpool 38، 16 بلوک در هر فریم، 8 محدوده فرکانس، صدا را در فریم های 164 بایتی با نرخ بیت 452 کیلوبیت بر ثانیه رمزگذاری می کند.
صدا باید در پروتکل های انتقال L2CAP و AVDTP کپسوله شود که 16 بایت از محموله صوتی می گیرد.

ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

بنابراین، یک انتقال بلوتوث با 5 اسلات می تواند 4 فریم صوتی را در خود جای دهد:

679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (заголовок SBC) - (164*4) = 6

ما ۱۱.۷ میلی‌ثانیه داده صوتی را در بسته ارسالی قرار می‌دهیم که در ۳.۷۵ میلی‌ثانیه ارسال می‌شود و ۶ بایت استفاده نشده در بسته باقی می‌ماند.
اگر بیتپول را کمی بالا ببرید، دیگر امکان بسته بندی 4 فریم صوتی در یک بسته وجود نخواهد داشت. شما باید 3 فریم را در یک زمان ارسال کنید که بازده انتقال را کاهش می دهد، میزان صوتی ارسال شده در هر فریم را کاهش می دهد و در شرایط بد رادیویی با سرعت بیشتری منجر به لکنت صدا می شود.

به همین ترتیب، نرخ بیت 551 کیلوبیت بر ثانیه برای EDR 3 مگابیت بر ثانیه انتخاب شد: با Bitpool 47، 16 بلوک در هر فریم، 8 محدوده فرکانس، اندازه فریم 200 بایت، با نرخ بیت 551 کیلوبیت بر ثانیه. یک بسته شامل 5 فریم یا 14.6 میلی‌ثانیه موسیقی است.

الگوریتم محاسبه تمام پارامترهای SBC بسیار پیچیده است، اگر به صورت دستی بشمارید می توانید به راحتی گیج شوید، بنابراین من یک ماشین حساب تعاملی برای کمک به علاقه مندان ساختم: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

چرا این همه مورد نیاز است؟

برخلاف تصور رایج در مورد کیفیت صدای کدک aptX، در برخی فایل‌ها می‌تواند نتایجی بدتر از SBC با نرخ بیت استاندارد 328 کیلوبیت در ثانیه ایجاد کند.

SBC به صورت پویا بیت های کوانتیزاسیون را به باندهای فرکانسی بر اساس کم به بالا تخصیص می دهد. اگر تمام بیت ریت برای فرکانس‌های پایین و متوسط ​​استفاده شود، فرکانس‌های بالا «قطع» می‌شوند (به‌جای آن سکوت وجود خواهد داشت).
aptX باندهای فرکانسی را با تعداد بیت یکسان در تمام مدت کوانتیزه می کند، به همین دلیل است که نرخ بیت ثابتی دارد: 352 کیلوبیت در ثانیه برای 44.1 کیلوهرتز، 384 کیلوبیت بر ثانیه برای 48 کیلوهرتز، و نمی تواند به فرکانس هایی که بیشتر به آنها نیاز دارند "بیت شیفت" کند. . برخلاف SBC، aptX فرکانس‌ها را قطع نمی‌کند، اما نویز کوانتیزاسیون را به آن‌ها اضافه می‌کند، دامنه دینامیکی صدا را کاهش می‌دهد و گاهی اوقات کرک کردن مشخصه را معرفی می‌کند. SBC "جزئیات را می خورد" - ساکت ترین مناطق را کنار می گذارد.
به طور متوسط، در مقایسه با SBC 328k، aptX اعوجاج کمتری در موسیقی با محدوده فرکانس وسیع ایجاد می‌کند، اما در موسیقی با محدوده فرکانس باریک و دامنه دینامیکی گسترده، SBC 328k گاهی اوقات برنده می‌شود.

بیایید یک مورد خاص را در نظر بگیریم. طیف نگاری ضبط شده در حال نواختن پیانو:
ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

انرژی اصلی در فرکانس های 0 تا 4 کیلوهرتز است و تا 10 کیلوهرتز ادامه دارد.
طیف نگاری فایل فشرده شده در aptX به شکل زیر است:
ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

و این همان چیزی است که SBC 328k به نظر می رسد.
ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

مشاهده می شود که SBC 328k به طور دوره ای محدوده بالای 16 کیلوهرتز را کاملاً خاموش می کند و تمام بیت ریت موجود را در محدوده های زیر این مقدار صرف می کند. با این حال، aptX اعوجاج بیشتری را در طیف فرکانسی قابل شنیدن برای گوش انسان ایجاد کرد، همانطور که در طیف‌نگار اصلی کم‌شده از طیف‌نگار aptX مشاهده می‌شود (هرچه روشن‌تر، اعوجاج بیشتر):
ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

در حالی که SBC 328k سیگنال را در محدوده 0 تا 10 کیلوهرتز کمتر خراب کرد و بقیه را قطع کرد:
ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

نرخ بیت 485k SBC برای حفظ کل محدوده فرکانس، بدون غیرفعال کردن باندها کافی بود.
ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

SBC 485k به طور قابل توجهی از aptX در این مسیر در محدوده 0-15 کیلوهرتز جلوتر است، با یک تفاوت کوچکتر اما همچنان قابل توجه 15-22 کیلوهرتز (هرچه تیره تر باشد، اعوجاج کمتری دارد):
ما پشته بلوتوث را برای بهبود صدا در هدفون‌های بدون کدک‌های AAC، aptX و LDAC تغییر می‌دهیم.

آرشیو صدای اصلی، SBC و aptX.

با جابه‌جایی به SBC با نرخ بیت بالا، صدایی دریافت می‌کنید که اغلب در هر هدفونی از aptX عبور می‌کند. در هدفون هایی که از اتصال 3 مگابیت بر ثانیه EDR پشتیبانی می کنند، نرخ بیت 551 کیلوبیت در ثانیه صدایی قابل مقایسه با aptX HD تولید می کند.

آیا می توانید حتی بیشتر انجام دهید؟

پچ اندروید همچنین دارای گزینه ای برای افزایش بیشتر بیت ریت برای دستگاه های EDR 2 مگابیت بر ثانیه است. شما می توانید نرخ بیت را از 452 کیلوبیت بر ثانیه به 595 کیلوبیت بر ثانیه افزایش دهید و این به قیمت کاهش پایداری انتقال در شرایط سخت رادیویی است.
کافی است متغیر persist.bluetooth.sbc_hd_higher_bitrate را روی 1 تنظیم کنید:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

وصله نرخ بیت شدید تا کنون فقط در LineageOS 15.1 استفاده شده است، اما در نسخه 16.0 نه.

سازگاری دستگاه

SBC Dual Channel تقریباً توسط تمام هدفون ها، بلندگوها و واحدهای سر خودرو پشتیبانی می شود. این جای تعجب نیست - استاندارد به پشتیبانی آن در هر دستگاه رمزگشایی نیاز دارد. تعداد کمی از دستگاه ها وجود دارند که این حالت در آنها مشکل ایجاد می کند، اما اینها نمونه های جدا شده ای هستند.
جزئیات بیشتر در مورد دستگاه های سازگار را می توانید در اینجا پیدا کنید W4bsitXNUMX-dns.com یا XDA توسعه دهندگان.

مقایسه تفاوت صدا

من یک سرویس وب ساختم که صدا را به SBC (و همچنین aptX و aptX HD) را در زمان واقعی و درست در مرورگر رمزگذاری می کند. با آن می‌توانید صدای پروفایل‌های مختلف SBC و سایر کدک‌ها را بدون انتقال صدا از طریق بلوتوث، روی هدفون‌های سیمی، بلندگوها و موسیقی مورد علاقه‌تان مقایسه کنید و همچنین هنگام پخش صدا، پارامترهای رمزگذاری را مستقیماً تغییر دهید.
btcodecs.valdikss.org.ru/sbc-encoder

با توسعه دهندگان اندروید تماس بگیرید

من به بسیاری از توسعه دهندگان پشته بلوتوث در Google نامه نوشتم و از آنها خواستم که وصله ها را در شاخه اصلی Android - AOSP در نظر بگیرند، اما هیچ پاسخی دریافت نکردم. وصله های من در سیستم پچ گریت برای اندروید همچنین بدون اظهار نظر از طرف هیچکس باقی مانده است.
خوشحال می شوم اگر بتوانم در ارتباط با توسعه دهندگان گوگل و آوردن SBC HD به اندروید کمکی دریافت کنم. پچ در gerrit قبلا قدیمی شده است (این یکی از ویرایش های اولیه است) و اگر توسعه دهندگان به تغییرات من علاقه مند باشند آن را به روز خواهم کرد (به روز رسانی آن برای من آسان نیست، من دستگاه های سازگار با Android Q ندارم. ).

نتیجه

کاربران گوشی های هوشمند با سیستم عامل LineageOS، Resurrection Remix و crDroid می توانند در حال حاضر از کیفیت صدای بهبود یافته لذت ببرند، فقط این گزینه را در تنظیمات دستگاه بلوتوث فعال کنید. کاربران لینوکس همچنین می توانند با نصب، نرخ بیت SBC را افزایش دهند پچ از Pali Rohar، که از جمله موارد دیگر، پشتیبانی از کدک های aptX، aptX HD و FastStream را اضافه می کند.

منبع: www.habr.com

اضافه کردن نظر