【cocos2d-x】iOSとAndroidでオーディオファイルのリソースを分ける方法
iOS版TravelShooting JPではオーディオファイルとして、BGMには.m4a(AAC)ファイル、SEには.aiffファイルを使っています。
Androidでは.ogg(Ogg Vorbis)ファイルが推奨されているらしいので、Audacityでoggファイルに変換しました。
マルチプラットフォームとしてiOS(Xcode)とAndroid(Eclipse)環境両方でビルドするためには.m4a, .aiff, .ogg全てのオーディオファイルをResouresフォルダーに入れておく必要がありますが、そうすると使われない余計なファイルがアプリに組み込まれ、アプリのサイズが肥大化してしまいます。
Xcodeの場合は、iOS用ファイルとAndroid用ファイルを別のフォルダーに分けておいて、iOS用のフォルダーのみをプロジェクトに入れることでAndroid用の.oggファイルを除外する事が可能です。
Androidの方はというと、ググるとこういうページが見つかりました。
http://www.cocos2d-x.org/wiki/How_to_exclude_files_in_resources_directory_when_building_for_androidwww.cocos2d-x.org
proj.androidフォルダーにあるbuild-cfg.jsonファイルでexclude指定すれば良さそうです。
早速やってみました。
{ "ndk_module_path" :[ "../cocos2d", "../cocos2d/cocos", "../cocos2d/external" ], "copy_resources": [ { "from": "../Resources", "to": "", "exclude": [ "audio_ios" ] } ] }
変化無し!
audio_iosフォルダーがしっかりassetsフォルダーにコピーされています。
こちらのフォーラムのやり取りによるとcocos consoleという物を使わないとダメな感じです。
http://discuss.cocos2d-x.org/t/exclude-resource-files-in-android/19056/3discuss.cocos2d-x.org
Eclipseでビルドするときはbuild-cfg.jsonファイルは使われないのでしょう。
試しにbuild-cfg.jsonファイルを削除してビルドしてみましたが、普通にビルドできてしまいました。
では、Eclipseは何を使ってResourcesフォルダーからassetsフォルダーにコピーしているのでしょう?Eclipseのログを見てみると、どうやらbuild_native.pyのようです。
中を見てみるとリソースのコピー処理で.gzファイルを除外するコードがあったので、見よう見まねで.aiffと.m4aも除外するように修正してみました。
def copy_files(src, dst): for item in os.listdir(src): path = os.path.join(src, item) # Android can not package the file that ends with ".gz" if not item.startswith('.') and not item.endswith('.gz') and not item.endswith('.aiff') and not item.endswith('.m4a') and os.path.isfile(path): shutil.copy(path, dst) if os.path.isdir(path): new_dst = os.path.join(dst, item) os.mkdir(new_dst) copy_files(path, new_dst)
その結果、audio_iosフォルダーの中身の.aiff、.m4aファイルはコピーされなくなり、これまで約60MBあったアプリのサイズが、約40MBに減りました!
どう考えても美しいやり方には思えないので、もっとスマートな方法がありそうですが、とりあえずはこれで我慢しておきます。
美しい方法をご存知の方はぜひコメントをお願いいたします。
https://itunes.apple.com/jp/app/travelshooting-jp-toraberushutingu/id917570972?mt=8&uo=4&at=10laCt
https://itunes.apple.com/jp/app/beecluster-wu-liaono-zongsukurorushutingugemu/id663801586?mt=8&uo=4&at=10laCt