【Cocos2d-x】 非同期なので 【pd-for-android】


以前、作ったアプリを、例の Android 6 のパーミッション許可方法に対応させようと思ったら、意外に大変で、大改造になってしまった。

cocos2d-x の createScene() の最後で、Pd へ初期化データを送っていたんだけど、パーミッションの許可を求めるダイアログを表示している最中、つまりオーディオ関係の初期化なんか全然済んでいない時点で、じゃんじゃんデータを送ろうとしていた模様。

で、じゃぁ、Pd の初期化

bindService(new Intent(this, PdService.class), pdConnection, BIND_AUTO_REATE);

を呼び出したあとに、cocos 側へ、データを送って良しと知らせてやればどうかと思ったんだけど、こっちも Service を使っているもんで、いつ初期化が完了したかが分からず、失敗。

しょうがないので、github で推奨しているやり方 を、自分のアプリに対応させて、「Starting and stopping Pd audio」の、真ん中あたりの、

 try {
  /* sleep for one second to give Pd a chance to load samples and such;
    this is not always necessary, but not doing this may give rise to
    obscure glitches when the patch contains audio files */
  Thread.sleep(1000);
 } catch (InterruptedException e) {
   // do nothing
 }
}


のあとに、「データ送って良し!」と cocos側にお知らせするコードを書いて対処しました。

cocos側では、「初期データ送ってちょ」フラグを立てて、update でチェックして、データを送り出すような感じ。

まぁ、Thread.sleep の値によっては、機種によってコケる可能性もありそうだけど、AVD 上では上手くいっているようです。

起動時、1回だけの処理で、update を使うのは癪なのだが。
しかも、パーミッション許可のダイアログを表示するときだけ。

ドイツもコイツも非同期で動くのは困りもの。

スポンサーサイト

Android Studio で pd-for-android を使ってみる【Pd パッチ組み込み】※動作未確認


Pd-Core-1.0.1.aar を無事に組み込めたようなので、Pd パッチを組み込んでみるテスツ。

うーん、段取りが良く分からなかったので、Eclipse + Cocos2d-x のときにやってたように、proj.android-studio/app/res/ の中に raw フォルダを作って、zip 圧縮した Pd パッチ( = test.pd.zip)を突っ込んでみる。

一応、プロジェクト・エクスプローラーには、res/raw/test.pd.zip は反映されている模様。

で、プロジェクトをクリーンしてみると、エラー。

ファイル名に「.」が入っているとダメとかいってるもよう。
あーん? Eclipse のときはそんなことなかったのに・・・。

もしかしたら、raw フォルダの作り方が悪かったのかなと思って、ネッツ検索。

StackOverflow さんに /res/raw はこうやって作れと 画像 が貼ってあったので、真似する。

パッケージか、res フォルダを右クリックして、ポップアップしたメニューから New > Android resource directory を選んで、ディレクトリー名を raw 、Resource type から raw を選んで「OK」。

おろろ、さっきとフォルダの構造が違ってる。
java の下に res/raw が出来てる。

で、もう一回クリーン。
やっぱり、「.」がダメだと仰る。
しょうがないので、「test.pd.zip」の拡張子を取って、「test」に Refactor > Rename でリネーム。

クリーンしたら、エラーは取れました。

一応、ビルドして端末に送ったら、Cocos2d-x のロゴを見ることはできましたが、特に Pd を動かすコードは書いてないので、ホントに動くかどうかは未確認。

そして、raw フォルダのありかは、proj.android-studio/app/res/raw から proj.android-studio/app/src/main/res/raw に変わったのでした。

もしかしたら、/app/res/raw でも、拡張子を取れば良かったのかも。
なんか、フォルダが深くてイヤンな感じ。

Android Studio で pd-for-android を使ってみる【PdCore.aar】


さて、こちらの記事 で、PdCore の aar (ライブラリー)ファイルを作ったので、実際のプロジェクトに組み込んでみる。

まず、AppActivity.java ファイルに、

import org.puredata.android.io.AudioParameters;
import org.puredata.android.io.PdAudio;
import org.puredata.android.service.PdService;
import org.puredata.android.utils.PdUiDispatcher;
import org.puredata.core.PdBase;
import org.puredata.core.PdListener;
import org.puredata.core.utils.IoUtils;
import org.puredata.core.utils.PdDispatcher;



を追加。
当然、エラーで赤字に。

で、次に、公式 に書かれている How to use the library を試してみる。

Add the dependency to your app:

dependencies {
compile 'org.puredata.android:pd-core:1.0.1'

// ... other dependencies
}



あれ?? これだけじゃダメなの?
赤字解消されず。

ネッツ検索して、こちら様のサイト のコメント欄を参考にする。

アプリケーションの libs の下に入れる方法でも良いようではありますが、なるべく手書きをしない方法をと思い、次を試しました。

1.メニュー File > New > New Module... を選択、Import .JAR/.AAR Package でライブラリのモジュールを作る。
2.メニュー File > Project Structure... を選択、 ライブラリを使用するアプリケーションのモジュールを選択し、 「Dependencies」のタブを開き、 プラス記号「+」アイコンを押し「Module Dependency」を選ぶ。 手順1で追加したモジュールを選択。



