Dukungan audio alat bantu dengar menggunakan Bluetooth LE

Perangkat alat bantu dengar (HA) dapat memiliki aksesibilitas yang lebih baik di perangkat seluler yang didukung Android dengan menggunakan saluran L2CAP berorientasi koneksi (CoC) melalui Bluetooth Hemat Energi (BLE). CoC menggunakan buffer elastis dari beberapa paket audio untuk mempertahankan aliran audio yang stabil, bahkan jika ada paket yang hilang. Buffer ini memberikan kualitas audio untuk perangkat alat bantu dengar dengan mengorbankan latensi.

Desain CoC mereferensikan Spesifikasi Inti Bluetooth Versi 5 (BT). Agar tetap selaras dengan spesifikasi inti, semua nilai multi-byte di halaman ini akan dibaca sebagai little-endian.

Terminologi

  • Central - perangkat Android yang memindai iklan melalui Bluetooth.
  • Periferal - alat bantu dengar yang mengirim paket iklan melalui Bluetooth.

Topologi jaringan dan arsitektur sistem

Saat menggunakan CoC untuk alat bantu dengar, topologi jaringan mengasumsikan satu pusat dan dua periferal, satu kiri dan satu kanan, seperti yang terlihat dalam Gambar 1. Sistem audio Bluetooth melihat periferal kiri dan kanan sebagai satu sink audio. Jika periferal hilang, karena kecocokan monaural atau hilangnya koneksi, maka pusat akan memadukan saluran audio kiri dan kanan serta mengirimkan audio ke periferal yang tersisa. Jika pusat kehilangan koneksi ke kedua periferal, pusat akan menganggap link ke sink audio hilang. Dalam kasus tersebut, pusat merutekan audio ke output lain.


Gambar 1. Topologi untuk menyambungkan alat bantu dengar dengan perangkat seluler Android menggunakan CoC melalui BLE

Jika pusat tidak melakukan streaming data audio ke periferal dan dapat mempertahankan koneksi BLE, pusat tidak boleh terputus dari periferal. Mempertahankan koneksi memungkinkan komunikasi data ke server GATT yang berada di periferal.

Saat menyambungkan dan menghubungkan alat bantu dengar, pusat harus:

  • Melacak periferal kiri dan kanan terbaru yang disambungkan.
  • Asumsikan periferal sedang digunakan jika ada penyambungan yang valid. Unit pusat akan mencoba terhubung atau terhubung kembali dengan perangkat yang disambungkan saat koneksi terputus.
  • Asumsikan periferal tidak lagi digunakan jika penyambungan dihapus.

Dalam kasus di atas, penyambungan mengacu pada tindakan mendaftarkan serangkaian alat bantu dengar dengan UUID tertentu dan penunjuk kiri/kanan di OS, bukan proses penyambungan Bluetooth.

Persyaratan sistem

Untuk menerapkan CoC dengan benar guna memberikan pengalaman pengguna yang baik, sistem Bluetooth di perangkat pusat dan periferal harus:

  • menerapkan pengontrol BT 4.2 yang sesuai atau yang lebih tinggi. Koneksi Aman LE sangat direkomendasikan.
  • memiliki dukungan pusat minimal 2 link LE serentak dengan parameter seperti yang dijelaskan dalam Format dan waktu paket audio.
  • memiliki dukungan periferal minimal 1 link LE dengan parameter yang dijelaskan dalam Format dan waktu paket audio.
  • memiliki kontrol alur berbasis kredit LE [BT Vol 3, Bagian A, Sec 10.1]. Perangkat harus mendukung ukuran MTU dan MPS minimal 167 byte di CoC dan dapat melakukan buffering hingga 8 paket.
  • memiliki ekstensi panjang data LE [BT Vol 6, Part B, Sec 5.1.9] dengan payload minimal 167 byte.
  • minta perangkat pusat mendukung Perintah Pembaruan Koneksi HCI LE dan mematuhi parameter maximum_CE_Length dan minimum_CE_Length yang bukan nol.
  • minta pusat untuk mempertahankan throughput data untuk dua koneksi CoC LE ke dua periferal yang berbeda dengan interval koneksi dan ukuran payload dalam Format dan waktu paket audio.
  • meminta periferal menetapkan parameter MaxRxOctets dan MaxRxTime dalam frame LL_LENGTH_REQ atau LL_LENGTH_RSP menjadi nilai minimum yang diperlukan yang diperlukan untuk spesifikasi ini. Hal ini memungkinkan pusat mengoptimalkan penjadwal waktunya saat menghitung jumlah waktu yang diperlukan untuk menerima frame.

