Hỗ trợ âm thanh trợ thính bằng Bluetooth LE

Các thiết bị trợ thính (HA) có thể cải thiện khả năng truy cập trên các thiết bị di động chạy Android bằng cách sử dụng các kênh L2CAP (CoC) hướng kết nối qua Bluetooth Low Energy (BLE). CoC sử dụng bộ đệm đàn hồi của một số gói âm thanh để duy trì luồng âm thanh ổn định, ngay cả khi bị mất gói. Bộ đệm này cung cấp chất lượng âm thanh cho các thiết bị trợ thính nhưng không gây ra độ trễ.

Thiết kế của CoC tham khảo Thông số kỹ thuật Bluetooth Core Phiên bản 5 (BT). Để luôn phù hợp với các thông số kỹ thuật cốt lõi, tất cả các giá trị nhiều byte trên trang này sẽ được đọc dưới dạng little-endian.

Thuật ngữ

  • Central - thiết bị Android quét quảng cáo qua Bluetooth.
  • Thiết bị ngoại vi - thiết bị trợ thính gửi gói quảng cáo qua Bluetooth.

Cấu trúc liên kết mạng và kiến ​​trúc hệ thống

Khi sử dụng CoC cho máy trợ thính, cấu trúc liên kết mạng giả định một trung tâm duy nhất và hai thiết bị ngoại vi, một bên trái và một bên phải, như trong Hình 1 . Hệ thống âm thanh Bluetooth xem các thiết bị ngoại vi bên trái và bên phải dưới dạng một bộ thu âm thanh duy nhất. Nếu thiếu thiết bị ngoại vi do khớp đơn âm hoặc mất kết nối, thì trung tâm sẽ trộn kênh âm thanh trái và phải và truyền âm thanh đến thiết bị ngoại vi còn lại. Nếu trung tâm mất kết nối với cả hai thiết bị ngoại vi thì trung tâm sẽ coi như mất liên kết đến bộ thu âm thanh. Trong những trường hợp đó, trung tâm định tuyến âm thanh đến đầu ra khác.


Hình 1. Cấu trúc liên kết ghép nối máy trợ thính với thiết bị di động Android sử dụng CoC qua BLE

Khi trung tâm không truyền dữ liệu âm thanh đến thiết bị ngoại vi và có thể duy trì kết nối BLE, trung tâm không được ngắt kết nối khỏi thiết bị ngoại vi. Việc duy trì kết nối cho phép truyền dữ liệu đến máy chủ GATT nằm trên thiết bị ngoại vi.

Khi ghép nối và kết nối các thiết bị trợ thính, trung tâm phải:

  • Theo dõi các thiết bị ngoại vi trái và phải được ghép nối gần đây hơn.
  • Giả sử các thiết bị ngoại vi đang được sử dụng nếu có ghép nối hợp lệ. Trung tâm sẽ cố gắng kết nối hoặc kết nối lại với thiết bị được ghép nối khi mất kết nối.
  • Giả sử các thiết bị ngoại vi không còn được sử dụng nếu việc ghép nối bị xóa.

Trong các trường hợp trên, ghép nối đề cập đến hành động đăng ký một bộ máy trợ thính với UUID nhất định và chỉ định trái/phải trong HĐH chứ không phải quy trình ghép nối Bluetooth.

Yêu cầu hệ thống

