Androidで(とりあえず)音を鳴らそう C/C++編 その1

Androidで(とりあえず)音を鳴らそう C/C++編 その1

前回から間が空いてしまいましたが、いよいよAndroid NDKを利用してC/C++で音を鳴らす部分を作っていきたいと思います。

「OpenSL|ES」というサウンドライブラリのAndroid版である「OpenSL|ES for Android」を使用して、サウンド処理を行っていきます!!

・・・とはいえ、どはまりしてしまってあんまり進んでないのですが・・・。
差し当たり、どはまりのうちの1つ(コンパイルを通す)は解決したので、その辺りまで載せます。

参考書籍を見れども

こちらの参考書籍を見ながら作成しています。

しかし仕方のないことなのか、画像処理の章は紙面も多く内容も詳しいのですが、サウンドの章は「さらっ」と書いてある感じ。

画像処理多いよね
画像処理多いよね

サンプルソースはあれど、サンプルソースのコンパイルを通すために必要な諸々のことは自分で調べるしかないようです。

で、ちょろちょろ調べましたが、一番参考になったのはこれでした。
OpenSL ES for Android(英語)

今回調べたことのメモ書きは以下。

★Android.mk
[bash]
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := player
LOCAL_SRC_FILES := player.cpp

include $(BUILD_SHARED_LIBRARY)
LOCAL_LDLIBS += libOpenSLES
[/bash]

「include $(BUILD_SHARED_LIBRARY)」の下に「LOCAL_LDLIBS += libOpenSLES」を記載するのがポイントっぽいです。逆に書いてたらちゃんとコンパイルしてくれず。でもまあ、今になって冷静に見直してみたらそりゃそうだと思う訳です。

★play.cpp
[c]
#include <jni.h>

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

extern "C" jint Java_com_otowabi_samplesampler_MainActivity_playSound(JNIEnv* env, jobject obj, jint value){
SLresult result;
// 以下まだ作りかけなので省略

return 1;
}
[/c]

SLESのincludeの下2つは要るのか?とか疑問はありますが、とりあえずコンパイルは通ったので続きが作れそうです。

今回はここまで。
次回はファイルを開いて云々したいと思います。

まだまだ先は長そうですね。