Memulai

PERINGATAN: OpenSL ES tidak digunakan lagi. Developer harus menggunakan library Oboe open source yang tersedia di GitHub. Oboe adalah wrapper C++ yang menyediakan API yang sangat mirip dengan AAudio. Oboe memanggil AAudio saat tersedia, dan melakukan fallback ke OpenSL ES jika AAudio tidak tersedia.

Bagian ini memberikan informasi yang dibutuhkan untuk memulai penggunaan OpenSL ES API.

Menambahkan OpenSL ES ke aplikasi

Anda dapat memanggil OpenSL ES baik dari kode C maupun C++. Untuk menambahkan set fitur OpenSL ES inti ke aplikasi, sertakan file header OpenSLES.h:

#include <SLES/OpenSLES.h>

Untuk juga menambahkan ekstensi Android OpenSL ES, sertakan file header OpenSLES_Android.h:

#include <SLES/OpenSLES_Android.h>

Jika Anda menyertakan file header OpenSLES_Android.h, header berikut akan otomatis disertakan:

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

Catatan: Header ini tidak wajib, tetapi ditampilkan sebagai bantuan dalam mempelajari API.

Build dan debug

Anda dapat mengintegrasikan OpenSL ES ke dalam build dengan menetapkannya dalam file Android.mk yang berfungsi sebagai salah satu makefile sistem build NDK. Tambahkan baris berikut ke Android.mk:

LOCAL_LDLIBS += -lOpenSLES

Agar proses debug berjalan lancar, sebaiknya periksa nilai SLresult yang ditampilkan oleh sebagian besar OpenSL ES API. Anda dapat menggunakan pernyataan atau logika penanganan error yang lebih canggih untuk proses debug; keduanya tidak menawarkan kelebihan inheren untuk difungsikan dengan OpenSL ES, meskipun salah satunya mungkin lebih cocok untuk kasus penggunaan tertentu.

Kami menggunakan pernyataan dalam contoh karena membantu mengidentifikasi kondisi tidak realistis yang akan menunjukkan error coding. Kami telah menggunakan penanganan error eksplisit untuk kondisi lain yang lebih mungkin terjadi dalam produksi.

Banyak error API mengakibatkan entri log, selain kode hasil bukan nol. Entri log semacam itu dapat memberikan detail tambahan yang terbukti sangat berguna untuk API yang relatif kompleks seperti Engine::CreateAudioPlayer.

Anda dapat menampilkan log baik dari command line maupun dari Android Studio. Untuk memeriksa log dari command line, ketik kode berikut:

$ adb logcat

Untuk memeriksa log dari Android Studio, pilih View > Tool Windows > Logcat. Untuk informasi selengkapnya, lihat Menulis dan Melihat Log dengan Logcat.

Kode contoh

Sebaiknya gunakan kode contoh yang didukung dan telah teruji yang dapat digunakan sebagai model untuk kode Anda sendiri. Kode contoh ini terletak dalam folder audio-echo dan native-audio di repositori GitHub android-ndk.

Perhatian: Spesifikasi OpenSL ES 1.0.1 berisi kode contoh dalam lampiran (lihat Khronos OpenSL ES Registry untuk detail selengkapnya). Namun, contoh dalam Lampiran B: Kode Contoh dan Lampiran C: Kode Contoh Kasus Penggunaan menggunakan fitur yang tidak didukung oleh Android. Beberapa contoh juga berisi kesalahan ketik, atau menggunakan API yang kemungkinan akan berubah. Lanjutkan dengan hati-hati saat merujuknya; meski kode tersebut mungkin berguna dalam memahami standar OpenSL ES secara lengkap, tetapi jangan gunakan apa adanya dengan Android.

Konten audio

Berikut adalah beberapa cara memaketkan konten audio untuk aplikasi:

  • Resource: Dengan menempatkan file audio ke folder res/raw/, file tersebut dapat diakses dengan mudah oleh API terkait untuk Resources. Namun, tidak ada akses native langsung ke resource, jadi Anda harus menulis kode bahasa pemrograman Java untuk menyalinnya sebelum digunakan.
  • Aset: Dengan menempatkan file audio ke folder assets/, file tersebut akan dapat diakses langsung oleh API pengelola aset native Android. Lihat file header android/asset_manager.h dan android/asset_manager_jni.h untuk informasi selengkapnya mengenai semua API ini. Contoh kode yang terdapat di repositori GitHub android-ndk menggunakan API pengelola aset native ini bersama dengan pencari lokasi data deskriptor file Android.
  • Jaringan: Anda dapat menggunakan pencari lokasi data URI untuk memutar konten audio langsung dari jaringan. Akan tetapi, pastikan Anda membaca Keamanan dan izin.
  • Sistem file lokal: Pencari lokasi data URI mendukung skema file: untuk file lokal, asalkan file tersebut dapat diakses oleh aplikasi. Perlu diperhatikan bahwa framework keamanan Android membatasi akses file lewat mekanisme ID grup dan ID pengguna Linux.
  • Direkam: Aplikasi Anda dapat merekam data audio dari input mikrofon, menyimpan konten ini, lalu memutarnya kembali nanti. Kode contoh menggunakan metode ini untuk klip Playback.
  • Dikompilasi dan ditautkan secara inline: Anda dapat menautkan konten audio langsung ke dalam library bersama, lalu memutarnya menggunakan pemutar audio yang dilengkapi pencari lokasi data antrean buffer. Solusi ini sangat cocok untuk klip berformat PCM pendek. Kode contoh menggunakan teknik ini untuk klip Hello dan Android. Data PCM dikonversi menjadi string heksa menggunakan alat bin2c (tidak disertakan).
  • Sintesis real-time: Aplikasi Anda dapat menyintesis data PCM secara langsung saat proses, lalu memutarnya menggunakan pemutar audio yang dilengkapi pencari lokasi data antrean buffer. Secara relatif, ini merupakan teknik lanjutan, dan detail tentang sintesis audio tidak termasuk dalam cakupan artikel ini.

Catatan: Artikel ini tidak mencakup informasi untuk menemukan atau membuat konten audio yang dapat digunakan aplikasi Anda. Gunakan istilah penelusuran web seperti audio interaktif, audio game, desain suara, dan pemrograman audio untuk menemukan informasi selengkapnya.

Perhatian: Anda bertanggung jawab memastikan bahwa Anda secara hukum diizinkan untuk memutar atau merekam konten. Mungkin ada pertimbangan privasi untuk merekam konten.

Contoh kode

Contoh aplikasi ini tersedia di halaman GitHub kami:

Implementasi Android NDK untuk OpenSL ES berbeda dengan spesifikasi standar untuk OpenSL ES 1.0.1 dalam sejumlah aspek. Perbedaan ini merupakan alasan penting tidak berfungsinya kode contoh yang disalin langsung dari spesifikasi referensi OpenSL ES di aplikasi Android Anda.

Untuk informasi selengkapnya tentang perbedaan antara spesifikasi standar dan implementasi Android, lihat OpenSL ES untuk Android.