Sebaiknya bagian pusat dan periferal mendukung PHY 2 MB seperti yang ditentukan dalam spesifikasi BT 5.0. Pusat harus mendukung link audio minimal 64 kbit/s pada PHY 1M dan 2M. PHY jarak jauh BLE tidak boleh digunakan.

CoC menggunakan mekanisme Bluetooth standar untuk enkripsi lapisan link dan frekuensi hopping.

Layanan GATT ASHA

Periferal harus menerapkan layanan server GATT Streaming Audio untuk Alat Bantu Pendengaran (ASHA) yang dijelaskan di bawah. Periferal harus mengiklankan layanan ini saat dalam mode yang dapat ditemukan secara umum untuk memungkinkan pusat mengenali sink audio. Setiap operasi streaming audio LE akan memerlukan enkripsi. Streaming audio BLE terdiri dari karakteristik berikut:

Karakteristik Properti Deskripsi
ReadOnlyProperties Dibaca Lihat ReadOnlyProperties.
AudioControlPoint Tulis dan Tulis tanpa Respons Titik kontrol untuk streaming audio. Lihat AudioControlPoint.
AudioStatusPoint Baca/Beri tahu Kolom laporan status untuk titik kontrol audio. Lihat AudioStatusPoint.
Volume Menulis tanpa Respons Byte antara -128 dan 0 yang menunjukkan jumlah atenuasi yang akan diterapkan ke sinyal audio yang di-streaming, mulai dari -48 dB hingga 0 dB. Setelan -128 akan ditafsirkan sebagai dibisukan sepenuhnya, yaitu tingkat volume non-bisukan terendah adalah -127 yang setara dengan atenuasi -47,625 dB. Pada setelan 0, nada sinus rail-to-rail yang di-streaming akan mewakili input 100 dBSPL yang setara pada alat bantu dengar. Bagian tengah akan melakukan streaming dalam skala penuh nominal dan menggunakan variabel ini untuk menetapkan tingkat presentasi yang diinginkan di periferal.
LE_PSM_OUT Dibaca PSM yang akan digunakan untuk menghubungkan saluran audio. Untuk dipilih dari rentang dinamis [BT Vol 3, Part A, Sec 4.22]

UUID yang ditetapkan ke layanan dan karakteristik:

UUID Layanan: {0xFDF0}

Karakteristik 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}

Selain layanan GATT ASHA, periferal juga harus menerapkan Layanan Informasi Perangkat untuk memungkinkan pusat mendeteksi nama produsen dan nama perangkat periferal.

ReadOnlyProperties

ReadOnlyProperties memiliki nilai berikut:

Byte Deskripsi
0 Versi - harus 0x01
1 Lihat DeviceCapabilities.
2-9 Lihat HiSyncId.
10 Lihat FeatureMap.
11-12 RenderDelay. Ini adalah waktu, dalam milidetik, sejak periferal menerima frame audio hingga periferal merender output. Byte ini dapat digunakan untuk menunda video agar disinkronkan dengan audio.
13-14 Disimpan untuk penggunaan di masa mendatang. Melakukan inisialisasi ke nol.
15-16 ID Codec yang didukung. Ini adalah bitmask ID codec yang didukung. 1 di lokasi bit sesuai dengan codec yang didukung. Misalnya, 0x0002 menunjukkan bahwa G.722 pada 16 kHz didukung. Semua bit lainnya akan ditetapkan ke 0.

