Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Trước khi đọc bài viết này, bạn nên đọc bài viết trước: Âm thanh qua Bluetooth: chi tiết tối đa về cấu hình, codec và thiết bị

Một số người dùng tai nghe không dây cho biết chất lượng âm thanh kém và thiếu tần số cao khi sử dụng codec Bluetooth SBC tiêu chuẩn, được tất cả các thiết bị âm thanh hỗ trợ. Khuyến nghị chung để cải thiện âm thanh là mua thiết bị và tai nghe hỗ trợ codec aptX và LDAC. Các codec này yêu cầu phí cấp phép nên các thiết bị hỗ trợ chúng sẽ đắt hơn.

Hóa ra chất lượng thấp của SBC là do những hạn chế nhân tạo của ngăn xếp Bluetooth và cài đặt tai nghe, đồng thời hạn chế này có thể được khắc phục trên mọi thiết bị hiện có thông qua thay đổi phần mềm đối với điện thoại thông minh hoặc máy tính.

Codec SBC

Bộ giải mã SBC có nhiều tham số khác nhau được đàm phán trong giai đoạn thiết lập kết nối. Trong số đó:

  • Số lượng và loại kênh: Joint Stereo, Stereo, Dual Channel, Mono;
  • Số dải tần: 4 hoặc 8;
  • Số khối trong gói: 4, 8, 12, 16;
  • Thuật toán phân phối bit trong quá trình lượng tử hóa: Độ ồn, SNR;
  • Giá trị tối đa và tối thiểu của nhóm bit được sử dụng trong quá trình lượng tử hóa (bitpool): thường từ 2 đến 53.

Thiết bị giải mã phải hỗ trợ bất kỳ sự kết hợp nào của các thông số này. Bộ mã hóa có thể không thực hiện được mọi thứ.
Các ngăn xếp Bluetooth hiện tại thường đồng ý với cấu hình sau: Âm thanh nổi chung, 8 băng tần, 16 khối, Độ ồn, bitpool 2..53. Cấu hình này mã hóa âm thanh 44.1 kHz ở tốc độ bit 328 kbps.
Tham số bitpool ảnh hưởng trực tiếp đến tốc độ bit trong một cấu hình: tham số này càng cao thì tốc độ bit càng cao và do đó chất lượng càng cao.
Tuy nhiên, tham số bitpool không bị ràng buộc với một cấu hình cụ thể; Tốc độ bit cũng bị ảnh hưởng phần lớn bởi các thông số khác: loại kênh, số dải tần, số khối. Bạn có thể tăng tốc độ bit một cách gián tiếp bằng cách đồng ý với các cấu hình không chuẩn mà không thay đổi bitpool.

Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Công thức tính tốc độ bit SBC

Ví dụ: chế độ Kênh đôi mã hóa các kênh riêng biệt, sử dụng toàn bộ bitpool cho mỗi kênh. Bằng cách buộc thiết bị sử dụng Kênh đôi thay vì Âm thanh nổi chung, chúng tôi nhận được tốc độ bit gần như gấp đôi với cùng giá trị bitpool tối đa: 617 kbps.
Theo tôi, việc sử dụng giá trị bitpool không gắn với hồ sơ ở giai đoạn đàm phán là một lỗ hổng trong tiêu chuẩn A2DP, dẫn đến hạn chế giả tạo về chất lượng SBC. Sẽ có ý nghĩa hơn khi thương lượng tốc độ bit thay vì bitpool.

Các giá trị Bitpool và Bitrate cố định này bắt nguồn từ một bảng có các giá trị được đề xuất để sử dụng cho âm thanh chất lượng cao. Nhưng một khuyến nghị không phải là lý do để giới hạn bản thân bạn ở những giá trị này.

Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Thông số kỹ thuật A2DP v1.2, hoạt động từ năm 2007 đến 2015, yêu cầu tất cả các thiết bị giải mã phải hoạt động chính xác với tốc độ bit lên tới 512 kbps:

Bộ giải mã của SNK sẽ hỗ trợ tất cả các giá trị bitpool có thể không vượt quá tốc độ bit tối đa. Cấu hình này giới hạn tốc độ bit tối đa khả dụng ở mức 320kb/s đối với chế độ đơn âm và 512kb/s đối với chế độ hai kênh.

