Başlama

Bu bölümde, OpenSL ES API'lerini kullanmaya başlamak için gereken bilgiler sağlanmaktadır.

Uygulamanıza OpenSL ES ekleyin

OpenSL ES'yi hem C hem de C++ kodundan çağırabilirsiniz. Çekirdek OpenSL ES'yi eklemek için özelliği uygulamanızda kullanmak istiyorsanız OpenSLES.h başlık dosyasını ekleyin:

#include <SLES/OpenSLES.h>

OpenSL ES Android uzantılarını eklemek için OpenSLES_Android.h başlık dosyasını da dahil edin:

#include <SLES/OpenSLES_Android.h>

OpenSLES_Android.h üstbilgi dosyasını eklediğinizde aşağıdaki başlıklar dahil edilir otomatik olarak:

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

Not: Bu başlıklar gerekli değildir ancak API'yi öğrenmeye yardımcı olarak gösterilir.

Derleme ve hata ayıklama

OpenSL ES'yi şurada belirterek derlemenize ekleyebilirsiniz: Android.mk dosyası NDK derleme sisteminin oluşturma dosyaları. Aşağıdaki satırı Android.mk:

LOCAL_LDLIBS += -lOpenSLES

Güçlü bir hata ayıklama için, deneme amaçlı olarak en çokSLresult OpenSL ES API'leri döndürülür. Tekliflerinizi otomatikleştirmek ve optimize etmek için iddialar veya hata ayıklama için daha gelişmiş hata işleme mantığı; teklif yok daha uygun olsa da, OpenSL ES ile çalışmak doğal bir avantaj sağlar bir şablon görevi görür.

Örnekler, kodlama hatasına işaret edecek gerçekçi olmayan koşulları yakalamaya yardımcı olur. Biz üretimde gerçekleşme olasılığı daha yüksek olan diğer koşullar için açık hata işleme kullanmış olan kullanıcılar.

Birçok API hatası, sıfır olmayan bir sonuç koduna ek olarak bir günlük girişine neden olur. Bu tür günlük girişleri gibi nispeten karmaşık API'ler için özellikle yararlı olan ek ayrıntılar sağlayabilir. Örneğin, Engine::CreateAudioPlayer değerleridir.

Günlüğü komut satırından veya Android Studio'dan görüntüleyebilirsiniz. Söz konusu günlüğü incelemek için komut satırına şunu yazın:

$ adb logcat

Günlüğü Android Studio'dan incelemek için Görüntüle > Araç Pencereleri > Logcat'i seçin. Daha fazla bilgi edinmek için Logcat ile günlük yazma ve görüntüleme başlıklı makaleyi inceleyin.

Örnek kod

Kendiniz için model olarak kullanabileceğiniz, desteklenen ve test edilmiş örnek kod kullanmanızı öneririz yer alır. Bu kod, ses-yankısı ve yerel-ses klasörlerinin android-ndk GitHub depodur.

Dikkat: OpenSL ES 1.0.1 spesifikasyonu eklerde örnek kod içerir (bkz. Khronos OpenSL ES Kaydı bakın). Ancak Ek B: Örnek Kod ve Ek C: Kullanım Alanı Örnek Kodu'nda Android tarafından desteklenmeyen özellikler kullanılıyor. Biraz örnekleri de yazım hataları içerir veya değişebilecek API'ler kullanır. Şununla devam et: temkinli davranmalısınız; ancak kod, tam OpenSL ES dilini anlamanıza yardımcı olabilir Android'de olduğu gibi kullanılmamalıdır.

Ses içeriği

Aşağıda, uygulamanız için ses içeriğini paketleme yollarından bazıları verilmiştir:

  • Kaynaklar: Ses dosyalarınızı res/raw/ klasörüne yerleştirerek Bunlara ilişkili API’ler tarafından Resources. Ancak kaynaklara doğrudan yerel erişim olmadığından Java yazmanız gerekir programlama dili kodunu kopyalayın.
  • Öğeler: Ses dosyalarınız assets/ klasörüne yerleştirildiğinde Android yerel öğe yöneticisi API'leri tarafından doğrudan erişilebilir. Başlık dosyalarını görüntüleme Bunlar hakkında daha fazla bilgi için android/asset_manager.h ve android/asset_manager_jni.h API'ler. Örnek kod android-ndk GitHub deposu, Android dosyasıyla birlikte bu yerel öğe yöneticisi API'lerini kullanır açıklayıcı veri bulucudur.
  • : Ses içeriğini doğrudan oynatmak için URI veri bulucuyu kullanabilirsiniz ağdan. Ancak şunu okuyun: Güvenlik ve izinler.
  • Yerel dosya sistemi: URI veri bulucu, file: şemasını destekler (uygulama tarafından erişilebilir olması koşuluyla) yerel dosyalar için. Android'in Güvenlik çerçevesi, Linux kullanıcı kimliği ve grup kimliği mekanizmaları aracılığıyla dosya erişimini kısıtlar.
  • Kayıtlı: Uygulamanız, mikrofon girişinden ses verilerini kaydedebilir. bu içeriği saklayabilir, sonra da daha sonra oynatabilirsiniz. Örnek kod, Oynatma klibi.
  • Derlenmiş ve bağlantılı satır içi: Ses içeriğinizi doğrudan görebilir ve daha sonra, arabellek sırası veri bulucusu olan bir ses çalar kullanarak bu sesi çalabilirsiniz. Bu en çok kısa PCM biçimindeki klipler için uygundur. Örnek kod, Merhaba ve Android klipleri. PCM verileri, bin2c aracı (sunulmaz).
  • Gerçek zamanlı sentez: Uygulamanız, PCM verilerini anında sentezleyebilir ve daha sonra, arabellek sırası veri bulucusu olan bir ses çalar kullanarak oynatın. Bu nispeten gelişmiş bir teknik ve ses sentezinin ayrıntıları bu makalenin kapsamı dışındadır.

Not: Uygulamanız için yararlı ses içeriği bulmak veya oluşturmak, bu makalenin kapsamı dışındadır. Etkileşimli ses, oyun sesi, ses gibi web araması terimlerini kullanabilirsiniz tasarım ve ses programlama özelliklerini kullanabilirsiniz.

Dikkat: Bu, sizin sorumluluğunuzdadır yasal olarak içerik oynatma veya kaydetme izniniz olduğundan emin olun. Gizlilik söz konusu olabilir dikkate almanız gereken noktalardır.

Kod örnekleri

Şu örnek uygulamaları GitHub sayfamızda bulabilirsiniz:

OpenSL ES'nin Android NDK uygulaması farklıdır OpenSL ES 1.0.1'in referans spesifikasyonundan biraz uzaklaştık. Bu farklılıklar, örnek kodun neden doğrudan OpenSL ES referans spesifikasyonundan kopyaladığınız işlemler Android uygulaması.

Referans spesifikasyonu ve Android uygulaması için Android için OpenSL ES.