Hỗ trợ âm thanh cho thiết bị 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 hỗ trợ tiếp cận 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 đến kết nối qua Bluetooth năng lượng thấp (BLE). CoC sử dụng bộ nhớ đệm linh hoạt của một số gói âm thanh để duy trì luồng âm thanh ổn định, ngay cả khi có sự cố mất gói. Vùng đệm này cung cấp chất lượng âm thanh cho các thiết bị trợ thính nhưng phải trả giá bằng độ trễ.

Thiết kế của CoC tham chiếu đến Thông số kỹ thuật cốt lõi của Bluetooth Phiên bản 5 (BT). Để luôn tuân thủ các thông số kỹ thuật cốt lõi, tất cả giá trị nhiều byte trên trang này sẽ được đọc theo thứ tự little-endian.

Thuật ngữ

  • Central (Thiết bị trung tâm) – thiết bị Android quét tìm 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 mạng và cấu trúc hệ thống

Khi sử dụng CoC cho thiết bị trợ thính, cấu trúc mạng giả định một trung tâm 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 là một bồn lưu trữ âm thanh. Nếu một thiết bị ngoại vi bị thiếu do thiết bị chỉ có âm thanh đơn kênh hoặc bị mất kết nối, thì thiết bị trung tâm sẽ trộn kênh âm thanh trái và phải rồi truyền âm thanh đến thiết bị ngoại vi còn lại. Nếu bộ trung tâm mất kết nối với cả hai thiết bị ngoại vi, thì bộ trung tâm sẽ coi đường liên kết đến bộ thu âm thanh là bị mất. Trong những trường hợp đó, trung tâm sẽ định tuyến âm thanh đến một đầu ra khác.


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

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

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

  • Theo dõi các thiết bị ngoại vi bên trái và bên 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ó một mối 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ị đã 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 một mối ghép nối bị xoá.

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

Yêu cầu hệ thống

Để triển khai đúng cách CoC 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 tuân thủ. Bạn nên sử dụng tính năng Kết nối bảo mật LE.
  • có hỗ trợ trung tâm ít nhất 2 đường liên kết LE đồng thời với các tham số như mô tả trong phần Định dạng và thời gian gói âm thanh.
  • có thiết bị ngoại vi hỗ trợ ít nhất 1 đường liên kết LE với các thông số được mô tả trong phần Định dạng và thời gian gói âm thanh.
  • có chức năng kiểm soát luồng dựa trên tín dụng LE [BT Tập 3, Phần A, Mục 10.1]. Thiết bị phải hỗ trợ kích thước MTU và MPS tối thiểu là 167 byte trên CoC và có thể lưu vào bộ đệm tối đa 8 gói.
  • có phần mở rộng độ dài dữ liệu LE [BT Vol 6, Part B, Sec 5.1.9] với tải trọng tối thiểu là 167 byte.
  • thiết bị trung tâm hỗ trợ Lệnh cập nhật kết nối LE HCI và tuân thủ các tham số maximum_CE_Lengthminimum_CE_Length khác 0.
  • trung tâm duy trì tốc độ truyền dữ liệu cho hai kết nối CoC LE với hai 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 theo Định dạng và thời gian gói âm thanh.
  • 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ị nhỏ nhất bắt buộc 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 hoá trình lập lịch biểu thời gian khi tính toán khoảng thời gian cần thiết để nhận một khung hình.

Bạn nên hỗ trợ PHY 2 MB cho phần trung tâm và ngoại vi như được chỉ định trong quy cách BT 5.0. Trung tâm phải hỗ trợ các đường liên kết âm thanh với tốc độ tối thiểu là 64 kbit/giây trên cả PHY 1M và 2M. Không được sử dụng PHY tầm xa BLE.

CoC sử dụng các cơ chế Bluetooth tiêu chuẩn để mã hoá lớp liên kết và chuyển đổi tần số.

Dịch vụ ASHA GATT

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

Đặc điểm Thuộc tính Mô tả
ReadOnlyProperties Đã đọc Xem ReadOnlyProperties.
AudioControlPoint Viết và Viết mà không có nội dung phản hồi Điểm điều khiển cho luồng âm thanh. Xem phần AudioControlPoint.
AudioStatusPoint Đọc/Thông báo Trường báo cáo trạng thái cho điểm điều khiển âm thanh. Xem AudioStatusPoint.
Âm lượng Viết mà không có câu trả lời Byte từ -128 đến 0 cho biết mức độ suy hao cần áp dụng cho tín hiệu âm thanh được truyền trực tuyến, trong khoảng từ -48 dB đến 0 dB. Giá trị đặt là -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 độ suy hao -47,625 dB. Ở chế độ cài đặt 0, âm thanh sin từ đầu đến cuối được truyền trực tuyến sẽ biểu thị mức đầu vào 100 dBSPL tương đương trên thiết bị trợ thính. Trung tâm sẽ truyền trực tuyến ở tỷ lệ đầy đủ danh nghĩa và sử dụng biến này để đặt cấp độ trình bày mong muốn trong thiết bị ngoại vi.
LE_PSM_OUT Đã đọc PSM để kết nối kênh âm thanh. Để được chọn trong phạm vi động [BT Tập 3, Phần A, Mục 4.22]

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