DeviceCapabilities

Bit Deskripsi
0 Sisi perangkat (0: kiri, 1: kanan)
1 Menunjukkan apakah perangkat bersifat mandiri dan menerima data mono, atau apakah perangkat merupakan bagian dari kumpulan (0: monaural, 1: binaural)
2 Perangkat mendukung CSIS (0: tidak didukung, 1: didukung)
3-7 Dicadangkan (ditetapkan ke 0)

HiSyncID

Kolom ini harus unik untuk semua perangkat binaural, tetapi harus sama untuk set kiri dan kanan.

Byte Deskripsi
0-1 ID produsen. Ini adalah ID Perusahaan yang ditetapkan oleh BTSIG.
2-7 ID unik yang mengidentifikasi perangkat alat bantu dengar. ID ini harus ditetapkan ke yang sama di periferal kiri dan kanan.

FeatureMap

Bit Deskripsi
0 Streaming output audio CoC LE didukung (Ya/Tidak).
1-7 Dicadangkan (ditetapkan ke 0).

ID Codec

Jika bit ditetapkan, codec tertentu tersebut didukung.

ID / Nomor bit Codec dan frekuensi sampel Kecepatan bit yang diperlukan Waktu render frame Wajib di pusat (C) atau periferal (P)
0 Sudah diperuntukkan Sudah diperuntukkan Sudah diperuntukkan Sudah diperuntukkan
1 G.722 @ 16 kHz 64 kbit/dtk Variabel C dan P
2-15 dicadangkan.
0 juga dicadangkan.

AudioControlPoint

Titik kontrol ini tidak dapat digunakan saat CoC LE ditutup. Lihat Memulai dan menghentikan streaming audio untuk mengetahui deskripsi prosedur.

Opcode Argumen Sub-prosedur GATT Deskripsi
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
Tulis dengan respons, dan harapkan notifikasi status tambahan melalui karakteristik AudioStatusPoint. Memberi petunjuk ke periferal untuk mereset codec dan memulai pemutaran frame 0. Kolom codec menunjukkan ID codec yang akan digunakan untuk pemutaran ini. Misalnya, kolom codec adalah "1" untuk G.722 pada 16k Hz.

Bidang bit jenis audio menunjukkan jenis audio yang ada dalam streaming:
  • 0 - Tidak diketahui
  • 1 - Nada dering
  • 2 - Panggilan telepon
  • 3 - Media
Bidang otherstate menunjukkan apakah sisi lain perangkat binaural terhubung. Nilai kolom adalah 1 jika perangkat periferal lainnya terhubung, jika tidak, nilainya adalah 0.

Periferal tidak boleh meminta update koneksi sebelum opcode «Stop» diterima.
2 «Stop» Tidak ada Tulis dengan respons, dan harapkan notifikasi status tambahan melalui karakteristik AudioStatusPoint. Memberi petunjuk ke periferal untuk berhenti merender audio. Urutan penyiapan audio baru harus dimulai setelah penghentian ini agar dapat merender audio lagi.
3 «Status»
  • uint8_t connected
Menulis tanpa respons Memberi tahu periferal yang terhubung bahwa ada pembaruan status pada periferal lainnya. Kolom yang terhubung menunjukkan jenis pembaruan:
  • 0 - Periferal lainnya terputus
  • 1 - Periferal lainnya terhubung
  • 2 - Pembaruan Parameter Koneksi LE terjadi pada salah satu koneksi

AudioStatusPoint

Kolom laporan status untuk titik kontrol audio

Opcode Deskripsi
0 Status Oke
-1 Perintah tidak diketahui
-2 Parameter ilegal

Iklan untuk layanan GATT ASHA

UUID layanan harus ada dalam paket iklan. Dalam frame respons iklan atau pemindaian, periferal harus memiliki Data Layanan:

Offset byte Nama Deskripsi
0 Durasi Iklan >= 0x09
1 Jenis Iklan 0x16 (Data Layanan - UUID 16-bit)
2-3 UUID Layanan 0xFDF0 (little-endian)

Catatan: Ini adalah ID sementara.
4 Versi Protokol 0x01
5 Kemampuan
  • 0 - sisi kiri (0) atau kanan (1)
  • 1 - perangkat tunggal (0) atau ganda (1).
  • 2 - perangkat mendukung CSIS (<0: tidak didukung, 1: didukung)
  • 3-7 - dicadangkan. Bit ini harus nol.
6-9 HiSyncID yang terpotong Empat byte yang paling signifikan dari HiSyncId. Byte ini harus menjadi bagian ID yang paling acak.

Periferal harus memiliki jenis data Complete Local Name yang menunjukkan nama alat bantu dengar. Nama ini akan digunakan di antarmuka pengguna perangkat seluler sehingga pengguna dapat memilih perangkat yang tepat. Nama tidak boleh menunjukkan saluran kiri atau kanan karena informasi ini diberikan di DeviceCapabilities.

Jika periferal menempatkan nama dan jenis data layanan ASHA dalam jenis frame yang sama (ADV atau SCAN RESP), maka kedua jenis data ("Complete Local Name" dan "Service Data for ASHA service") akan muncul dalam frame yang sama. Hal ini memungkinkan pemindai perangkat seluler mendapatkan kedua data dalam hasil pemindaian yang sama.

Selama penyambungan awal, periferal harus beriklan dengan kecepatan yang cukup cepat agar perangkat seluler dapat menemukan periferal dengan cepat dan terhubung ke periferal tersebut.

Menyinkronkan perangkat periferal kiri dan kanan

Agar dapat berfungsi dengan Bluetooth di perangkat seluler Android, perangkat periferal bertanggung jawab untuk memastikan bahwa perangkat tersebut disinkronkan. Pemutaran di perangkat periferal kiri dan kanan harus disinkronkan secara bersamaan. Kedua perangkat periferal harus memutar sampel audio dari sumber secara bersamaan.

Perangkat periferal dapat menyinkronkan waktunya menggunakan nomor urutan yang ditambahkan ke setiap paket payload audio. Bagian tengah menjamin bahwa paket audio yang dimaksudkan untuk diputar secara bersamaan di setiap periferal memiliki nomor urutan yang sama. Nomor urutan bertambah satu setelah setiap paket audio. Setiap nomor urutan memiliki panjang 8-bit, sehingga nomor urutan akan berulang setelah 256 paket audio. Karena setiap ukuran paket audio dan frekuensi sampel ditetapkan untuk setiap koneksi, kedua periferal dapat menyimpulkan waktu pemutaran relatif. Untuk mengetahui informasi selengkapnya tentang paket audio, lihat Format dan pengaturan waktu paket audio.

Pusat membantu dengan memberikan pemicu ke perangkat binaural saat sinkronisasi mungkin perlu dilakukan. Pemicu ini memberi tahu setiap periferal tentang status perangkat periferal yang disambungkan setiap kali ada operasi yang dapat memengaruhi sinkronisasi. Pemicunya adalah:

  • Sebagai bagian dari perintah «Start» AudioControlPoint, status koneksi saat ini dari sisi lain perangkat binaural diberikan.
  • Setiap kali ada operasi koneksi, pemutusan koneksi, atau pembaruan parameter koneksi di satu periferal, perintah «Status» AudioControlPoint akan dikirim ke sisi lain perangkat binaural.

Format dan pengaturan waktu paket audio

