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.
Làm nóng âm thanh
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.
Làm ấm âm thanh là thời gian cần thiết để mạch khuếch đại âm thanh trong thiết bị của bạn được cấp nguồn đầy đủ và đạt trạng thái hoạt động bình thường. Các yếu tố chính góp phần vào thời gian khởi động âm thanh là tính năng quản lý nguồn và mọi logic "loại bỏ tiếng ồn" để ổn định mạch.
Tài liệu này mô tả cách đo lường thời gian khởi động âm thanh và các cách có thể giảm thời gian khởi động.
Đo lường thời gian khởi động đầu ra
Luồng FastMixer của AudioFlinger tự động đo lường quá trình khởi động đầu ra và báo cáo quá trình này như một phần của đầu ra của lệnh dumpsys media.audio_flinger
.
Khi khởi động, FastMixer gọi write()
nhiều lần cho đến khi thời gian giữa hai write()
là lượng dự kiến.
FastMixer xác định quá trình khởi động âm thanh bằng cách xem thời gian cần thiết để write()
Lớp trừu tượng phần cứng (HAL) ổn định.
Để đo lường quá trình khởi động âm thanh, hãy làm theo các bước sau cho loa tích hợp và tai nghe có dây cũng như tại nhiều thời điểm sau khi khởi động. Thời gian khởi động thường khác nhau đối với từng thiết bị đầu ra và ngay sau khi khởi động thiết bị:
- Đảm bảo bạn đã bật FastMixer.
- Bật âm thanh chạm bằng cách chọn Cài đặt > Âm thanh > Âm thanh chạm trên thiết bị.
- Đảm bảo rằng âm thanh đã tắt ít nhất 3 giây. Bạn nên chọn thời gian từ 5 giây trở lên vì chính phần cứng có thể có logic nguồn riêng ngoài 3 giây mà AudioFlinger có.
- Nhấn vào nút Màn hình chính và bạn sẽ nghe thấy tiếng nhấp.
- Chạy lệnh sau để nhận thời gian khởi động được đo lường:
adb shell dumpsys media.audio_flinger | grep measuredWarmup
Bạn sẽ thấy kết quả như sau:
sampleRate=44100 frameCount=256 measuredWarmup=X ms, warmupCycles=X
measuredWarmup=X
là số mili giây X cần thiết để hoàn tất nhóm write()
HAL đầu tiên.
warmupCycles=X
là số lượng yêu cầu ghi HAL cần thiết cho đến khi thời gian thực thi của write()
khớp với dự kiến.
-
Đo 5 lần và ghi lại tất cả các lần đo cũng như giá trị trung bình.
Nếu không phải tất cả các giá trị đều gần như giống nhau, thì có thể một giá trị đo lường không chính xác.
Ví dụ: nếu không đợi đủ lâu sau khi tắt âm thanh, bạn sẽ thấy thời gian khởi động thấp hơn giá trị trung bình.
Hiện không có công cụ nào được cung cấp để đo lường thời gian khởi động đầu vào âm thanh.
Tuy nhiên, bạn có thể ước tính thời gian khởi động đầu vào bằng cách quan sát thời gian cần thiết để startRecording() trả về.
Giảm thời gian khởi động
Bạn thường có thể giảm thời gian khởi động bằng cách kết hợp:
- Thiết kế mạch tốt
- Độ trễ thời gian chính xác trong trình điều khiển thiết bị hạt nhân
- Thực hiện các thao tác khởi động độc lập đồng thời thay vì tuần tự
- Để mạch ở trạng thái bật nguồn hoặc không định cấu hình lại đồng hồ (tăng mức tiêu thụ điện năng ở trạng thái rảnh)
- Lưu các tham số đã tính toán vào bộ nhớ đệm
Tuy nhiên, hãy cẩn thận với việc tối ưu hoá quá mức. Bạn có thể thấy rằng mình cần phải đánh đổi giữa thời gian khởi động thấp so với việc không có hiện tượng nhấp nháy khi chuyển đổi nguồn.
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 warmup is the time it takes for the audio amplifier circuit in your device to\nbe fully powered and reach its normal operation state. The major contributors\nto audio warmup time are power management and any \"de-pop\" logic to stabilize\nthe circuit.\n\nThis document describes how to measure audio warmup time and possible ways to decrease\nwarmup time.\n\nMeasure output warmup\n---------------------\n\n\nAudioFlinger's FastMixer thread automatically measures output warmup\nand reports it as part of the output of the `dumpsys media.audio_flinger` command.\nAt warmup, FastMixer calls `write()`\nrepeatedly until the time between two `write()`s is the amount expected.\nFastMixer determines audio warmup by seeing how long a Hardware Abstraction\nLayer (HAL) `write()` takes to stabilize.\n\nTo measure audio warmup, follow these steps for the built-in speaker and wired headphones\nand at different times after booting. Warmup times are usually different for each output device\nand right after booting the device:\n\n1. Ensure that FastMixer is enabled.\n2. Enable touch sounds by selecting **Settings \\\u003e Sound \\\u003e Touch sounds** on the device.\n3. Ensure that audio has been off for at least three seconds. Five seconds or more is better, because the hardware itself might have its own power logic beyond the three seconds that AudioFlinger has.\n4. Press Home, and you should hear a click sound.\n5. Run the following command to receive the measured warmup: \n\n ```\n adb shell dumpsys media.audio_flinger | grep measuredWarmup\n ```\n\n\n You should see output like this: \n\n ```\n sampleRate=44100 frameCount=256 measuredWarmup=X ms, warmupCycles=X\n ```\n\n\n The `measuredWarmup=X` is X number of milliseconds\n it took for the first set of HAL `write()`s to complete.\n\n\n The `warmupCycles=X` is how many HAL write requests it took\n until the execution time of `write()` matches what is expected.\n6. Take five measurements and record them all, as well as the mean. If they are not all approximately the same, then it's likely that a measurement is incorrect. For example, if you don't wait long enough after the audio has been off, you will see a lower warmup time than the mean value.\n\nMeasure input warmup\n--------------------\n\n\nThere are currently no tools provided for measuring audio input warmup.\nHowever, input warmup time can be estimated by observing\nthe time required for [startRecording()](http://developer.android.com/reference/android/media/AudioRecord.html#startRecording())\nto return.\n\nReduce warmup time\n------------------\n\n\nWarmup time can usually be reduced by a combination of:\n\n- Good circuit design\n- Accurate time delays in kernel device driver\n- Performing independent warmup operations concurrently rather than sequentially\n- Leaving circuits powered on or not reconfiguring clocks (increases idle power consumption)\n- Caching computed parameters\n\n\nHowever, beware of excessive optimization. You may find that you\nneed to tradeoff between low warmup time versus\nlack of popping at power transitions."]]