Để triển khai CoC đúng cách nhằm mang lại trải nghiệm tốt cho người dùng, hệ thống Bluetooth trong thiết bị trung tâm và thiết bị ngoại vi phải:

  • triển khai bộ điều khiển BT 4.2 trở lên tương thích. LE Secure Connections rất được khuyến khích.
  • có sự hỗ trợ trung tâm ít nhất 2 liên kết LE đồng thời với các thông số như được mô tả trong Định dạng và thời gian gói âm thanh .
  • có hỗ trợ ngoại vi ít nhất 1 liên kết LE với các tham số được mô tả trong định dạng và thời gian gói âm thanh .
  • có kiểm soát luồng dựa trên tín dụng LE [BT Tập 3, Phần A, Phần 10.1]. Các thiết bị phải hỗ trợ kích thước MTU và MPS ít nhất là 167 byte trên CoC và có thể đệm tối đa 8 gói.
  • có phần mở rộng độ dài dữ liệu LE [BT Vol 6, Phần B, Phần 5.1.9] với tải trọng ít nhất là 167 byte.
  • có thiết bị trung tâm hỗ trợ Lệnh cập nhật kết nối HCI LE và tuân thủ các tham số maximum_CE_Lengthminimum_CE_Length khác 0.
  • yêu cầu trung tâm duy trì thông lượng dữ liệu cho hai kết nối LE CoC đến hai thiết bị ngoại vi khác nhau với khoảng thời gian kết nối và kích thước tải trọng ở định dạng và thời gian gói Âm thanh .
  • yêu cầu thiết bị ngoại vi đặt các tham số MaxRxOctetsMaxRxTime trong khung LL_LENGTH_REQ hoặc LL_LENGTH_RSP thành các giá trị bắt buộc nhỏ nhất cần thiết cho các thông số kỹ thuật này. Điều này cho phép trung tâm tối ưu hóa bộ lập lịch thời gian của nó khi tính toán lượng thời gian cần thiết để nhận khung.

Chúng tôi đặc biệt khuyến nghị rằng trung tâm và thiết bị ngoại vi hỗ trợ 2MB PHY như được chỉ định trong thông số kỹ thuật BT 5.0. Trung tâm sẽ hỗ trợ các liên kết âm thanh ít nhất 64 kbit/s trên cả PHY 1M và 2M. Không được sử dụng PHY tầm xa BLE.

CoC sử dụng cơ chế Bluetooth tiêu chuẩn để mã hóa lớp liên kết và nhảy tần.

Dịch vụ của ASHA GATT

Thiết bị ngoại vi sẽ triển khai dịch vụ máy chủ GATT Truyền âm thanh cho máy trợ thính (ASHA) được mô tả bên dưới. Thiết bị ngoại vi sẽ quảng cáo dịch vụ này khi ở chế độ có thể phát hiện chung để cho phép thiết bị trung tâm nhận ra phần chìm âm thanh. Mọi hoạt động truyền phát âm thanh LE đều phải yêu cầu mã hóa. Truyền phát âm thanh BLE bao gồm các đặc điểm sau:

đặc trưng Của cải Sự miêu tả
Thuộc tính chỉ đọc Đọc Xem ReadOnlyProperties .
Điểm điều khiển âm thanh Viết và viết mà không có phản hồi Điểm kiểm soát luồng âm thanh. Xem AudioControlPoint .
Điểm trạng thái âm thanh Đọc/Thông báo Trường báo cáo trạng thái cho điểm kiểm soát âm thanh. Xem AudioStatusPoint
Âm lượng Viết mà không có phản hồi Byte nằm trong khoảng từ -128 đến 0 cho biết mức suy giảm áp dụng cho tín hiệu âm thanh truyền phát, nằm trong khoảng từ -48 dB đến 0 dB. Cài đặt -128 sẽ được hiểu là tắt tiếng hoàn toàn, tức là mức âm lượng không tắt tiếng thấp nhất là -127 tương đương với mức suy giảm -47,625 dB. Ở cài đặt 0, âm thanh hình sin được phát trực tuyến sẽ đại diện cho đầu vào tương đương 100 dBSPL trên thiết bị trợ thính. Trung tâm sẽ phát trực tiếp ở quy mô đầy đủ danh nghĩa và sử dụng biến này để đặt mức trình bày mong muốn ở thiết bị ngoại vi.
LE_PSM_OUT Đọc PSM để sử dụng để kết nối kênh âm thanh. Được chọn từ phạm vi động [BT Tập 3, Phần A, Phần 4.22]

