Od 27 marca 2025 r. zalecamy używanie android-latest-release
zamiast aosp-main
do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Opóźnienie dźwięku w aplikacji – informacje dla deweloperów
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Aby uzyskać jak najniższy czas oczekiwania na dźwięk, zalecamy użycie Oboe.
Obój
Oboe korzysta z natywnego dźwięku i jest zbudowany na podstawie interfejsu AAudio w Androidzie 8.1 i nowszych oraz OpenSL ES w starszych wersjach Androida. Aby uzyskać jak najmniejsze opóźnienie na urządzeniu, ustaw setPerformanceMode(oboe::PerformanceMode::LowLatency)
i setSharingMode(oboe::SharingMode::Exclusive)
.
Więcej informacji o oboe znajdziesz w przewodniku dla początkujących README.md
oraz pełnym przewodniku. Przykładem aplikacji korzystającej z Oboye jest aplikacja Soundboard.
Uwaga: jeśli używasz AudioTrack do tworzenia strumieni audio wyjściowych w Java w przypadku aplikacji wrażliwych na opóźnienia, użyj trybu PERFORMANCE_MODE_LOW_LATENCY
.
Lista kontrolna implementacji
Aby korzystać z natywnego dźwięku w Androidzie:
-
Pobierz i zainstaluj Android NDK.
-
Postępuj zgodnie z przewodnikiem dla początkujących dotyczącym Oboe.
-
Wywołaj metody
setPerformanceMode(oboe::PerformanceMode::LowLatency)
i setSharingMode(oboe::SharingMode::Exclusive)
w konstruktorze Oboe.
-
Użyj zalecanego natywnego rozmiaru bufora i częstotliwości próbkowania zwracanych przez metodę android.media.AudioManager.getProperty(java.lang.String).
Uwaga: do danych wejściowych należy też używać tego samego rozmiaru bufora i tej samej częstotliwości próbkowania.
-
Skróć długość obsługi wywołania zwrotnego, unikając gwałtownego obciążenia procesora i nieograniczonego blokowania. Unikaj odwrócenia priorytetów.
-
Rozważ użycie nieblokujących algorytmów do komunikacji między obsługiwanymi przez wywołania zwrotne koderami wejściowymi i wyjściowymi oraz między tymi wywołaniami a resztą aplikacji.
Inne materiały
source.android.com
Witryna source.android.com jest przeznaczona przede wszystkim dla producentów OEM budujących urządzenia z Androidem oraz dostawców układów SoC, którzy dostarczają komponenty tym producentom.
Znajdziesz tam jednak wiele przydatnych informacji na temat opóźnień, więc warto się z nimi zapoznać. Zobacz artykuły na temat opóźnienia dźwięku.
android-ndk
Jeśli masz pytania na temat korzystania z natywnego dźwięku na Androidzie, możesz je zadać w grupie dyskusyjnej android-ndk.
Zgłaszanie błędów w Oboe
Jeśli masz problemy z obsługą Oboe, możesz zgłosić błąd.
Filmy
- Pierwsze kroki z Oboe
- Dźwięk o krótkim czasie oczekiwania – bo Twoje uszy na to zasługują
- Android Dev Summit 2018.
- Wygrywanie na Androidzie – jak zoptymalizować aplikację audio na Androida
- Android Developer Challenge 2018.
- Wysoka jakość dźwięku na urządzeniach z Androidem (Google I/O 2013)
- Cały film dotyczy opóźnień.
- Tworzenie świetnych multimediów na Androidzie (Google I/O 2014)
- Pierwsze 14 minut dotyczy ogólnie dźwięku, a w szczególności opóźnienia wprowadzania danych.
- Opóźnienie dźwięku: rozmiary buforów (100 Days of Google Dev)
- Opisuje zależność między opóźnieniem dźwięku, rozmiarami buforów i planowaniem zadań.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-03-26 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 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."]]