Trong phiên bản mới của thông số kỹ thuật không có giới hạn về tốc độ bit. Người ta ước tính rằng tai nghe hiện đại ra mắt sau năm 2015 hỗ trợ EDR có thể hỗ trợ tốc độ bit lên tới ≈730 kbps.

Vì lý do nào đó, các ngăn xếp Bluetooth Linux (PulseAudio), Android, Blackberry và macOS mà tôi đã thử nghiệm có các giới hạn nhân tạo đối với giá trị tối đa của tham số bitpool, điều này ảnh hưởng trực tiếp đến tốc độ bit tối đa. Nhưng đây không phải là vấn đề lớn nhất; hầu như tất cả các tai nghe đều giới hạn giá trị bitpool tối đa ở mức 53.
Như tôi đã thấy, hầu hết các thiết bị đều hoạt động hoàn hảo trên ngăn xếp Bluetooth đã được sửa đổi với tốc độ bit 551 kbps mà không bị gián đoạn hoặc nứt. Nhưng tốc độ bit như vậy sẽ không bao giờ nhất quán trong điều kiện bình thường, trên các ngăn xếp Bluetooth thông thường.

Sửa đổi ngăn xếp Bluetooth

Bất kỳ ngăn xếp Bluetooth nào tương thích với chuẩn A2DP đều hỗ trợ chế độ Kênh đôi, nhưng không thể kích hoạt chế độ này từ giao diện.

Hãy thêm một nút chuyển đổi vào giao diện! Tôi đã tạo các bản vá cho Android 8.1 và Android 9 để bổ sung hỗ trợ Kênh đôi đầy đủ cho ngăn xếp, thêm chế độ vào menu chuyển đổi chế độ trong công cụ dành cho nhà phát triển và xử lý các SBC hỗ trợ Kênh đôi như thể chúng là một codec bổ sung như aptX , AAC hoặc LDAC ( Android gọi đây là Âm thanh HD) bằng cách thêm dấu kiểm vào cài đặt thiết bị Bluetooth. Đây là những gì nó trông giống như:

Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Bản vá cho Android 9
Bản vá cho Android 8.1

Khi hộp kiểm được kích hoạt, âm thanh Bluetooth bắt đầu được truyền ở tốc độ bit 551 kbps, nếu tai nghe hỗ trợ tốc độ kết nối 3 Mbit/s, hoặc 452 kbps, nếu tai nghe chỉ hỗ trợ 2 Mbit/s.

Bản vá này được bao gồm trong các phần mềm thay thế sau:

  • LineageOS
  • Phục hồi Remix
  • cDroid

551 và 452 kbit/s đến từ đâu?

Công nghệ chia sẻ không khí Bluetooth được thiết kế để truyền tải hiệu quả các gói có kích thước cố định lớn. Truyền dữ liệu xảy ra theo các khe, số lượng khe lớn nhất được gửi trong một lần truyền là 5. Ngoài ra còn có các chế độ truyền sử dụng 1 hoặc 3 khe chứ không phải 2 hoặc 4. Trong 5 khe, bạn có thể truyền tối đa 679 byte với tốc độ kết nối là 2 Mbit/s và lên tới 1021 byte với tốc độ 3 Mbit/s và ở mức tương ứng là 3 - 367 và 552 byte.

Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Nếu chúng ta muốn truyền ít dữ liệu hơn 679 hoặc 1021 byte nhưng lớn hơn 367 hoặc 552 byte thì quá trình truyền vẫn sẽ chiếm 5 slot và dữ liệu sẽ được truyền cùng lúc, điều này làm giảm hiệu quả truyền.

Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

SBC ở chế độ Dual Channel, ở âm thanh 44100 Hz với thông số Bitpool 38, 16 khối trên mỗi khung hình, 8 dải tần, mã hóa âm thanh thành khung 164 byte, tốc độ bit 452 kbps.
Âm thanh phải được gói gọn trong các giao thức truyền L2CAP và AVDTP, lấy 16 byte từ tải trọng âm thanh.

Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Do đó, một đường truyền Bluetooth có 5 khe cắm có thể chứa 4 khung âm thanh:

679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (заголовок SBC) - (164*4) = 6

Chúng tôi đưa 11.7 ms dữ liệu âm thanh vào gói được gửi, gói này sẽ được truyền trong 3.75 ms và chúng tôi còn 6 byte chưa sử dụng trong gói.
Nếu bạn tăng bitpool lên một chút, sẽ không thể gói 4 khung âm thanh vào một gói được nữa. Bạn sẽ phải gửi 3 khung hình cùng lúc, điều này làm giảm hiệu quả truyền tải, giảm lượng âm thanh truyền trên mỗi khung hình và nhanh chóng dẫn đến hiện tượng giật âm thanh trong điều kiện sóng vô tuyến kém.

Theo cách tương tự, tốc độ bit 551 kbit/s đã được chọn cho EDR 3 Mbit/s: với Bitpool 47, 16 khối trên mỗi khung hình, 8 dải tần số, kích thước khung hình là 200 byte, với tốc độ bit là 551 kbit/s. Một gói chứa 5 khung hình hoặc 14.6 ms âm nhạc.

Thuật toán tính toán tất cả các tham số SBC khá phức tạp, bạn có thể dễ bị nhầm lẫn nếu đếm thủ công, vì vậy tôi đã tạo một máy tính tương tác để giúp những người quan tâm: btcodecs.valdikss.org.ru/sbc-bitrate-computer

Tại sao tất cả điều này là cần thiết?

Trái ngược với suy nghĩ phổ biến về chất lượng âm thanh của codec aptX, trên một số tệp, nó có thể tạo ra kết quả kém hơn SBC với tốc độ bit tiêu chuẩn là 328 kbps.

SBC phân bổ động các bit lượng tử hóa cho các dải tần trên cơ sở từ thấp đến cao. Nếu tất cả tốc độ bit được sử dụng cho tần số thấp và trung bình thì tần số cao sẽ bị “cắt” (thay vào đó sẽ có khoảng im lặng).
aptX luôn lượng tử hóa các dải tần có cùng số bit, đó là lý do tại sao nó có tốc độ bit không đổi: 352 kbps cho 44.1 kHz, 384 kbps cho 48 kHz và không thể “dịch chuyển bit” sang những tần số cần chúng nhất . Không giống như SBC, aptX sẽ không “cắt” tần số mà sẽ thêm nhiễu lượng tử hóa vào chúng, làm giảm dải động của âm thanh và đôi khi tạo ra tiếng tanh tách đặc trưng. SBC “ăn chi tiết” - loại bỏ những khu vực yên tĩnh nhất.
Trung bình, so với SBC 328k, aptX ít biến dạng hơn trong âm nhạc có dải tần rộng, nhưng trong âm nhạc có dải tần hẹp và dải động rộng, SBC 328k đôi khi lại thắng.

Hãy xem xét một trường hợp đặc biệt. Quang phổ của bản ghi âm chơi đàn piano:
Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Năng lượng chính nằm ở tần số từ 0 đến 4 kHz và tiếp tục lên đến 10 kHz.
Biểu đồ phổ của tệp được nén trong aptX trông như thế này:
Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Và đây là giao diện của SBC 328k.
Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Có thể thấy, SBC 328k định kỳ tắt hoàn toàn dải tần trên 16 kHz và dành toàn bộ tốc độ bit có sẵn cho các dải dưới giá trị này. Tuy nhiên, aptX đã tạo ra nhiều biến dạng hơn trong phổ tần số mà tai người có thể nghe được, như có thể thấy trong biểu đồ phổ ban đầu bị trừ khỏi biểu đồ phổ aptX (càng sáng, càng biến dạng):
Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Trong khi SBC 328k làm hỏng tín hiệu ít hơn trong phạm vi từ 0 đến 10 kHz và cắt phần còn lại:
Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Tốc độ bit 485k của SBC đủ để duy trì toàn bộ dải tần mà không vô hiệu hóa các băng tần.
Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