UUID được gán cho dịch vụ và đặc điểm:

UUID dịch vụ : {0xFDF0}

đặc trưng UUID
Thuộc tính chỉ đọc {6333651e-c481-4a3e-9169-7c902aad37bb}
Điểm điều khiển âm thanh {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
Trạng thái âm thanh {38663f1a-e711-4cac-b641-326b56404837}
Âm lượng {00e4ca9e-ab14-41e4-8823-f9e70c7e91df}
LE_PSM_OUT {2d410339-82b6-42aa-b34e-e2e01df8cc1a}

Ngoài dịch vụ ASHA GATT, thiết bị ngoại vi cũng sẽ triển khai Dịch vụ thông tin thiết bị để cho phép trung tâm phát hiện tên nhà sản xuất và tên thiết bị của thiết bị ngoại vi.

Thuộc tính chỉ đọc

ReadOnlyProperties có các giá trị sau:

Byte Sự miêu tả
0 Phiên bản - phải là 0x01
1 Xem Khả năng của thiết bị .
2-9 Xem HiSyncId .
10 Xem Bản đồ đặc trưng .
12-11 Độ trễ kết xuất. Đây là thời gian, tính bằng mili giây, kể từ khi thiết bị ngoại vi nhận được khung âm thanh cho đến khi thiết bị ngoại vi hiển thị đầu ra. Những byte này có thể được sử dụng để trì hoãn video nhằm đồng bộ hóa với âm thanh.
13-14 Để dành mai sau dùng. Khởi tạo về số không.
15-16 ID Codec được hỗ trợ. Đây là một bitmask của ID codec được hỗ trợ. Số 1 ở vị trí bit tương ứng với codec được hỗ trợ. Ví dụ: 0x0002 cho biết G.722 ở tần số 16 kHz được hỗ trợ. Tất cả các bit khác sẽ được đặt thành 0.

Khả năng của thiết bị

Chút Sự miêu tả
0 Phía thiết bị (0: trái, 1: phải)
1 Cho biết thiết bị có độc lập và nhận dữ liệu đơn âm hay thiết bị là một phần của một bộ (0: đơn âm, 1: hai tai)
2 Thiết bị hỗ trợ CSIS (0: không được hỗ trợ, 1: được hỗ trợ)
3-7 Dành riêng (đặt thành 0)

HiSyncID

Trường này phải là duy nhất cho tất cả các thiết bị hai tai nhưng nó phải giống nhau đối với bộ bên trái và bên phải.

Byte Sự miêu tả
0-1 ID của nhà sản xuất. Đó là Mã nhận dạng công ty do BTSIG chỉ định.
2-7 ID duy nhất xác định bộ máy trợ thính. ID này phải được đặt giống nhau trên cả thiết bị ngoại vi bên trái và bên phải.

Bản đồ đặc trưng

Chút Sự miêu tả
0 Hỗ trợ phát trực tuyến đầu ra âm thanh LE CoC (Có/Không).
1-7 Dành riêng (đặt thành 0).

ID mã hóa

Nếu bit được đặt thì codec cụ thể đó sẽ được hỗ trợ.

Số ID/bit Codec và tốc độ mẫu Tốc độ bit bắt buộc Khung thời gian Bắt buộc ở trung tâm (C) hoặc ngoại vi (P)
0 Kín đáo Kín đáo Kín đáo Kín đáo
1 G.722 @ 16 kHz 64 kbit/s Biến đổi C và P
2-15 được bảo lưu.
0 cũng được bảo lưu.

Điểm điều khiển âm thanh

Không thể sử dụng điểm kiểm soát này khi LE CoC bị đóng. Xem Bắt đầu và dừng luồng âm thanh để biết mô tả quy trình.

Mã lệnh Tranh luận Thủ tục phụ GATT Sự miêu tả
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
Viết kèm theo phản hồi và mong đợi thông báo trạng thái bổ sung thông qua đặc tính AudioStatusPoint . Hướng dẫn thiết bị ngoại vi đặt lại codec và bắt đầu phát lại khung 0. Trường codec cho biết ID codec sẽ sử dụng cho lần phát lại này. Ví dụ: trường codec là "1" cho G.722 ở 16k Hz.

Trường bit loại âm thanh cho biết (các) loại âm thanh có trong luồng:
  • 0 - Không xác định
  • 1 - Nhạc chuông
  • 2 - Cuộc gọi điện thoại
  • 3 - Phương tiện truyền thông
Trường trạng thái khác cho biết phía bên kia của thiết bị hai tai có được kết nối hay không. Giá trị trường là 1 khi thiết bị ngoại vi khác được kết nối, nếu không thì giá trị là 0.

Thiết bị ngoại vi sẽ không yêu cầu cập nhật kết nối trước khi nhận được mã opcode «Stop» .
2 «Stop» Không có Viết kèm theo phản hồi và mong đợi thông báo trạng thái bổ sung thông qua đặc tính AudioStatusPoint . Hướng dẫn thiết bị ngoại vi dừng hiển thị âm thanh. Trình tự thiết lập âm thanh mới sẽ được bắt đầu sau điểm dừng này để hiển thị lại âm thanh.
3 «Status»
  • uint8_t connected
Viết mà không có phản hồi Thông báo cho thiết bị ngoại vi được kết nối rằng có cập nhật trạng thái trên thiết bị ngoại vi khác. Trường được kết nối cho biết loại cập nhật:
  • 0 - Ngoại vi khác bị ngắt kết nối
  • 1 - Kết nối ngoại vi khác
  • 2 - Đã xảy ra cập nhật tham số kết nối LE trên một trong hai kết nối

Điểm trạng thái âm thanh

Trường báo cáo trạng thái cho điểm kiểm soát âm thanh

Mã lệnh Sự miêu tả
0 Trạng thái OK
-1 Lệnh không xác định
-2 Thông số bất hợp pháp

Quảng cáo cho Dịch vụ ASHA GATT

UUID dịch vụ phải có trong gói quảng cáo. Trong khung phản hồi quét hoặc quảng cáo, các thiết bị ngoại vi phải có Dữ liệu dịch vụ:

Bù byte Tên Sự miêu tả
0 Độ dài quảng cáo >= 0x09
1 Loại quảng cáo 0x16 (Dữ liệu dịch vụ - UUID 16 bit)
2-3 UUID dịch vụ 0xFDF0 (endian nhỏ)

Lưu ý: Đây là ID tạm thời.
4 Phiên bản giao thức 0x01
5 Khả năng
  • 0 - bên trái (0) hoặc bên phải (1)
  • 1 - thiết bị đơn (0) hoặc kép (1).
  • 2 - thiết bị hỗ trợ CSIS (<0: không được hỗ trợ, 1: được hỗ trợ)
  • 3-7 - dành riêng. Các bit này phải bằng 0.
6-9 HiSyncID bị cắt ngắn Bốn byte có ý nghĩa nhỏ nhất của HiSyncId . Các byte này phải là phần ngẫu nhiên nhất của ID.

Các thiết bị ngoại vi phải có kiểu dữ liệu Complete Local Name cho biết tên của máy trợ thính. Tên này sẽ được sử dụng trên giao diện người dùng của thiết bị di động để người dùng có thể chọn đúng thiết bị. Tên sẽ không chỉ ra kênh trái hoặc phải vì thông tin này được cung cấp trong DeviceCapabilities .

Nếu thiết bị ngoại vi đặt tên và loại dữ liệu dịch vụ ASHA trong cùng một loại khung (ADV hoặc SCAN RESP), thì hai loại dữ liệu ("Tên địa phương hoàn chỉnh" và "Dữ liệu dịch vụ cho dịch vụ ASHA") sẽ xuất hiện trong cùng một khung. Điều này cho phép máy quét thiết bị di động nhận được cả hai dữ liệu trong cùng một kết quả quét.

Trong lần ghép nối đầu tiên, điều quan trọng là các thiết bị ngoại vi phải quảng cáo ở tốc độ đủ nhanh để cho phép thiết bị di động nhanh chóng phát hiện các thiết bị ngoại vi và liên kết với chúng.

Đồng bộ hóa các thiết bị ngoại vi trái và phải

Để hoạt động với Bluetooth trên thiết bị di động Android, các thiết bị ngoại vi có trách nhiệm đảm bảo rằng chúng được đồng bộ hóa. Việc phát lại trên các thiết bị ngoại vi bên trái và bên phải cần được đồng bộ hóa kịp thời. Cả hai thiết bị ngoại vi phải phát lại các mẫu âm thanh từ nguồn cùng một lúc.

Các thiết bị ngoại vi có thể đồng bộ hóa thời gian của chúng bằng cách sử dụng số thứ tự được thêm vào trước mỗi gói tải trọng âm thanh. Trung tâm đảm bảo rằng các gói âm thanh được phát cùng lúc trên mỗi thiết bị ngoại vi có cùng số thứ tự. Số thứ tự tăng dần sau mỗi gói âm thanh. Mỗi số thứ tự dài 8 bit nên số thứ tự sẽ lặp lại sau 256 gói âm thanh. Vì mỗi kích thước gói âm thanh và tốc độ mẫu được cố định cho mỗi kết nối nên hai thiết bị ngoại vi có thể suy ra thời gian phát tương đối. Để biết thêm thông tin về gói âm thanh, hãy xem Định dạng và thời gian của gói âm thanh .

Trung tâm hỗ trợ bằng cách cung cấp các kích hoạt cho thiết bị hai tai khi có thể cần phải đồng bộ hóa. Các trình kích hoạt này thông báo cho từng thiết bị ngoại vi về trạng thái của thiết bị ngoại vi được ghép nối của nó bất cứ khi nào có một thao tác có thể ảnh hưởng đến quá trình đồng bộ hóa. Các yếu tố kích hoạt là:

  • Là một phần của lệnh «Start» của AudioControlPoint, trạng thái kết nối hiện tại của phía bên kia của thiết bị hai tai sẽ được cung cấp.
  • Bất cứ khi nào có thao tác cập nhật thông số kết nối, ngắt kết nối hoặc kết nối trên một thiết bị ngoại vi, lệnh «Status» của AudioControlPoint sẽ được gửi đến đầu bên kia của thiết bị hai tai.

Định dạng và thời gian gói âm thanh

Việc đóng gói các khung âm thanh (khối mẫu) vào các gói cho phép thiết bị trợ thính lấy được thời gian từ các neo định thời của lớp liên kết. Để đơn giản hóa việc thực hiện:

  • Khung âm thanh phải luôn khớp với khoảng thời gian kết nối. Ví dụ: nếu khoảng thời gian kết nối là 20ms và tốc độ mẫu là 16 kHz thì khung âm thanh sẽ chứa 320 mẫu.
  • Tốc độ mẫu trong hệ thống được giới hạn ở bội số của 8kHz để luôn có số lượng mẫu nguyên trong một khung bất kể thời gian khung hoặc khoảng thời gian kết nối.
  • Một byte trình tự sẽ thêm vào các khung âm thanh. Byte tuần tự sẽ được tính bằng cách bao bọc và cho phép thiết bị ngoại vi phát hiện bộ đệm không khớp hoặc tràn.
  • Khung âm thanh phải luôn vừa với một gói LE. Khung âm thanh sẽ được gửi dưới dạng gói L2CAP riêng biệt. Kích thước của LE LL PDU sẽ là:
    kích thước tải trọng âm thanh + 1 (bộ đếm trình tự) + 6 (4 cho tiêu đề L2CAP, 2 cho SDU)
  • Sự kiện kết nối phải luôn đủ lớn để chứa 2 gói âm thanh và 2 gói trống cho ACK nhằm dự trữ băng thông cho việc truyền lại. Lưu ý rằng gói âm thanh có thể bị phân mảnh bởi bộ điều khiển Bluetooth của trung tâm. Thiết bị ngoại vi phải có khả năng nhận được nhiều hơn 2 gói âm thanh bị phân mảnh cho mỗi sự kiện kết nối.

Để mang lại sự linh hoạt cho trung tâm, độ dài gói G.722 không được chỉ định. Độ dài gói G.722 có thể thay đổi dựa trên khoảng thời gian kết nối mà trung tâm đặt ra.

Định dạng octet đầu ra G.722 tham chiếu Rec. ITU-T G.722 (09/2012) phần 1.4.4 "Bộ ghép kênh"

Đối với tất cả các codec mà thiết bị ngoại vi hỗ trợ, thiết bị ngoại vi sẽ hỗ trợ các tham số kết nối bên dưới. Đây là danh sách chưa đầy đủ các cấu hình mà trung tâm có thể triển khai.

Bộ giải mã Tốc độ bit Khoảng thời gian kết nối Chiều dài CE (1M/2M PHY) Kích thước tải trọng âm thanh
G.722 @ 16 kHz 64 kbit/s 20 mili giây 5000/3750 chúng tôi 160 byte

Bắt đầu và dừng luồng âm thanh

Trước khi bắt đầu luồng âm thanh, trung tâm sẽ truy vấn các thiết bị ngoại vi và thiết lập codec mẫu số chung. Sau đó, quá trình thiết lập luồng sẽ tiến hành theo trình tự sau:

  1. PSM và tùy chọn, RenderDelay được đọc. Những giá trị này có thể được lưu trữ bởi trung tâm.
  2. Kênh CoC L2CAP được mở – thiết bị ngoại vi sẽ cấp 8 tín dụng ban đầu.
  3. Bản cập nhật kết nối được phát hành để chuyển liên kết sang các tham số cần thiết cho codec đã chọn. Trung tâm có thể thực hiện cập nhật kết nối này trước kết nối CoC ở bước trước.
  4. Cả máy chủ trung tâm và máy chủ ngoại vi đều chờ sự kiện cập nhật hoàn tất.
  5. Khởi động lại bộ mã hóa âm thanh và đặt lại số lượng chuỗi gói về 0. Lệnh «Start» với các tham số liên quan được đưa ra trên AudioControlPoint. Trung tâm chờ thông báo trạng thái thành công của lệnh «Start» trước đó từ thiết bị ngoại vi trước khi truyền phát. Việc chờ đợi này giúp thiết bị ngoại vi có thời gian chuẩn bị đường phát lại âm thanh. Trong quá trình truyền phát âm thanh, bản sao sẽ có sẵn ở mọi sự kiện kết nối ngay cả khi độ trễ của bản sao hiện tại có thể khác 0.
  6. Thiết bị ngoại vi lấy gói âm thanh đầu tiên từ hàng đợi bên trong của nó (số thứ tự 0) và phát gói đó.

Trung tâm đưa ra lệnh “Dừng” để đóng luồng âm thanh. Sau lệnh này, thiết bị ngoại vi không cần phải có sẵn trong mọi sự kiện kết nối. Để bắt đầu lại quá trình truyền phát âm thanh, hãy thực hiện theo trình tự trên, bắt đầu từ bước 5. Khi trung tâm không truyền phát âm thanh, thiết bị trung tâm vẫn phải duy trì kết nối LE cho các dịch vụ GATT.

Thiết bị ngoại vi sẽ không đưa ra bản cập nhật kết nối tới trung tâm. Để tiết kiệm năng lượng, trung tâm có thể đưa ra bản cập nhật kết nối cho thiết bị ngoại vi khi thiết bị ngoại vi không truyền phát âm thanh.