Jetzt starten

Dieser Abschnitt enthält die Informationen, die für die ersten Schritte mit den OpenSL ES APIs erforderlich sind.

OpenSL ES zu Ihrer App hinzufügen

Sie können OpenSL ES sowohl über C- als auch über C++-Code aufrufen. So fügen Sie die Core-Version von OpenSL ES hinzu: für Ihre App haben, fügen Sie die Headerdatei OpenSLES.h hinzu:

#include <SLES/OpenSLES.h>

So fügst du die Android-Erweiterungen von OpenSL ES hinzu: Fügen Sie außerdem die Headerdatei OpenSLES_Android.h ein:

#include <SLES/OpenSLES_Android.h>

Wenn Sie die Headerdatei OpenSLES_Android.h einbinden, werden die folgenden Header eingefügt: automatisch:

#include <SLES/OpenSLES_AndroidConfiguration.h>
#include <SLES/OpenSLES_AndroidMetadata.h>

Hinweis: Diese Header sind nicht erforderlich, sollen aber beim Erlernen der API hilfreich sein.

Build und Fehler beheben

Sie können OpenSL ES in Ihren Build integrieren, indem Sie es im Android.mk-Datei, die als eine der die Makefiles des NDK-Systems. Fügen Sie folgende Zeile zu Android.mk:

LOCAL_LDLIBS += -lOpenSLES

Für eine zuverlässige Fehlerbehebung empfehlen wir, den SLresult-Wert zu prüfen, der die meisten die OpenSL ES APIs zurückgeben. Sie können Assertions oder fortgeschrittenere Logik zur Fehlerbehandlung bei der Fehlerbehebung, Keines der Angebote Dies ist ein inhärenter Vorteil der Arbeit mit OpenSL ES, auch wenn die eine oder die andere möglicherweise besser geeignet ist. für einen bestimmten Anwendungsfall.

Wir verwenden Assertions in unserem Beispiele, da sie dabei helfen, unrealistische Bedingungen zu erkennen, die auf einen Codierungsfehler hinweisen könnten. Mi. bei anderen Bedingungen, die in der Produktion häufiger auftreten, eine explizite Fehlerbehandlung verwendet haben.

Viele API-Fehler führen neben einem Ergebniscode ungleich null zu einem Logeintrag. Solche Logeinträge kann zusätzliche Details liefern, die sich bei relativ komplexen APIs wie <ph type="x-smartling-placeholder"></ph> Engine::CreateAudioPlayer

Sie können das Protokoll entweder über die Befehlszeile oder über Android Studio aufrufen. So überprüfen Sie das Protokoll von in die Befehlszeile Folgendes ein:

$ adb logcat

Um das Protokoll aus Android Studio zu überprüfen, wählen Sie View > Tool-Fenster > Logcat Weitere Informationen finden Sie unter Logs mit Logcat schreiben und ansehen.

Beispielcode

Wir empfehlen die Verwendung von unterstütztem und getestetem Beispielcode, der als Modell für Ihren eigenen Code verwendet werden kann. der sich im Audio-Echo und Native Audio Ordner des android-ndk GitHub zu erstellen.

Achtung: Die Spezifikation von OpenSL ES 1.0.1 enthält in den Anhängen Beispielcode (siehe Khronos OpenSL ES Registry . Die Beispiele in Anhang B: Beispielcode und In Anhang C: Beispielcode für Anwendungsfälle werden Funktionen verwendet, die von Android nicht unterstützt werden. Einige Beispiele enthalten typografische Fehler oder verwenden APIs, die sich wahrscheinlich ändern. Fortfahren mit Vorsicht: aber der Code könnte hilfreich sein, um die vollständige OpenSL-E-Mail zu verstehen. sollte sie nicht in der vorliegenden Form unter Android verwendet werden.

Audio-Inhalt

Im Folgenden finden Sie einige der vielen Möglichkeiten, Audioinhalte für Ihre App zu verpacken:

  • Ressourcen: Wenn Sie Ihre Audiodateien im Ordner res/raw/ ablegen, können sie ganz einfach über die zugehörigen APIs Resources Da es jedoch keinen direkten nativen Zugriff auf Ressourcen gibt, müssen Sie Java schreiben. Programmiersprachen-Code, um sie vor der Verwendung zu kopieren.
  • Assets: Wenn Sie Ihre Audiodateien im Ordner assets/ ablegen, sind direkt über die nativen Android Asset Manager APIs zugänglich. Headerdateien ansehen Unter android/asset_manager.h und android/asset_manager_jni.h finden Sie weitere Informationen dazu. APIs Den Beispielcode im Android NDK Das GitHub-Repository verwendet diese nativen Asset Manager APIs in Verbindung mit der Android-Datei Deskriptor Data Locator.
  • Netzwerk: Mit dem URI-Data Locator können Sie Audioinhalte direkt abspielen. aus dem Netzwerk. Sie sollten sich jedoch Sicherheit und Berechtigungen
  • Lokales Dateisystem: Die URI-Datensuche unterstützt das Schema file:. für lokale Dateien, vorausgesetzt, die Anwendung kann auf die Dateien zugreifen. Beachten Sie, dass die Android- Sicherheits-Framework schränkt den Dateizugriff über die Linux-Nutzer-ID- und Gruppen-ID-Mechanismen ein.
  • Aufgezeichnet: Ihre App kann Audiodaten vom Mikrofoneingang, diesen Inhalt speichern und ihn später wiedergeben. Im Beispielcode wird diese Methode für den Wiedergabeclip.
  • Inline kompiliert und verknüpft: Sie können Ihre Audioinhalte direkt mit und dann in einem Audioplayer mit Pufferwarteschlangen-Datensuche wiedergegeben werden. Dieses eignet sich am besten für kurze Clips im PCM-Format. Im Beispielcode wird diese Technik für den Hello- und Android-Clips Die PCM-Daten wurden mit einem bin2c-Tool (nicht enthalten).
  • Echtzeit-Synthese: Ihre Anwendung kann PCM-Daten im Handumdrehen synthetisieren und und es dann in einem Audioplayer mit Zwischenspeicherwarteschlangen-Data Locator wiedergeben. Dies ist ein relativ anspruchsvolles und die Details der Audiosynthese werden in diesem Artikel nicht behandelt.

Hinweis: Das Finden und Erstellen nützlicher Audioinhalte für Ihre App wird in diesem Artikel nicht behandelt. Du kannst Suchbegriffe wie interaktive Audio, Audio von Spielen oder Ton verwenden. Design und Audioprogrammierung, um weitere Informationen zu finden.

Achtung:Sie sind dafür verantwortlich. um sicherzustellen, dass Sie gesetzlich dazu berechtigt sind, Inhalte abzuspielen oder aufzunehmen. Möglicherweise gibt es Datenschutz für das Aufzeichnen von Inhalten.

Codebeispiele

Die folgenden Beispielanwendungen sind auf unserer GitHub-Seite verfügbar:

  • Audio-Echo erstellt eine Eingabe-zu-Ausgabe-Roundtrip-Schleife.
  • Native Audio ist ein einfacher Audiorekorder/-player.

Die Android-NDK-Implementierung von OpenSL ES unterscheidet sich der Referenzspezifikation für OpenSL ES 1.0.1. Diese Unterschiede sind ein wichtiger Grund dafür, dass Beispielcode, die Sie direkt aus der OpenSL ES-Referenzspezifikation kopieren, Android-App

Weitere Informationen zu den Unterschieden zwischen der Referenzspezifikation und der Android-Implementierung, siehe OpenSL ES for Android