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

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

طراحی CoC به مشخصات هسته بلوتوث نسخه 5 (BT) اشاره دارد. برای هماهنگ ماندن با مشخصات اصلی، همه مقادیر چند بایتی در این صفحه باید به صورت کمی اندین خوانده شوند.

اصطلاحات

  • Central - دستگاه Android که تبلیغات را از طریق بلوتوث اسکن می کند.
  • لوازم جانبی - شنوایی که بسته های تبلیغاتی را از طریق بلوتوث ارسال می کند.

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

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


شکل 1. توپولوژی برای جفت کردن سمعک با دستگاه های تلفن همراه Android با استفاده از CoC بر روی BLE

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

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

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

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

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

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

  • یک کنترلر سازگار BT 4.2 یا بالاتر را اجرا کنید. LE Secure Connections به شدت توصیه می شود.
  • حداقل از 2 پیوند LE همزمان با پارامترهایی که در قالب بسته صوتی و زمان بندی توضیح داده شده است، پشتیبانی مرکزی داشته باشد.
  • حداقل 1 پیوند LE را با پارامترهای توضیح داده شده در قالب بسته صوتی و زمان بندی پشتیبانی می کند.
  • یک کنترل جریان مبتنی بر اعتبار LE داشته باشید [BT جلد 3، بخش A، بخش 10.1]. دستگاه ها باید از اندازه MTU و MPS حداقل 167 بایت در CoC پشتیبانی کنند و بتوانند تا 8 بسته را بافر کنند.
  • دارای یک پسوند طول داده 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 تنظیم کنید تا کوچک‌ترین مقادیر مورد نیاز برای این مشخصات باشند. این به مرکزی اجازه می دهد تا زمانبندی زمان خود را هنگام محاسبه زمان مورد نیاز برای دریافت فریم بهینه کند.

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

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

خدمات ASHA GATT

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

مشخصه خواص توضیحات
ReadOnlyProperties بخوانید ReadOnlyProperties را ببینید.
AudioControlPoint بدون پاسخ بنویس و بنویس نقطه کنترل برای جریان صدا. AudioControlPoint را ببینید.
AudioStatusPoint بخوانید/اطلاع دهید قسمت گزارش وضعیت برای نقطه کنترل صدا. AudioStatusPoint را ببینید.
حجم بدون پاسخ بنویس بایت بین 128- و 0 که میزان تضعیف اعمال شده بر سیگنال صوتی پخش شده را نشان می دهد که از -48 دسی بل تا 0 دسی بل متغیر است. تنظیم -128 باید به صورت کاملاً خاموش تفسیر شود، یعنی پایین‌ترین سطح ولوم غیر خاموش 127- است که معادل تضعیف -47.625 دسی‌بل است. در تنظیم 0، یک تون سینوسی از راه آهن به ریل باید معادل ورودی 100 دسی‌بی‌اس‌پی‌ال را در سمعک نشان دهد. مرکز باید در مقیاس کامل اسمی جریان یابد و از این متغیر برای تنظیم سطح ارائه مطلوب در محیطی استفاده کند.
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}
وضعیت صوتی {38663f1a-e711-4cac-b641-326b56404837}
حجم {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 رزرو شده است.
0 نیز رزرو شده است.

AudioControlPoint

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

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

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

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

AudioStatusPoint

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

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

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

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

بایت افست نام توضیحات
0 طول بعد از میلاد >= 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 کیلوهرتز محدود می‌شود تا همیشه تعداد صحیحی از نمونه‌ها در یک فریم بدون توجه به زمان فریم یا فاصله اتصال وجود داشته باشد.
  • یک بایت دنباله ای باید فریم های صوتی را اضافه کند. بایت دنباله باید با چرخش در حال شمارش باشد و به دستگاه جانبی اجازه دهد عدم تطابق بافر یا زیر جریان را تشخیص دهد.
  • یک قاب صوتی باید همیشه در یک بسته LE قرار گیرد. فریم صوتی باید به عنوان یک بسته L2CAP جداگانه ارسال شود. اندازه PDU LE LL باید باشد:
    اندازه محموله صوتی + 1 (شمارگر ترتیب) + 6 (4 برای هدر L2CAP، 2 برای SDU)
  • یک رویداد اتصال باید همیشه آنقدر بزرگ باشد که شامل 2 بسته صوتی و 2 بسته خالی باشد تا یک ACK پهنای باند را برای ارسال مجدد ذخیره کند. توجه داشته باشید که بسته صوتی ممکن است توسط کنترلر بلوتوث مرکزی تکه تکه شود. دستگاه جانبی باید قادر به دریافت بیش از 2 بسته صوتی تکه تکه شده در هر رویداد اتصال باشد.

برای انعطاف پذیری مرکزی، طول بسته 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 باز شد - دستگاه جانبی در ابتدا باید 8 اعتبار اعطا کند.
  3. یک به روز رسانی اتصال برای تغییر پیوند به پارامترهای مورد نیاز برای کدک انتخابی صادر می شود. مرکز ممکن است این به روز رسانی اتصال را قبل از اتصال CoC در مرحله قبل انجام دهد.
  4. هر دو میزبان مرکزی و محیطی منتظر رویداد کامل به روز رسانی هستند.
  5. رمزگذار صوتی را مجدداً راه اندازی کنید و تعداد توالی بسته ها را به 0 تنظیم کنید. یک فرمان «Start» با پارامترهای مربوطه در AudioControlPoint صادر می شود. مرکز منتظر اعلان وضعیت موفقیت آمیز دستور «Start» قبلی از دستگاه جانبی قبل از پخش است. این انتظار به دستگاه جانبی زمان می‌دهد تا خط لوله پخش صوتی خود را آماده کند. در طول پخش صدا، ماکت باید در هر رویداد اتصال در دسترس باشد، حتی اگر تاخیر تکرار فعلی ممکن است غیر صفر باشد.
  6. دستگاه جانبی اولین بسته صوتی را از صف داخلی خود (دنباله شماره 0) می گیرد و آن را پخش می کند.

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

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