پشتیبانی صوتی سمعک با استفاده از بلوتوث LE، پشتیبانی صوتی سمعک با استفاده از بلوتوث LE

دستگاه‌های سمعک (HA) می‌توانند با استفاده از کانال‌های L2CAP اتصال گرا (CoC) از طریق بلوتوث کم‌انرژی (BLE) دسترسی بهتری را در دستگاه‌های تلفن همراه مجهز به Android داشته باشند. CoC از یک بافر الاستیک از چندین بسته صوتی برای حفظ جریان ثابت صدا، حتی در صورت از دست دادن بسته، استفاده می کند. این بافر کیفیت صدا را برای دستگاه های سمعک با هزینه تأخیر فراهم می کند.

طراحی CoC به مشخصات هسته بلوتوث (BT) نسخه 6.0 اشاره دارد. برای همراستایی با مشخصات اصلی، همه مقادیر چند بایتی در این صفحه باید به‌عنوان little-endian خوانده شوند.

اصطلاحات

مرکزی
دستگاه اندرویدی که تبلیغات را از طریق بلوتوث اسکن می کند.
محیطی
شنوایی که بسته های تبلیغاتی را از طریق بلوتوث ارسال می کند.

توپولوژی شبکه و معماری سیستم

هنگام استفاده از CoC برای سمعک، توپولوژی شبکه یک مرکزی و دو وسیله جانبی، یکی چپ و دیگری راست را در نظر می گیرد، همانطور که در شکل 1 مشاهده می شود. اگر یک وسیله جانبی به دلیل تناسب تک صدایی یا قطع اتصال وجود نداشته باشد، سپس مرکز کانال صوتی چپ و راست را مخلوط می کند و صدا را به دستگاه جانبی باقی مانده منتقل می کند. اگر سانترال اتصال به هر دو دستگاه جانبی را قطع کند، مرکز اتصال به سینک صوتی را از دست رفته در نظر می گیرد. در این موارد، مرکز صدا را به خروجی دیگری هدایت می کند.

نموداری که یک دستگاه اندروید مرکزی متصل به بلوتوث LE را نشان می دهد           سمعک های محیطی، یکی چپ و یکی راست.
شکل 1. توپولوژی برای جفت کردن سمعک با دستگاه های تلفن همراه Android با استفاده از CoC بر روی BLE.

هنگامی که مرکزی داده های صوتی را به دستگاه جانبی پخش نمی کند و می تواند اتصال BLE را حفظ کند، مرکزی نباید از دستگاه جانبی جدا شود. حفظ اتصال اجازه می دهد تا داده ها به سرور GATT مستقر در دستگاه جانبی ارتباط برقرار کند.

هنگام جفت شدن و اتصال دستگاه های شنوایی، سانترال باید:

  • جفت‌شده‌ترین دستگاه‌های جانبی چپ و راست اخیر را دنبال کنید.
  • فرض کنید اگر یک جفت معتبر وجود داشته باشد، تجهیزات جانبی در حال استفاده هستند. وقتی اتصال قطع شد، سانترال باید سعی کند به دستگاه جفت شده متصل یا دوباره وصل شود.
  • فرض کنید اگر جفت شدن حذف شود، دیگر از تجهیزات جانبی استفاده نمی شود.

در موارد بالا، جفت‌سازی به عمل ثبت مجموعه‌ای از سمعک‌ها با یک UUID معین و نشانه‌های چپ/راست در سیستم‌عامل اشاره دارد، نه فرآیند جفت‌سازی بلوتوث.

سیستم مورد نیاز

