Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

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

Thiết bị trợ thính (HA) có thể được cải thiện khả năng tiếp cận trên các thiết bị di động hỗ trợ Android bằng cách sử dụng các kênh L2CAP định hướng kết nối (CoC) qua Bluetooth Low Energy (BLE). CoC sử dụng một 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 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 với độ 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 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 là 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 các 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 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 như một ổ âm thanh duy nhất. Nếu thiết bị ngoại vi bị thiếu, do khớp đơn âm hoặc 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 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 coi như mất liên kết đến bộ phận chìm âm thanh. Trong những trường hợp đó, trung tâm đị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 máy trợ thính với thiết bị di động Android bằng CoC qua BLE

Khi thiết bị 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, 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 truyền dữ liệu tớ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 các thiết bị trợ thính, 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 tồn tại một 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ử rằng 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ộ thiết bị trợ thính với một UUID nhất định và các ký hiệu chỉ định trái / phải trong Hệ điều hành, không phải là quá 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 người dùng tốt, 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 hoặc cao hơn phù hợp. LE Secure Connections rất được khuyến khích.
  • có 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ợ thiết bị ngoại vi ít nhất 1 liên kết LE với các thông 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 chỉ LE [BT Vol 3, Part A, Sec 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, Part B, Sec 5.1.9] với trọng tải ít nhất là 167 byte.
  • yêu cầu 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 thông số maximum_CE_Lengthminimum_CE_Length khác 0.
  • để trung tâm duy trì thông lượng dữ liệu cho hai kết nối LE CoC tới 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 là 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 mình khi tính toán lượng thời gian cần thiết để nhận một khung hình.

Chúng tôi khuyên bạn nên hỗ trợ trung tâm và thiết bị ngoại vi 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ả 1M và 2M PHY. PHY tầm xa BLE sẽ không được sử dụng.

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

Dịch vụ ASHA GATT

Một thiết bị ngoại vi sẽ triển khai dịch vụ máy chủ GATT Truyền trực tuyến Âm thanh cho 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 trung tâm nhận ra âm thanh chìm. Mọi hoạt động phát trực tuyến âm thanh LE sẽ yêu cầu mã hóa. Phát trực tuyến âm thanh BLE bao gồm các đặc điểm sau:

Đặc tính Đặc tính Sự mô tả
ReadOnlyProperties Đọc Xem ReadOnlyProperties .
AudioControlPoint Viết và Viết mà không cần phản hồi Điểm kiểm soát luồng âm thanh. Xem 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. Các mã quang là:
  • 0 - Trạng thái OK
  • -1 - Lệnh không xác định
  • -2 - Tham số bất hợp pháp
Âm lượng Viết mà không có phản hồi Byte 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 được phát trực tuyến, 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 bị tắt tiếng thấp nhất là -127 tương đương với độ suy giảm -47,625 dB. Ở cài đặt 0, âm hình sin từ đường ray đến đường ray được phát trực tiếp sẽ đại diện cho đầu vào tương đương 100 dBSPL trên thiết bị trợ thính. Trung tâm phải phát trực tuyến ở quy mô đầy đủ danh định và sử dụng biến này để thiết lập mức trình bày mong muốn trong 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ừ dải động [BT Vol 3, Part A, Sec 4.22]

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

UUID dịch vụ : {0xFDF0}