Dengan memaketkan frame audio (blok sampel) ke dalam paket, alat pendengaran dapat memperoleh pengaturan waktu dari anchor pengaturan waktu lapisan link. Untuk menyederhanakan penerapan:

  • Frame audio harus selalu cocok dengan interval koneksi dalam waktu. Misalnya, jika interval koneksi adalah 20 md dan frekuensi sampel adalah 16 kHz, frame audio akan berisi 320 sampel.
  • Frekuensi sampel dalam sistem dibatasi hingga kelipatan 8 kHz agar selalu memiliki jumlah sampel bilangan bulat dalam frame, terlepas dari waktu frame atau interval koneksi.
  • Byte urutan harus ditambahkan di awal frame audio. Byte urutan akan dihitung dengan penggabungan dan memungkinkan periferal mendeteksi ketidakcocokan buffer atau underflow.
  • Frame audio harus selalu sesuai dengan satu paket LE. Frame audio akan dikirim sebagai paket L2CAP terpisah. Ukuran PDU LL LE harus:
    ukuran payload audio + 1 (penghitung urutan) + 6 (4 untuk header L2CAP, 2 untuk SDU)
  • Peristiwa koneksi harus selalu cukup besar untuk memuat 2 paket audio dan 2 paket kosong untuk ACK guna mencadangkan bandwidth untuk pengiriman ulang. Perhatikan bahwa paket audio dapat terfragmentasi oleh pengontrol Bluetooth pusat. Periferal harus dapat menerima lebih dari 2 paket audio yang terfragmentasi per peristiwa koneksi.

Untuk memberikan fleksibilitas pada pusat, panjang paket G.722 tidak ditentukan. Panjang paket G.722 dapat berubah berdasarkan interval koneksi yang ditetapkan pusat.

Format octet output G.722 mereferensikan Rec. ITU-T G.722 (09/2012) bagian 1.4.4 "Multiplekser"

Untuk semua codec yang didukung periferal, periferal harus mendukung parameter koneksi di bawah. Ini adalah daftar tidak lengkap konfigurasi yang dapat diterapkan oleh pusat.

Codec Bitrate Interval koneksi Panjang CE (PHY 1M/2M) Ukuran payload audio
G.722 @ 16 kHz 64 kbit/dtk 20 md 5.000/3.750 s 160 byte

Memulai dan menghentikan streaming audio

Sebelum memulai streaming audio, pusat akan mengkueri periferal dan membuat codec denominator umum. Penyiapan streaming kemudian dilanjutkan melalui urutan berikut:

  1. PSM, dan secara opsional, RenderDelay dibaca. Nilai ini dapat di-cache oleh pusat.
  2. Saluran L2CAP CoC dibuka – periferal akan memberikan 8 kredit pada awalnya.
  3. Pembaruan koneksi dikeluarkan untuk mengalihkan link ke parameter yang diperlukan untuk codec yang dipilih. Pusat dapat melakukan pembaruan koneksi ini sebelum koneksi CoC di langkah sebelumnya.
  4. Host pusat dan periferal menunggu peristiwa update selesai.
  5. Mulai ulang encoder audio, dan reset jumlah urutan paket ke 0. Perintah «Start» dengan parameter yang relevan dikeluarkan di AudioControlPoint. Pusat menunggu notifikasi status yang berhasil dari perintah «Start» sebelumnya dari periferal sebelum melakukan streaming. Penantian ini memberi periferal waktu untuk menyiapkan pipeline pemutaran audionya. Selama streaming audio, replika harus tersedia di setiap peristiwa koneksi meskipun latensi replika saat ini mungkin bukan nol.
  6. Periferal mengambil paket audio pertama dari antrean internalnya (nomor urutan 0) dan memutarnya.

Pusat mengeluarkan perintah «Stop» untuk menutup streaming audio. Setelah perintah ini, periferal tidak perlu tersedia di setiap peristiwa koneksi. Untuk memulai ulang streaming audio, lakukan urutan di atas, mulai dari langkah 5. Saat tidak melakukan streaming audio, pusat harus tetap mempertahankan koneksi LE untuk layanan GATT.

Periferal tidak boleh mengeluarkan pembaruan koneksi ke pusat. Untuk menghemat daya, pusat dapat mengeluarkan update koneksi ke periferal saat tidak melakukan streaming audio.