برای اجرای صحیح CoC برای تجربه کاربری خوب، سیستم‌های بلوتوث در دستگاه‌های مرکزی و جانبی باید موارد زیر را انجام دهند:

  • یک کنترلر سازگار BT 4.2 یا بالاتر را اجرا کنید. ما به شدت LE Secure Connections را توصیه می کنیم.
  • حداقل دو پیوند LE همزمان در مرکز را با پارامترهایی که در قالب بسته صوتی و زمان بندی توضیح داده شده است، پشتیبانی کنید.
  • حداقل یک پیوند LE در دستگاه جانبی با پارامترهای توصیف شده در قالب بسته صوتی و زمان بندی پشتیبانی کنید.
  • از کنترل جریان مبتنی بر اعتبار LE پشتیبانی کنید [BT جلد 3، قسمت A، Sec 10.1]. دستگاه ها باید از اندازه MTU و MPS حداقل 167 بایت در CoC پشتیبانی کنند و بتوانند تا هشت بسته را بافر کنند.
  • از یک پسوند طول داده LE [BT Vol 6, Part B, Sec 5.1.9] با حجم حداقل 167 بایت پشتیبانی کنید.
  • مطمئن شوید که دستگاه مرکزی از فرمان به‌روزرسانی اتصال HCI LE پشتیبانی می‌کند و با پارامترهای maximum_CE_Length و minimum_CE_Length غیر صفر مطابقت دارد.
  • برای دو اتصال LE CoC به دو دستگاه جانبی مختلف با فواصل اتصال و اندازه محموله در قالب بسته صوتی و زمان بندی، توان عملیاتی داده را در مرکز نگهداری کنید.
  • پارامترهای MaxRxOctets و MaxRxTime را در فریم‌های LL_LENGTH_REQ یا LL_LENGTH_RSP روی دستگاه جانبی تنظیم کنید تا کوچک‌ترین مقادیر لازم برای این مشخصات باشند. این به مرکزی اجازه می دهد تا زمانبندی زمان خود را هنگام محاسبه زمان مورد نیاز برای دریافت فریم بهینه کند.

ما قویاً توصیه می کنیم که مرکز و دستگاه جانبی از 2M PHY همانطور که در مشخصات BT 5.0 مشخص شده است پشتیبانی کند. مرکز باید از پیوندهای صوتی حداقل 64 کیلوبیت بر ثانیه در هر دو 1M و 2M PHY پشتیبانی کند. BLE برد بلند PHY نباید استفاده شود.

CoC از مکانیسم استاندارد بلوتوث برای رمزگذاری لایه پیوند و پرش فرکانس استفاده می کند.

خدمات ASHA GATT

یک دستگاه جانبی باید سرویس سرور GATT پخش جریانی صوتی برای سمعک (ASHA) را که در زیر توضیح داده شده است، اجرا کند. دستگاه جانبی باید این سرویس را هنگامی که در حالت عمومی قابل شناسایی است تبلیغ کند تا به مرکز اجازه دهد یک سینک صوتی را تشخیص دهد. هر عملیات پخش صوتی LE باید به رمزگذاری نیاز داشته باشد. جریان صوتی BLE شامل ویژگی های زیر است:

مشخصه خواص توضیحات
ReadOnlyProperties بخوانید ReadOnlyProperties ببینید.
AudioControlPoint بدون پاسخ بنویس و بنویس نقطه کنترل برای جریان صدا. AudioControlPoint ببینید.
AudioStatusPoint بخوانید/اطلاع دهید قسمت گزارش وضعیت برای نقطه کنترل صدا. AudioStatusPoint ببینید.
Volume بدون پاسخ بنویس بایت بین 128- و 0 که میزان تضعیف اعمال شده بر سیگنال صوتی پخش شده را نشان می دهد که از -48 دسی بل تا 0 دسی بل متغیر است. تنظیم -128 باید به صورت کاملاً خاموش تفسیر شود، یعنی پایین‌ترین سطح صدای غیر خاموش -127 است که معادل تضعیف -47.625 دسی‌بل است. در تنظیم 0، یک تون سینوسی ریل به ریل پخش شده باید معادل ورودی 100 dBSPL در سمعک باشد. مرکز باید در مقیاس کامل اسمی پخش شود و از این متغیر برای تنظیم سطح ارائه مورد نظر در محیطی استفاده کند.
LE_PSM_OUT بخوانید PSM برای اتصال کانال صوتی. از محدوده دینامیکی [BT Vol 3, Part A, Sec 4.22] انتخاب شود.

