החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
התחממות האודיו
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
זמן החימום של האודיו הוא הזמן שלוקח למעגל מגבר האודיו במכשיר לקבל חשמל במלואו ולהגיע למצב הפעולה הרגיל שלו. הגורמים העיקריים לזמן החימום של האודיו הם ניהול צריכת החשמל וכל לוגיקה של 'ביטול רעשי פופ' כדי לייצב את המעגל.
במסמך הזה נסביר איך למדוד את זמן החימום של האודיו ואת הדרכים האפשריות לקצר את זמן החימום.
מדידת התחממות הפלט
חוט FastMixer של AudioFlinger מודד באופן אוטומטי את החימום של הפלט ומדווח עליו כחלק מהפלט של הפקודה dumpsys media.audio_flinger
.
בתקופת החימום, FastMixer קורא ל-write()
berulang kali שוב ושוב עד שהזמן בין שתי קריאות ל-write()
הוא הערך הצפוי.
FastMixer קובע את תקופת החימום של האודיו על סמך משך הזמן שלוקח לשכבת ההפשטה של החומרה (HAL) write()
להגיע ליציבות.
כדי למדוד את הזמן של ההתחממות האודיו, צריך לפעול לפי השלבים הבאים עבור הרמקול המובנה והאוזניות החוטיות, ובזמנים שונים אחרי ההפעלה. בדרך כלל, זמני החימום שונים בכל מכשיר פלט, וגם מיד אחרי הפעלת המכשיר:
- מוודאים ש-FastMixer מופעל.
- כדי להפעיל את צלילי המגע, בוחרים באפשרות הגדרות > קול ושמע > צלילי מגע במכשיר.
- מוודאים שהאודיו מושבת במשך שלוש שניות לפחות. עדיף להגדיר 5 שניות או יותר, כי לחומרה עצמה יכול להיות לוגיקה משלה של צריכת חשמל מעבר ל-3 שניות של AudioFlinger.
- לוחצים על לחצן דף הבית, וצריך להישמע צליל של קליקים.
- מריצים את הפקודה הבאה כדי לקבל את הזמן למצב מוכן למתן שירות שנמדד:
adb shell dumpsys media.audio_flinger | grep measuredWarmup
הפלט אמור להיראות כך:
sampleRate=44100 frameCount=256 measuredWarmup=X ms, warmupCycles=X
הערך של measuredWarmup=X
הוא מספר אלפיות השנייה שנדרשו להשלמת הקבוצה הראשונה של write()
של HAL.
הערך של warmupCycles=X
הוא מספר בקשות הכתיבה של HAL שנדרשו עד שזמן הביצוע של write()
תואם לציפיות.
-
מבצעים חמש מדידות ומתעדים את כולן, כולל את הממוצע.
אם הם לא זהים בערך, סביר להניח שמדידה אחת שגויה.
לדוגמה, אם לא ממתינים מספיק זמן אחרי שהקול מושבת, זמן החימום שיוצג יהיה נמוך מהערך הממוצע.
אין כרגע כלים למדידת הזמן של חימום הקלט של האודיו.
עם זאת, אפשר להעריך את זמן החימום של הקלט על ידי מעקב אחרי הזמן הנדרש להחזרת הפונקציה startRecording().
קיצור זמן החימום
בדרך כלל אפשר לקצר את זמן ההרצה המואצת באמצעות שילוב של:
- תכנון מעגלים טוב
- עיכובים מדויקים בזמן ב-kernel device driver
- ביצוע פעולות עצמאיות של התחממות מראש בו-זמנית במקום ברצף
- השארת מעגלים במצב מופעל או אי-הגדרה מחדש של שעונים (הגברת צריכת החשמל במצב חוסר פעילות)
- שמירת פרמטרים מחושבים במטמון
עם זאת, חשוב להיזהר מאופטימיזציה מוגזמת. יכול להיות שתצטרכו להחליט אם להעדיף זמן הפעלה קצר או להימנע מרעשי פופ במעברי מתח.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-03-26 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 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."]]