Memulai

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

Menambahkan OpenSL ES ke Aplikasi Anda

Anda dapat memanggil OpenSL ES baik dari kode C maupun C++. Untuk menambahkan set fitur OpenSL ES inti ke aplikasi Anda, 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: Semua header ini tidak wajib, tetapi ditampilkan sebagai bantuan dalam mempelajari API.

Membuat dan Men-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
    

Untuk menciptakan proses debug yang andal, kami merekomendasikan Anda memeriksa nilai SLresult yang ditampilkan oleh sebagian besar OpenSL ES API. Anda dapat menggunakan assert atau logika penanganan error yang lebih canggih untuk melakukan debug; tidak ada assert yang menawarkan kelebihan inheren untuk difungsikan dengan OpenSL ES, meski salah satunya mungkin lebih cocok untuk kasus penggunaan tertentu.

Kita menggunakan assert dalam contoh karena membantu merekam kondisi tidak realistis yang akan menunjukkan error coding. Kita 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 bagi 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:

    $ 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

Kami merekomendasikan penggunaan kode contoh yang didukung dan telah teruji yang dapat digunakan sebagai model untuk kode Anda sendiri, yang terletak di folder audio-echo dan native-audio di repositori GitHub android-ndk.

Perhatian: Spesifikasi OpenSL ES 1.0.1 berisi kode contoh dalam lampiran (lihat Registry OpenSL ES Khronos 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 yang dapat dilakukan untuk memaketkan konten audio bagi aplikasi Anda:

  • Resource: Dengan menempatkan file audio ke folder res/raw/, file tersebut dapat diakses dengan mudah oleh API yang terkait untuk Resources. Namun, tidak ada akses native langsung ke resource sehingga Anda harus menulis kode bahasa pemrograman Java untuk menyalinnya sebelum menggunakan.
  • Aset: Dengan menempatkan file audio ke dalam 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 data deskriptor file Android.
  • Jaringan: Anda dapat menggunakan pencari lokasi URI untuk memutar konten audio langsung dari jaringan. Akan tetapi, pastikan Anda membaca Keamanan dan izin.
  • Sistem file lokal: Pencari 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 inline: Anda dapat menautkan konten audio langsung ke dalam library bersama, lalu memutarnya menggunakan pemutar audio yang dilengkapi pencari 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 dengan cepat, lalu memutarnya menggunakan pemutar audio yang dilengkapi pencari 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 lebih lanjut.

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:

  • audio-echo membuat pengulangan dua arah input-ke-output.
  • native-audio adalah perekam/pemutar audio sederhana.

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

Untuk mengetahui informasi lebih lanjut tentang perbedaan spesifikasi standar dengan implementasi Android, lihat OpenSL ES untuk Android.