UUID dịch vụ: {0xFDF0}

Đặc điểm UUID
ReadOnlyProperties {6333651e-c481-4a3e-9169-7c902aad37bb}
AudioControlPoint {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
AudioStatus {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 phải triển khai Dịch vụ thông tin thiết bị để cho phép thiết bị 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.

ReadOnlyProperties

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

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

DeviceCapabilities

Bit Mô tả
0 Bên thiết bị (0: trái, 1: phải)
1 Cho biết liệu thiết bị có độc lập và nhận dữ liệu đơn âm hay không, hoặc liệu thiết bị có thuộc một bộ hay không (0: đơn âm, 1: âm thanh nổi)
2 Thiết bị hỗ trợ CSIS (0: không hỗ trợ, 1: hỗ trợ)
3-7 Đã đặt trước (đặt thành 0)

HiSyncID

Trường này phải là duy nhất cho tất cả thiết bị âm thanh nổi, nhưng phải giống nhau cho bộ thiết bị bên trái và bên phải.

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

FeatureMap

Bit Mô tả
0 Hỗ trợ phát trực tuyến đầu ra âm thanh LE CoC (Có/Không).
1-7 Đã đặt trước (đặt thành 0).

Mã bộ mã hoá và giải mã

Nếu bit này được đặt, thì bộ mã hoá và giải mã cụ thể đó sẽ được hỗ trợ.

Mã / Số bit Bộ mã hoá và giải mã và tốc độ lấy mẫu Tốc độ bit bắt buộc Thời gian kết xuất khung hình Bắt buộc trên trung tâm (C) hoặc ngoại vi (P)
0 Đặt trước Đặt trước Đặt trước Đặt trước
1 G.722 ở 16 kHz 64 kbit/giây Biến C và P
2-15 được dành riêng.
0 cũng được đặt trước.

AudioControlPoint

Bạn không thể sử dụng điểm kiểm soát này khi CoC của LE đang đóng. Hãy xem phần Bắt đầu và dừng luồng âm thanh để biết nội dung mô tả quy trình.

Mã opcode Đối số Quy trình phụ GATT Mô tả
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
Viết với phản hồi và chờ thông báo trạng thái bổ sung thông qua đặc điểm AudioStatusPoint. Hướng dẫn thiết bị ngoại vi đặt lại bộ mã hoá và giải mã và bắt đầu phát khung 0. Trường bộ mã hoá và giải mã cho biết mã bộ mã hoá và giải mã cần sử dụng cho lần phát này. Ví dụ: trường bộ mã hoá và giải mã 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 – Nội dung nghe nhìn
Trường otherstate cho biết liệu bên kia của thiết bị âm thanh 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 giá trị là 0.

Thiết bị ngoại vi không được 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 với phản hồi và chờ thông báo trạng thái bổ sung thông qua đặc điểm AudioStatusPoint. Hướng dẫn thiết bị ngoại vi ngừng kết xuất âm thanh. Bạn nên bắt đầu một trình tự thiết lập âm thanh mới sau lần dừng này để kết xuất 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 đã kết nối rằng có bản 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 nội dung cập nhật:
  • 0 – Thiết bị ngoại vi khác đã ngắt kết nối
  • 1 – Thiết bị ngoại vi khác đã kết nối
  • 2 – Đã xảy ra một lần Cập nhật thông số kết nối LE trên một trong hai kết nối

AudioStatusPoint

Trường báo cáo trạng thái cho điểm điều khiển âm thanh

Mã opcode Mô tả
0 Trạng thái ổn
-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 nằm trong gói quảng cáo. Trong khung quảng cáo hoặc khung phản hồi quét, thiết bị ngoại vi phải có Dữ liệu dịch vụ:

Độ lệch byte Tên Mô tả
0 Thời lượng 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 (little-endian)

Lưu ý: Đây là mã nhận dạng tạm thời.
4 Phiên bản giao thức 0x01
5 Chức năng
  • 0 – bên trái (0) hoặc bên phải (1)
  • 1 – một (0) hoặc hai (1) thiết bị.
  • 2 – thiết bị hỗ trợ CSIS (<0: không hỗ trợ, 1: hỗ trợ)
  • 3-7 – được đặt trước. Các bit này phải bằng 0.
6-9 Cắt bớt HiSyncID Bốn byte quan trọng nhất của HiSyncId. Các byte này phải là phần ngẫu nhiên nhất của mã nhận dạng.

Thiết bị ngoại vi phải có loại dữ liệu Complete Local Name (Tên cục bộ đầy đủ) cho biết tên của thiết bị 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 thiết bị phù hợp. Tên này không được cho biết kênh bên trái hay bên 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 ("Complete Local Name" (Tên cục bộ hoàn chỉnh) và "Service Data for ASHA service" (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 trình 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 quá trình ghép nối ban đầu, đ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ộ hoá thiết bị ngoại vi bên trái và bên phải

Để hoạt động với Bluetooth trên thiết bị di động Android, các thiết bị ngoại vi phải đảm bảo rằng chúng được đồng bộ hoá. Quá trình phát trên thiết bị ngoại vi bên trái và bên phải cần được đồng bộ hoá theo thời gian. 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ộ hoá thời gian bằng cách sử dụng số thứ tự được thêm vào đầu mỗi gói của 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 một lúc trên mỗi thiết bị ngoại vi có cùng số thứ tự. Số thứ tự tăng thêm một sau mỗi gói âm thanh. Mỗi số thứ tự có độ dài 8 bit, vì vậy, các 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 độ lấy 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 phần Đị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 trình kích hoạt cho các thiết bị âm thanh nổi khi cần đồng bộ hoá. 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 đã ghép nối bất cứ khi nào có thao tác có thể ảnh hưởng đến quá trình đồng bộ hoá. Các trình kích hoạt là:

  • Trong lệnh «Start» của AudioControlPoint, trạng thái kết nối hiện tại của bên kia của thiết bị âm thanh hai tai được cung cấp.
  • Bất cứ khi nào có thao tác kết nối, ngắt kết nối hoặc cập nhật tham số 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 phía bên kia của thiết bị âm thanh hai tai.

Định dạng và thời gian của 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ị đo lường thính giác lấy thời gian từ các neo thời gian của lớp liên kết. Để đơn giản hoá việc triển khai:

  • 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à 20 mili giây và tốc độ lấy mẫu là 16 kHz, thì khung âm thanh sẽ chứa 320 mẫu.
  • Tốc độ lấy mẫu trong hệ thống bị giới hạn ở bội số của 8 kHz để luôn có số lượng mẫu nguyên trong một khung bất kể thời gian khung hình hoặc khoảng thời gian kết nối.
  • Một byte tuần tự sẽ được thêm vào đầu khung âm thanh. Byte trình tự sẽ được tính theo vòng lặp và cho phép thiết bị ngoại vi phát hiện tình trạng không khớp bộ đệm hoặc bộ đệm bị thiếu.
  • 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 một gói L2CAP riêng biệt. Kích thước của PDU LL LE sẽ là:
    kích thước tải trọng âm thanh + 1 (bộ đếm tuần 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 để đặt trước băng thông cho việc truyền lại. Xin lưu ý rằng gói âm thanh có thể bị phân mảnh bởi trình điều khiển Bluetooth của trung tâm. Thiết bị ngoại vi phải có khả năng nhận nhiều hơn 2 gói âm thanh bị phân mảnh cho mỗi sự kiện kết nối.

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

Định dạng octet đầu ra G.722 tham chiếu đến Rec. ITU-T G.722 (09/2012) mục 1.4.4 "Multiplexer"

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

Bộ mã hoá và 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/giây 20 mili giây 5.000/3.750 đô la Mỹ 160 byte

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

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

  1. PSM và RenderDelay (không bắt buộc) được đọc. Các giá trị này có thể được lưu vào bộ nhớ đệm của 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. Hệ thống sẽ phát hành một bản cập nhật kết nối để chuyển đổi đường liên kết đến các tham số cần thiết cho bộ mã hoá và giải mã đã chọn. Trung tâm có thể thực hiện bản cập nhật kết nối này trước khi 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ã hoá âm thanh và đặt lại số lượng gói theo trình tự về 0. Lệnh «Start» có các tham số liên quan sẽ được phát hành 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 trực tuyến. Khoảng thời gian chờ này cho phép thiết bị ngoại vi có thời gian chuẩn bị quy trình phát âm thanh. Trong quá trình phát trực tuyến âm thanh, bản sao phải có sẵn tại mọi sự kiện kết nối, mặc dù độ trễ 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 nội bộ (số thứ tự 0) và phát gói đó.

Vấn đề chính là lệnh «Stop» (Dừng) để đóng luồng âm thanh. Sau lệnh này, bạn không cần phải có thiết bị ngoại vi trên 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 trình tự trên, bắt đầu từ bước 5. Khi không phát trực tuyến â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 không được phát hành thông tin cập nhật về kết nối cho thiết bị trung tâm. Để tiết kiệm pin, trung tâm có thể đưa ra thông tin cập nhật về kết nối cho thiết bị ngoại vi khi thiết bị này không phát trực tuyến âm thanh.