جداول زیر UUID های اختصاص داده شده به سرویس و ویژگی های آنها را توضیح می دهند.

UUID سرویس: {0xFDF0}

مشخصه UUID
ReadOnlyProperties {6333651e-c481-4a3e-9169-7c902aad37bb}
AudioControlPoint {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
AudioStatus {38663f1a-e711-4cac-b641-326b56404837}
Volume {00e4ca9e-ab14-41e4-8823-f9e70c7e91df}
LE_PSM_OUT {2d410339-82b6-42aa-b34e-e2e01df8cc1a}

علاوه بر سرویس ASHA GATT، دستگاه جانبی باید سرویس اطلاعات دستگاه را نیز اجرا کند تا به مرکز اجازه دهد نام سازنده و نام دستگاه های جانبی را شناسایی کند.

ReadOnlyProperties

ReadOnlyProperties دارای مقادیر زیر است:

بایت توضیحات
0 نسخه - باید 0x01 باشد
1 DeviceCapabilities ببینید.
2-9 HiSyncId ببینید.
10 FeatureMap ببینید.
11-12 RenderDelay این زمان، بر حسب میلی ثانیه، از زمانی است که دستگاه جانبی یک فریم صوتی دریافت می کند تا زمانی که دستگاه جانبی خروجی را ارائه کند. از این بایت ها می توان برای به تاخیر انداختن یک ویدیو برای همگام سازی با صدا استفاده کرد.
13-14 برای استفاده در آینده رزرو شده است. مقدار دهی اولیه کنید.
15-16 شناسه های کدک پشتیبانی شده این یک بیت ماسک از شناسه های کدک پشتیبانی شده است. یک مکان 1 در یک بیت مربوط به یک کدک پشتیبانی شده است. به عنوان مثال، 0x0002 نشان می دهد که G.722 در 16 کیلوهرتز پشتیبانی می شود. تمام بیت های دیگر باید روی 0 تنظیم شوند.

قابلیت های دستگاه

بیت توضیحات
0 سمت دستگاه (0: چپ، 1: راست)
1 نشان می دهد که آیا دستگاه مستقل است و داده های مونو دریافت می کند یا اینکه دستگاه بخشی از یک مجموعه است (0: تک صوتی، 1: دو گوش)
2 دستگاه از CSIS پشتیبانی می کند (0: پشتیبانی نمی شود، 1: پشتیبانی می شود)
3-7 رزرو شده (تنظیم روی 0)

HiSyncId

این فیلد باید برای همه دستگاه‌های دو گوش منحصر به فرد باشد، اما باید برای مجموعه چپ و راست یکسان باشد.

بایت توضیحات
0-1 شناسه سازنده این شناسه شرکت اختصاص داده شده توسط BTSIG است.
2-7 شناسه منحصربفرد برای شناسایی مجموعه سمعک. این شناسه باید هم در سمت چپ و هم در سمت راست روی یکسان تنظیم شود.

ویژگی نقشه

بیت توضیحات
0 جریان خروجی صوتی LE CoC پشتیبانی می شود (بله/خیر).
1-7 رزرو شده (بر روی 0 تنظیم شده است).

شناسه های کدک

اگر بیت تنظیم شده باشد، آن کدک خاص پشتیبانی می شود.

شناسه / شماره بیت کدک و نرخ نمونه بیت ریت مورد نیاز زمان قاب اجباری در مرکزی (C) یا محیطی (P)
0 رزرو شده است رزرو شده است رزرو شده است رزرو شده است
1 G.722 @ 16 کیلوهرتز 64 کیلوبیت بر ثانیه متغیر C و P
2-15 رزرو شده است.

AudioControlPoint

وقتی LE CoC بسته است نمی توان از این نقطه کنترل استفاده کرد. برای توضیحات روش، شروع و توقف یک جریان صوتی را ببینید.

اپکد استدلال ها رویه فرعی گات توضیحات
1 «Start»
  • codec uint8_t
  • audiotype uint8_t
  • volume int8_t
  • int8_t otherstate
با پاسخ بنویسید و با استفاده از مشخصه AudioStatusPoint منتظر اعلان وضعیت اضافی باشید. به دستگاه جانبی دستور می دهد تا کدک را بازنشانی کند و پخش فریم 0 را شروع کند. قسمت codec شناسه کدک مورد استفاده برای این پخش را نشان می دهد. برای مثال، فیلد codec «1» برای G.722 در 16 کیلوهرتز است.

فیلد بیت نوع صدا، انواع صوتی موجود در جریان را نشان می دهد:
  • 0 - نامعلوم
  • 1 - آهنگ زنگ
  • 2 - تماس تلفنی
  • 3 - رسانه
فیلد otherstate نشان می دهد که آیا طرف دیگر دستگاه های دو گوش متصل است یا خیر. مقدار فیلد زمانی که دستگاه جانبی دیگر متصل است 1 است، در غیر این صورت مقدار 0 است.

قبل از دریافت کد عملیاتی «Stop» ، دستگاه جانبی نباید درخواست به روز رسانی اتصال کند.
2 «Stop» هیچ کدام با پاسخ بنویسید و با استفاده از مشخصه AudioStatusPoint منتظر اعلان وضعیت اضافی باشید. به دستگاه جانبی دستور می دهد تا رندر صدا را متوقف کند. پس از این توقف، یک ترتیب تنظیم صوتی جدید باید آغاز شود تا صدا دوباره ارائه شود.
3 «Status»
  • uint8_t connected
بدون پاسخ بنویس به دستگاه جانبی متصل اطلاع می دهد که وضعیت به روز رسانی در دستگاه جانبی دیگر وجود دارد. فیلد connected نوع به روز رسانی را نشان می دهد:
  • 0 - سایر وسایل جانبی قطع شده است
  • 1 - سایر لوازم جانبی متصل است
  • 2 - به روز رسانی پارامتر اتصال LE در هر یک از اتصالات رخ داده است

AudioStatusPoint

قسمت گزارش وضعیت برای نقطه کنترل صدا

Opcodes توضیحات
0 وضعیت خوب است
-1 دستور ناشناخته
-2 پارامترهای غیرقانونی

تبلیغات خدمات ASHA GATT

UUID سرویس باید در بسته تبلیغاتی باشد. در تبلیغات یا قاب پاسخ اسکن، تجهیزات جانبی باید یک نوع داده سرویس داشته باشند:

بایت افست نام توضیحات
0 طول AD >= 0x09
1 نوع AD 0x16 (داده های سرویس - UUID 16 بیتی)
2-3 سرویس UUID 0xFDF0 (کمی اندین)

توجه: این یک شناسه موقت است.
4 نسخه پروتکل 0x01
5 قابلیت
  • 0 - سمت چپ (0) یا راست (1).
  • 1 - دستگاه تک (0) یا دوتایی (1).
  • 2 - دستگاه از CSIS پشتیبانی می کند (<0: پشتیبانی نمی شود، 1: پشتیبانی می شود)
  • 3-7 - رزرو شده است. این بیت ها باید صفر باشند.
6-9 HiSyncId کوتاه شده چهار بایت مهم HiSyncId . این بایت ها باید تصادفی ترین قسمت شناسه باشند.

تجهیزات جانبی باید دارای یک نوع داده با نام محلی کامل باشند که نام سمعک را نشان می دهد. این نام در رابط کاربری دستگاه تلفن همراه استفاده می شود تا کاربر بتواند دستگاه مناسب را انتخاب کند. نام نباید نشان دهنده کانال چپ یا راست باشد زیرا این اطلاعات در DeviceCapabilities ارائه شده است.

اگر دستگاه‌های جانبی نام و انواع داده‌های سرویس ASHA را در یک نوع قاب قرار دهند (ADV یا SCAN RESP)، دو نوع داده ("نام محلی کامل" و "داده‌های سرویس برای سرویس ASHA") باید در یک قاب ظاهر شوند. این به اسکنر دستگاه تلفن همراه امکان می دهد هر دو داده را در یک نتیجه اسکن دریافت کند.

در طول جفت شدن اولیه، مهم است که وسایل جانبی با سرعت کافی تبلیغ کنند تا به دستگاه تلفن همراه اجازه دهند سریعاً لوازم جانبی را کشف کند و به آنها متصل شود.

دستگاه های جانبی چپ و راست را همگام سازی کنید

برای کار با بلوتوث در دستگاه‌های تلفن همراه Android، دستگاه‌های جانبی وظیفه دارند از همگام‌سازی آن‌ها اطمینان حاصل کنند. پخش در دستگاه های جانبی چپ و راست باید به موقع هماهنگ شود. هر دو دستگاه جانبی باید نمونه های صوتی را از منبع به طور همزمان پخش کنند.

دستگاه های جانبی می توانند زمان خود را با استفاده از شماره دنباله ای که به هر بسته از محموله صوتی اضافه شده است، همگام کنند. بخش مرکزی تضمین می‌کند که بسته‌های صوتی که قرار است همزمان روی هر وسیله جانبی پخش شوند دارای یک شماره دنباله باشند. شماره دنباله بعد از هر بسته صوتی یک عدد افزایش می یابد. هر شماره دنباله ای 8 بیتی است، بنابراین اعداد دنباله پس از 256 بسته صوتی تکرار می شوند. از آنجایی که هر اندازه بسته صوتی و نرخ نمونه برای هر اتصال ثابت است، دو دستگاه جانبی می توانند زمان پخش نسبی را استنتاج کنند. برای اطلاعات بیشتر درباره بسته صوتی، قالب بسته صوتی و زمان‌بندی را ببینید.

هنگامی که ممکن است نیاز به همگام سازی باشد، مرکز با ارائه تریگر به دستگاه های دو گوش کمک می کند. هر زمان که عملیاتی وجود داشته باشد که می‌تواند بر همگام‌سازی تأثیر بگذارد، هر دستگاه جانبی را از وضعیت دستگاه جانبی جفت شده خود مطلع می‌کند. محرک ها عبارتند از:

  • به عنوان بخشی از فرمان «Start» AudioControlPoint ، وضعیت اتصال فعلی طرف دیگر دستگاه‌های دوگوشی ارائه می‌شود.
  • هر زمان که یک اتصال، قطع یا عملیات به‌روزرسانی پارامتر اتصال در یک دستگاه جانبی وجود داشته باشد، فرمان «Status» AudioControlPoint به طرف دیگر دستگاه‌های دوگوشی ارسال می‌شود.

قالب و زمان بندی بسته های صوتی

بسته‌بندی فریم‌های صوتی (بلوک‌هایی از نمونه‌ها) در بسته‌ها به سمعک اجازه می‌دهد زمان‌بندی را از لنگرهای زمان‌بندی لایه پیوند استخراج کند. برای ساده سازی اجرا:

  • یک قاب صوتی باید همیشه با فاصله زمانی اتصال مطابقت داشته باشد. برای مثال، اگر فاصله اتصال 20 میلی‌ثانیه و نرخ نمونه 16 کیلوهرتز باشد، قاب صوتی باید شامل 320 نمونه باشد.
  • نرخ های نمونه در سیستم به مضرب 8 کیلوهرتز محدود می شود تا همیشه تعداد صحیحی از نمونه ها در یک فریم بدون توجه به زمان فریم یا فاصله اتصال وجود داشته باشد.
  • یک بایت دنباله ای باید فریم های صوتی را اضافه کند. بایت دنباله باید با wrap-around شمارش شود و به دستگاه جانبی اجازه دهد تا عدم تطابق بافر یا underflow را تشخیص دهد.
  • یک فریم صوتی باید همیشه در یک بسته LE قرار گیرد. فریم صوتی باید به عنوان یک بسته L2CAP جداگانه ارسال شود. اندازه PDU LE LL باید:
    اندازه محموله صوتی + 1 (شمارگر ترتیب) + 6 (4 برای هدر L2CAP، 2 برای SDU)
  • یک رویداد اتصال باید همیشه آنقدر بزرگ باشد که شامل دو بسته صوتی و دو بسته خالی باشد تا یک ACK پهنای باند را برای ارسال مجدد ذخیره کند. توجه داشته باشید که بسته صوتی ممکن است توسط کنترلر بلوتوث مرکزی تکه تکه شود. دستگاه جانبی باید قادر به دریافت بیش از دو بسته صوتی تکه تکه شده در هر رویداد اتصال باشد.

برای ایجاد انعطاف پذیری مرکزی، طول بسته G.722 مشخص نشده است. طول بسته G.722 می تواند بر اساس فاصله زمانی اتصالی که مرکز تنظیم می کند تغییر کند.

فرمت هشتگانه خروجی G.722 به Rec اشاره دارد. ITU-T G.722 (09/2012) بخش 1.4.4 "Multiplexer".

برای همه کدک هایی که یک دستگاه جانبی پشتیبانی می کند، دستگاه جانبی باید از پارامترهای اتصال زیر پشتیبانی کند. این یک لیست جزئی از تنظیماتی است که مرکز می تواند اجرا کند.

کدک میزان بیت فاصله اتصال طول CE (1M/2M PHY) اندازه محموله صوتی
G.722 @ 16 کیلوهرتز 64 کیلوبیت بر ثانیه 20 میلی‌ثانیه 5000/3750 ما 160 بایت

یک جریان صوتی را شروع و متوقف کنید

قبل از شروع یک جریان صوتی، سانترال از لوازم جانبی پرس و جو می کند و یک کدک مخرج مشترک ایجاد می کند. سپس راه اندازی جریان از طریق دنباله زیر ادامه می یابد:

  1. PSM، و به صورت اختیاری، RenderDelay خوانده می شود. این مقادیر ممکن است توسط مرکز ذخیره شوند.
  2. کانال CoC L2CAP باز شد - دستگاه جانبی باید در ابتدا هشت اعتبار اعطا کند.
  3. یک به روز رسانی اتصال برای تغییر پیوند به پارامترهای مورد نیاز برای کدک انتخابی صادر می شود. مرکز ممکن است این به روز رسانی اتصال را قبل از اتصال CoC در مرحله قبل انجام دهد.
  4. هر دو میزبان مرکزی و محیطی منتظر رویداد کامل به روز رسانی هستند.
  5. رمزگذار صوتی را مجدداً راه اندازی کنید و تعداد توالی بسته ها را به 0 بازنشانی کنید. دستور «Start» با پارامترهای مربوطه در AudioControlPoint صادر می شود. مرکز منتظر اعلان وضعیت موفقیت آمیز دستور «Start» قبلی از دستگاه جانبی قبل از پخش است. این انتظار به دستگاه جانبی زمان می‌دهد تا خط لوله پخش صوتی خود را آماده کند. در طول پخش صدا، ماکت باید در هر رویداد اتصال در دسترس باشد، حتی اگر تاخیر تکرار فعلی ممکن است غیر صفر باشد.
  6. دستگاه جانبی اولین بسته صوتی را از صف داخلی خود (دنباله شماره 0) می گیرد و آن را پخش می کند.

مرکز فرمان «توقف» را برای بستن جریان صوتی صادر می کند. بعد از این دستور، نیازی نیست که ابزار جانبی در هر رویداد اتصال در دسترس باشد. برای راه‌اندازی مجدد جریان صوتی، از مرحله 5 شروع کنید، دنباله بالا را طی کنید. هنگامی که مرکز پخش صدا را پخش نمی‌کند، همچنان باید یک اتصال LE را برای خدمات GATT حفظ کند.

دستگاه جانبی نباید به روز رسانی اتصال به مرکزی را صادر کند. برای صرفه جویی در مصرف برق، ممکن است سانترال به روز رسانی اتصال به دستگاه جانبی را هنگامی که صدا پخش نمی کند صادر کند.