Đặc tính UUID
ReadOnlyProperties {6333651e-c481-4a3e-9169-7c902aad37bb}
AudioControlPoint {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 phải 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.

ReadOnlyProperties

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

Byte Sự mô tả
0 Phiên bản - phải là 0x01
1 Xem Khả năng thiết bị .
2-9 Xem HiSyncId .
10 Xem Bản đồ tính năng .
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 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 để đồng bộ hóa với âm thanh.
13-14 Để dành mai sau dùng. Khởi tạo thành số không.
15-16 ID Codec được hỗ trợ. Đây là một bitmask của các ID codec được hỗ trợ. Vị trí 1 trong một bit tương ứng với một codec được hỗ trợ. Ví dụ: 0x0002 chỉ ra rằng G.722 ở 16 kHz được hỗ trợ. Tất cả các bit khác sẽ được đặt thành 0.

Khả năng thiết bị

Chút Sự mô tả
0 Mặt thiết bị (Trái: 0, Phải: 1).
1 Đơn nguyên (0) / Binaural (1). Cho biết thiết bị có độc lập và nhận dữ liệu đơn lẻ hay thiết bị là một phần của tập hợp.
2-7 Đã đặt trước (đặ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 cho bộ bên trái và bên phải.

Byte Sự mô tả
0-1 ID của nhà sản xuất. Đây 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 ở cả thiết bị ngoại vi bên trái và bên phải.

FeatureMap

Chút Sự 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).

ID Codec

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

Số ID / Bit Codec và tỷ lệ 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 đặt trước.
0 cũng được bảo lưu.

AudioControlPoint

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

Opcode Tranh luận Sự mô tả
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
Hướng dẫn thiết bị ngoại vi đặt lại codec và bắt đầu phát lại khung hình 0. Trường codec cho biết ID codec để 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
Trường cường điệu cho biết liệu 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 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ó Hướng dẫn thiết bị ngoại vi ngừng hiển thị âm thanh. Một 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
Thông báo cho thiết bị ngoại vi được 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 kia. Trường được kết nối cho biết loại cập nhật:
  • 0 - Đã ngắt kết nối thiết bị ngoại vi khác
  • 1 - Kết nối thiết bị ngoại vi khác
  • 2 - Cập nhật thông số kết nối LE xảy ra trên một trong hai kết nối

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 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ụ:

Byte bù đắp Tên Sự mô 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 (ít endian)

Lưu ý: Đây là ID tạm thời.
4 Phiên bản giao thức 0x01
5 Năng lực
  • 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-7 - dành riêng. Các bit này phải bằng không.
6-9 HiSyncID bị cắt ngắn Bốn byte ít 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 ID.

Các thiết bị ngoại vi phải có kiểu dữ liệu Tên địa phương hoàn chỉnh 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 sẽ không chỉ ra kênh bên trái hoặc bên phải vì thông tin này được cung cấp trong DeviceCapabilities .

Nếu các thiết bị ngoại vi đặt tên và kiểu dữ liệu dịch vụ ASHA trong cùng một kiểu khung (ADV hoặc SCAN RESP), thì hai kiểu dữ liệu ("Tên cục bộ 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 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 với tốc độ đủ nhanh để thiết bị di động nhanh chóng phát hiện ra các thiết bị ngoại vi và gắn kết với chúng.

Đồng bộ hóa các 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 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 một 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, 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 độ mẫu được cố định cho mỗi kết nối, 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 gói âm thanh .

Trung tâm hỗ trợ bằng cách cung cấp các bộ kích hoạt cho thiết bị hai tai khi quá trình đồng bộ hóa có thể cần diễn ra. Các bộ 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ó hoạt động có thể ảnh hưởng đến việc đồ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 được đưa ra.
  • Bất cứ khi nào có kết nối, ngắt kết nối hoặc thao tác cập nhật thông 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ị 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) thành các gói cho phép thiết bị nghe tính 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 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 kết nối là 20ms và tốc độ lấy mẫu là 16 kHz, thì khung âm thanh phải chứa 320 mẫu.
  • Tốc độ lấy mẫu trong hệ thống được giới hạn ở bội số của 8kHz để luôn có một số nguyên mẫu trong một khung hình bất kể thời gian khung hình hoặc khoảng thời gian kết nối.
  • Một byte trình tự sẽ thêm vào trước các khung âm thanh. Byte trình tự sẽ được đếm với sự quấn quanh và cho phép thiết bị ngoại vi phát hiện sự không khớp hoặc dòng chảy dưới bộ đệm.
  • Khung âm thanh phải luôn vừa với một gói LE duy nhất. 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)
  • Một 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 để ACK 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ó thể 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ố linh hoạt, độ 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 thiết lập.

Định dạng octet đầu ra G.722 tham chiếu đến 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 phải hỗ trợ các tham 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.

Codec 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 một 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. 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. Một 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 đợi 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ố chuỗi gói thành 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 phát trực tuyến. Sự chờ đợi này giúp thiết bị ngoại vi có thời gian chuẩn bị đường dẫn phát lại âm thanh của nó. 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 bên trong của nó (số thứ tự 0) và phát nó.

Trung tâm phát hành 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 sẵn sàng trong mọi sự kiện kết nối. Để khởi động lại luồng â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 phát trực tuyến âm thanh, nó 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 cấp bản cập nhật kết nối cho trung tâm. Để tiết kiệm điện, 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ị không phát trực tuyến âm thanh.