Cordova導入覚書(Audioプラグイン追加)

2015/1/9 owljey
2015/3/6 更新

導入編
Crosswalk追加

さて、Cordovaでビルドできるようになりました。が、問題がいくつか。
まず遅い。明らかにAndroidブラウザで動いている風なのにそれよりも遅め。
手持ちの30fpsのゲームが引っかかるくらいといったらわかるでしょうか。

あと、ローカルにおいた音声ファイルが再生できない。
URLアクセスしたファイルなら再生できるという話もありますが(確かめてない)、
普通のアプリと比べて不利なことは間違いないでしょう。

あきらめてましたが、Cordova Native Audioというプラグインがあるようなので
使わせてもらいました。AndroidだけでなくiOS、Windowsストアアプリ等、主な機種は対応しています。
音声再生のところだけネイティブコードで再生させて、
これはjavascript上から操作できます。再生、停止、ループ、フェードくらいですが十分でしょう。
(シークがないけど)

http://cordova.apache.org/

<セットアップ>

まず、Git(http://git-scm.com/)を導入します。インストーラとして使うようです。

コマンドプロンプト上で環境変数を追加します。
自分でバッチファイルに設定するなり、システムプロパティ→詳細設定→環境変数で設定するなりは自由に。


set Path = %Path%;C:\Program Files (x86)\Git\bin;

これでPlugin導入の準備はできました。
まず、すでにあるhelloプロジェクトにプラグインを導入するとします。


> cordova plugin add https://github.com/SidneyS/cordova-plugin-nativeaudio.git

これで、hello\www\index.htmlにAudio制御のコードを追加すればよいのですが、 とりあえず、ここはサンプルで上書きしておきましょう。

..\hello\plugins\de.neofonie.cordova.plugin.nativeaudio\examples\drumpad にあるサンプルコードを、..\hello\wwwに上書きします。
で、おなじみのコマンドでビルドします。


> cordova build android

これでエラーはでませんでしたか?
でなければよし。

ただ、2015/1/9現在Android用のモジュールにはバグがあるようです(2015/3時点で修正済み)。
これを修正します。

hello\plugins\android.json

   (誤)"xml": "<uses-permission name=\"android.permission.MODIFY_AUDIO_SETTINGS\" />",
   (正)"xml": "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\" />",

   (誤)"xml": "<uses-permission name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",
   (正)"xml": "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",

   (誤)"xml": "<uses-permission name=\"android.permission.READ_PHONE_STATE\" />",
   (正)"xml": "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",

hello\platforms\android\AndroidManifest.xml

   (誤)<uses-permission name="android.permission.MODIFY_AUDIO_SETTINGS" />
   (正)<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

   (誤)<uses-permission name="android.permission.WRITE_EXTERNAL_STORAGE" />
   (正)<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

   (誤)<uses-permission name="android.permission.READ_PHONE_STATE" />
   (正)<uses-permission android:name="android.permission.READ_PHONE_STATE" />

この行の下に余分な<uses-permission name~があったら削除しておきます。
これでビルドが通ったはず。
こういうAndroidのトラブルシューティングが面倒なんでCordova使うのだけど‥‥まあ、音声使えるのはありがたい。

以上。