2.に関しては、公式の dependencies に手書きで書き加えた compile 'org.puredata.android:pd-core:1.0.1' を、ツールで追加してくれるだけのような気がするので、省略。
というか、1.をやったら赤字が取れて、認識してくれちゃったので、やる必要なかった。

ちなみに手順としては、上にあるように

「メニュー File > New > New Module... を選択」すると、下のウィンドウが開くので、

AS_new_module_Import_AAR


ここから「Import.JAR/.AAR Package」を選択して「Next」すると、.aar の場所を聞かれるので、pd-for-android/PdCore/build/outputs/aar/pd-core-1.0.1.aar を指定します。


これで、あとはコードをゴリゴリ書いていけば良い・・・、はず・・・。

Android Studio 2.1 と pd-for-android でトラブル


このところ、開発環境を Android Studio に切り替えようとしているわけですが、そもそものきっかけは、Google さんが、そろそろ Eclipse を開発環境として想定しなくなってきて SDK 等の組み込み方の解説を掲載しなくなってきたことと、pd-for-android の公式 も、それに追随し始めたことだったわけです。

それで、pd-for-android のバージョンを更新するついでに、開発環境を切り替えようと。

昨日、Android Studio + COcos2d-x で、コンパイルも上手くいったし、新バージョンの pd-for-android のライブラリーを組み込もうとしたところ。
ちょっとまて、これまで Eclipse で開発してきたものってどうなるんだ? と思い立ち、Eclipse を起動してみたら、pd-for-android を使った全プロジェクトが、エラー表示で真っ赤っか。

どうも、PdCore をライブラリーとして認識してないもよう。

PdCore の、プロパティを確認してみると、is Library にチェックが入れられない。
どころか、単なるフォルダとしてしか認識してないみたい。

しょうがないので、関連ファイルを全削除。

・AndroidMidi
・AndroidMidiTest
・BluetoothMidiDemo
・BluetoothMidiTest
・MidiPlayer
・UsbMidiDemo
・UsbMidiTest
・CircleOfFifth
・PdCore
・PdTest
・ScenePlayer
・Voice-O-Rama

で、新バージョンの pd-for-android をインポート。
したら、変なフォルダを作り始めてるー。
新バージョンの pd-for-android は、Android Studio に特化しているもよう。
※新バージョンを git clone したあとに、Android Studio に読み込んで .aar ファイルを作ったから特化してしまったのかもしれないです。未確認。

しょうがないので、バックアップを取っておいた旧バージョンの pd-for-android をインポートして、再ビルド。
そして、アプリのプロジェクトの プロパティ→Android で、赤チェックが入っている PdCore を Remove してから Add し直す。
でもって、再ビルドしたら、エラーが取れました。良かった良かった。

しかし、旧バージョンってどこかに残ってないんですかね?
新バージョンを Eclipse に読み込めば、Eclipse でも使用可能なら嬉しいんだけど。

さて、aar の使い方を調べなきゃ。

Android Studio で pd-for-android を使ってみる


というわけで、pd-for-android の 公式 のほうで、Android Studio を推奨されてしまったので、導入してみることにする。

Android Studio のインストールは、こちらのサイト に書いてあるようにいたって簡単。
基本、ダウンロードして、.app ファイルをアプリケーション・フォルダに突っ込むだけ。

ワタクシの場合、SDK と NDK は Eclipse を使うときにインストールしてあったので、Custom を選択して、SDK のフォルダを指定しました。
あと、なんかしてたら NDK の場所を指定しろとか言われてパスを入力したんだけど、どのタイミングだったか忘れちゃった。

NDK のパスに関しては、File > Other Settings > Default Project Structure を開くと、保存場所を 設定できるみたい です。

で、実際にどのNDKを使用するのかは、pd-for-android フォルダの local.properties ファイル内で

ndk.dir=~/android-ndk-rxxc


で指定するみたいです。
これは、pd-for-android に限らず、NDK を使用するプロジェクトでは共通なのかも知れない。


それでもって、いつものごとく蹴っつまずくわけですよ、ワタクシの場合。

公式 の、Using Android Studio の項目、

5. Open the Gradle Toolbar and run the task assembleRelease in the project :PdCore


が、分からない。

色々、調べた結果、ウィンドウ右端上の「Gradle」をクリックすると、

gradle


右ペインに「Gradle projects」が開くので、PdCore を選択して、下図赤丸の「Execute Gradle Task」をクリックすると、

gradle_pain


こんな感じのウィンドウが開くので、「Command line」に「assembleRelease」と入力して「OK」をクリックするとビルドが始まりました。

execute_gradle_task

いくつか、Note: や 注意: が出ましたが、一応、BUILD SUCCESSFUL となりました。


公式のほうの 「How to use the library」が良く分からないんですが、これはちょっと後回しにして、Android Studio で Cocos2d-x を使えるように環境構築をしなくちゃならないような気がしております。

上のほうの「Make sure you have JCenter in your repositories:」って、アプリのプロジェクトのルートにある build.gradle のことかしら?
pd-for-android のルートにある build.gradle には jcenter って書いてあるけど。

さて、連休にでもやっておけば良かった・・・な、作業リスト。

1. Cocos2d-x の組み込み
2. Pdパッチの組み込みテスト

は、イチからっぽいぞ。ちょっと、キミ。