SBC 485k vượt trội đáng kể so với aptX trên rãnh này ở dải 0-15 kHz, với mức chênh lệch nhỏ hơn nhưng vẫn đáng chú ý là 15-22 kHz (càng tối thì độ méo càng ít):
Sửa đổi ngăn xếp Bluetooth để cải thiện âm thanh trên tai nghe không có codec AAC, aptX và LDAC

Lưu trữ âm thanh gốc, SBC và aptX.

Bằng cách chuyển sang SBC tốc độ bit cao, bạn sẽ có được âm thanh thường đánh bại aptX trên mọi tai nghe. Trên tai nghe hỗ trợ kết nối EDR 3 Mbps, tốc độ bit 551 kbps tạo ra âm thanh tương đương với aptX HD.

Bạn có thể làm nhiều hơn nữa?

Bản vá Android cũng bao gồm tùy chọn tăng thêm tốc độ bit cho các thiết bị EDR 2 Mbps. Bạn có thể tăng tốc độ bit từ 452 kbit/s lên 595 kbit/s, nhưng phải trả giá bằng việc giảm độ ổn định truyền trong các điều kiện vô tuyến khó khăn.
Chỉ cần đặt biến Persist.bluetooth.sbc_hd_higher_bitrate thành 1 là đủ:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Bản vá tốc độ bit cực cao cho đến nay chỉ được áp dụng trong LineageOS 15.1 chứ không phải trong 16.0.

Khả năng tương thích của thiết bị

SBC Dual Channel được hầu hết các tai nghe, loa và thiết bị đầu xe hơi hỗ trợ. Điều này không có gì lạ - tiêu chuẩn này yêu cầu sự hỗ trợ của nó trong bất kỳ thiết bị giải mã nào. Có một số ít thiết bị mà chế độ này gây ra sự cố, nhưng đây là những trường hợp riêng lẻ.
Bạn có thể tìm thêm thông tin chi tiết về các thiết bị tương thích tại 4pda hoặc xda-phát triển.

So sánh sự khác biệt về âm thanh

Tôi đã tạo một dịch vụ web mã hóa âm thanh thành SBC (cũng như aptX và aptX HD) trong thời gian thực, ngay trong trình duyệt. Với nó, bạn có thể so sánh âm thanh của các cấu hình SBC khác nhau và các codec khác mà không thực sự truyền âm thanh qua Bluetooth, trên bất kỳ tai nghe, loa có dây và bản nhạc yêu thích nào của bạn, đồng thời cũng có thể thay đổi trực tiếp các thông số mã hóa trong khi phát âm thanh.
btcodecs.valdikss.org.ru/sbc-encoding

Liên hệ với nhà phát triển Android

Tôi đã viết thư cho nhiều nhà phát triển ngăn xếp Bluetooth tại Google để yêu cầu họ xem xét đưa các bản vá vào nhánh Android chính - AOSP, nhưng không nhận được một phản hồi nào. Các bản vá của tôi trong Hệ thống vá lỗi Gerrit cho Android cũng không có bình luận từ bất kỳ ai liên quan.
Tôi sẽ rất vui nếu có thể nhận được sự trợ giúp nào đó trong việc liên hệ với các nhà phát triển tại Google và đưa SBC HD lên Android. Bản vá trong gerrit đã lỗi thời (đây là một trong những bản sửa đổi đầu tiên) và tôi sẽ cập nhật nó nếu các nhà phát triển quan tâm đến những thay đổi của tôi (tôi không dễ dàng cập nhật nó, tôi không có thiết bị tương thích với Android Q ).

Kết luận

Người dùng điện thoại thông minh có phần mềm LineageOS, Resurrection Remix và crDroid có thể tận hưởng chất lượng âm thanh được cải thiện ngay bây giờ, chỉ cần kích hoạt tùy chọn trong cài đặt thiết bị Bluetooth. Người dùng Linux cũng có thể tăng tốc độ bit SBC bằng cách cài đặt bản vá từ Pali Rohar, trong số những thứ khác, bổ sung hỗ trợ cho codec aptX, aptX HD và FastStream.

Nguồn: www.habr.com

Thêm một lời nhận xét