Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release
thay vì aosp-main
để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Độ trễ âm thanh dành cho nhà phát triển ứng dụng
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Để có độ trễ âm thanh thấp nhất có thể, bạn nên sử dụng Oboe.
Kèn oboe
Oboe sử dụng âm thanh gốc và được xây dựng trên AAudio cho Android 8.1 trở lên và OpenSL ES cho các phiên bản Android cũ. Để đạt được độ trễ thấp nhất có thể cho một thiết bị, hãy đặt setPerformanceMode(oboe::PerformanceMode::LowLatency)
và setSharingMode(oboe::SharingMode::Exclusive)
.
Hãy xem Hướng dẫn bắt đầu, README.md
và Hướng dẫn đầy đủ để biết thêm thông tin về Oboe. Hãy tham khảo ứng dụng Soundboard để biết một ứng dụng mẫu sử dụng Oboe.
Lưu ý: Nếu bạn sử dụng AudioTrack để tạo luồng âm thanh đầu ra trong Java cho các ứng dụng nhạy cảm với độ trễ, hãy sử dụng chế độ PERFORMANCE_MODE_LOW_LATENCY
.
Danh sách kiểm tra việc triển khai
Cách sử dụng âm thanh gốc của Android:
-
Tải và cài đặt Android NDK.
-
Làm theo Hướng dẫn bắt đầu sử dụng cho Oboe.
-
Gọi
setPerformanceMode(oboe::PerformanceMode::LowLatency)
và setSharingMode(oboe::SharingMode::Exclusive)
trên trình tạo Oboe.
-
Sử dụng kích thước bộ đệm gốc và tốc độ lấy mẫu được đề xuất do android.media.AudioManager.getProperty(java.lang.String) trả về.
Lưu ý: Bạn cũng nên sử dụng cùng một dung lượng bộ nhớ đệm và tốc độ lấy mẫu cho dữ liệu đầu vào.
-
Giữ cho trình xử lý gọi lại ngắn gọn, không sử dụng CPU theo kiểu bùng nổ hoặc chặn không giới hạn. Tránh đảo ngược mức độ ưu tiên.
-
Cân nhắc sử dụng các thuật toán không chặn để giao tiếp giữa trình xử lý gọi lại đầu vào và đầu ra, cũng như giữa trình xử lý gọi lại và phần còn lại của ứng dụng.
Tài nguyên khác
source.android.com
Trang web source.android.com chủ yếu được thiết kế cho các OEM xây dựng thiết bị Android và các nhà cung cấp SoC cung cấp thành phần cho các OEM này.
Tuy nhiên, trang web này có rất nhiều thông tin hữu ích về độ trễ, vì vậy, bạn nên xem xét trang web này. Xem các bài viết tại phần Độ trễ âm thanh.
android-ndk
Nếu có câu hỏi về cách sử dụng âm thanh gốc của Android, bạn có thể đặt câu hỏi tại nhóm thảo luận android-ndk.
Báo cáo lỗi trên Oboe
Nếu gặp vấn đề khi sử dụng Oboe, bạn có thể gửi lỗi.
Video
- Làm quen với Oboe
- Âm thanh có độ trễ thấp – Vì đôi tai của bạn xứng đáng được tận hưởng
- Hội nghị Nhà phát triển Android 2018.
- Thành công trên Android – Cách tối ưu hoá ứng dụng âm thanh trên Android
- Android Developer Challenge 2018.
- Âm thanh hiệu suất cao trên Android
(Google I/O 2013)
- Toàn bộ video nói về độ trễ.
- Tạo trải nghiệm đa phương tiện tuyệt vời trên Android
(Google I/O 2014)
- 14 phút đầu nói về âm thanh nói chung và độ trễ đầu vào nói riêng.
- Độ trễ âm thanh: kích thước bộ nhớ đệm
(100 ngày phát triển của Google)
- Mô tả mối quan hệ giữa độ trễ âm thanh, kích thước vùng đệm và việc lên lịch tác vụ.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-03-26 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-03-26 UTC."],[],[],null,["# Audio latency for app developers\n\nFor the lowest possible audio latency, we recommend you use [Oboe](https://developer.android.com/games/sdk/oboe).\n\nOboe\n----\n\n[Oboe](https://github.com/google/oboe) uses native audio and is built\non AAudio for Android 8.1+ and OpenSL ES for older versions of Android. To achieve the lowest\npossible latency for a device, set `setPerformanceMode(oboe::PerformanceMode::LowLatency)`\nand `setSharingMode(oboe::SharingMode::Exclusive)`.\nSee the [Getting started guide](https://github.com/google/oboe/blob/main/docs/GettingStarted.md),\n[`README.md`](https://github.com/google/oboe/blob/main/README.md),\nand [Full guide](https://github.com/google/oboe/blob/main/docs/FullGuide.md) for more\ninformation on Oboe. Refer to the [Soundboard app](https://github.com/google/oboe/tree/main/samples/SoundBoard)\nfor a sample app using Oboe.\n\n**Note:** If you use [AudioTrack](https://developer.android.com/reference/android/media/AudioTrack)\nfor creating output audio streams in Java for latency sensitive applications, use the [`PERFORMANCE_MODE_LOW_LATENCY`](https://developer.android.com/reference/android/media/AudioTrack#PERFORMANCE_MODE_LOW_LATENCY)\nmode.\n\n\u003cbr /\u003e\n\nImplementation checklist\n------------------------\n\nTo use Android native audio:\n\n1. Download and install the [Android NDK](https://developer.android.com/tools/sdk/ndk/index.html).\n2. Follow the [Getting started guide](https://github.com/google/oboe/blob/main/docs/GettingStarted.md) for Oboe.\n3. Call `setPerformanceMode(oboe::PerformanceMode::LowLatency)` and `setSharingMode(oboe::SharingMode::Exclusive)` on the Oboe builder.\n4. Use the recommended native buffer size and sample rate returned by [android.media.AudioManager.getProperty(java.lang.String)](http://developer.android.com/reference/android/media/AudioManager.html#getProperty(java.lang.String)).\n\n **Note:** The same buffer size and sample rate should also be used for input.\n5. Keep your callback handlers short, without bursty CPU usage or unbounded blocking. Avoid [priority inversion.](/docs/core/audio/avoiding_pi)\n6. Consider using [non-blocking algorithms](/docs/core/audio/avoiding_pi#nonBlockingAlgorithms) to communicate between input and output callback handlers, and between the callback handlers and the rest of your application.\n\nOther resources\n---------------\n\n### source.android.com\n\n\nThe site [source.android.com](/)\nis primarily designed for OEMs building Android\ndevices, and the SoC vendors who supply components to these OEMs.\n\n\nHowever, there is a wealth of useful information about latency at this site, so\nyou may want to review it. See the articles at\n[Audio latency.](/docs/core/audio/latency/latency)\n\n### android-ndk\n\n\nIf you have questions about how to use Android native audio, you can ask at the discussion group\n[android-ndk](https://groups.google.com/forum/#!forum/android-ndk).\n\n### Report bugs on Oboe\n\n\nIf you have issues using Oboe, you can\n[file a bug](https://github.com/google/oboe/issues).\n\n### Videos\n\n[Getting started with Oboe](https://www.youtube.com/playlist?list=PLWz5rJ2EKKc_duWv9IPNvx9YBudNMmLSa)\n[Low Latency Audio - Because Your Ears Are Worth It](https://www.youtube.com/watch?v=8vOf_fDtur4)\n: Android Dev Summit 2018.\n\n[Winning on Android - How to optimize an Android audio app](https://www.youtube.com/watch?v=tWBojmBpS74)\n: Android Developer Challenge 2018.\n\n[High performance audio on Android](https://youtu.be/d3kfEeMZ65c)\n(Google I/O 2013)\n: The whole video is about latency.\n\n[Building great multi-media experiences on Android](https://youtu.be/92fgcUNCHic)\n(Google I/O 2014)\n: The first 14 minutes are about audio in general and input latency in particular.\n\n[Audio latency: buffer sizes](https://youtu.be/PnDK17zP9BI)\n(100 Days of Google Dev)\n: Describes the relationship between audio latency, buffer sizes, and task scheduling."]]