Android NDK-r5 OpenALでサウンド再生 1
表題の通り、AndroidNDKのネイティブソースコード内で
OpenALを使ってサウンドの制御をしましょう、という話。
ちなみに、AndroidOS2.3以降ならこれから書くようなことをしなくても
簡単にサウンドを利用できるみたいだけど、
さすがに2.3はまだ普及してませんので、以下に記載します。
コンパイル方法など、参考にさせて頂いたのは以下のページ
◆ Martin's Blog / OpenAL on Android
http://pielot.org/2010/12/14/openal-on-android/
(※英語です)
実際、ここのblogに書いてある通りには使っていないところもありますし
まだ実際に音声を鳴らすような扱い方はしていませんが、軽く和訳を以下に。
英語そんなに得意じゃないんで、多分誤訳は多分に含まれますよ。
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
Android2.3からは3D Audioが標準でサポートされますが、このチュートリアルではOpenALをAndroidで利用する方法を示します。
これを用いることで、あなたは2.2以前のバージョンであっても3Dサウンドを利用することが出来ます。
このコードは、Nexus One(2.2)とG1(1.6)で動作を確認しています。
Preparation(準備)
NDKリソースをコンパイルする方法を知っている必要があります。
このチュートリアルは、AndroidNDKを使ったコンパイルが必要です。私たちはネイティブな共有ライブラリにソースからOpenALをコンパイルしなくてはいけません。
そして、動作させるためにJava Native Interfaceをつくる必要があります。
私が(Windows上の)NDKで動作させるために利用する技術は、以前のチュートリアルで解説しています。
SHARED OBJECTをコンパイルした後には、必ずF5を押すことを忘れないでください。 さもなければ、Eclipseは新しい.soファイルを利用しません。
Android用のOpenALコンパイル方法
まずはじめに、AndroidのためにOpenALをコンパイルします。 ゴールは、Androidアプリで読み込める
Shared Object libraryである libopenal.so を生成することです。
OpenALのソースコードをダウンロードします。
Martins Mozeiko と Chris RobinsonのおかげでAndroidプラットフォームに適したOpenALのバージョンが存在します。
http://repo.or.cz/w/openal-soft/android.git からOpenALソースコードの最新バージョンをダウンロードしてください。
このチュートリアルでは、ここからダウンロードできるバージョンを利用しています。
ダウンロードされたソースコードから、「android」フォルダを「openal」にリネームしてください。
config.hを作成します。
OpenALをコンパイルするために、config.hを
Android.mkを作成します。
コンパイラにコンパイルするファイルを教えるために、
ファイルには以下のように記述します。
TARGET_PLATFORM := android-3 ROOT_PATH := $(call my-dir) ######################################################################################################## include $(CLEAR_VARS) LOCAL_MODULE := openal LOCAL_ARM_MODE := arm LOCAL_PATH := $(ROOT_PATH) LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/../openal/include $(LOCAL_PATH)/../openal/OpenAL32/Include LOCAL_SRC_FILES := ../openal/OpenAL32/alAuxEffectSlot.c \ ../openal/OpenAL32/alBuffer.c \ ../openal/OpenAL32/alDatabuffer.c \ ../openal/OpenAL32/alEffect.c \ ../openal/OpenAL32/alError.c \ ../openal/OpenAL32/alExtension.c \ ../openal/OpenAL32/alFilter.c \ ../openal/OpenAL32/alListener.c \ ../openal/OpenAL32/alSource.c \ ../openal/OpenAL32/alState.c \ ../openal/OpenAL32/alThunk.c \ ../openal/Alc/ALc.c \ ../openal/Alc/alcConfig.c \ ../openal/Alc/alcEcho.c \ ../openal/Alc/alcModulator.c \ ../openal/Alc/alcReverb.c \ ../openal/Alc/alcRing.c \ ../openal/Alc/alcThread.c \ ../openal/Alc/ALu.c \ ../openal/Alc/android.c \ ../openal/Alc/bs2b.c \ ../openal/Alc/null.c \ LOCAL_CFLAGS := -DAL_BUILD_LIBRARY -DAL_ALEXT_PROTOTYPES LOCAL_LDLIBS := -llog -Wl,-s include $(BUILD_SHARED_LIBRARY) ########################################################################################################
あとはこれをndk-buildでコンパイルするわけですが、ここで注意点が。
というか私がこのステップで3時間くらいつまってたわけなんですが。
「Android.mk」を作成するのは「
つまりは、ここまでに作成した「openal」のフォルダと並列して「jni」のフォルダを「新規作成」し、
その上で「ndk-build」を実行する、ということになります。
これを階層の下のほうにあるjni付近でndk-buildしていたものだから全然コンパイルが
通らずに苦労しました……。
とりあえずはここまで。 次はこの後で生成されたlibopenal.soを自分で使っているNDKプロジェクトに
組み込んで、NDKソースの中からlibopenalを操作して音声を鳴らしたいなぁ。