2015年1月26日月曜日

cocos2d-x Androidで"could not create track"エラー

どうも、俺@もう帰るです。

今日は、cocos2d-xでAndroid対応している時にハマった
AudioFlinger could not create track, status: -12

のエラーについてです。

・Xcode v6.1
・cocos2d-x v2.2.6
・eclipse Juno Service Release 2

現象ですが、
ゲーム開始時に、エンジンの効果音(.oggファイル)を
    int soundID = CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("engineSound", true);
上述のようにループ再生させておき、
ポーズのタイミングなどでは効果音を停止させます。
    CocosDenshion::SimpleAudioEngine::sharedEngine()->stopEffect(soundID);

で、またゲーム再開させたときに、
    int soundID = CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("engineSound", true);
最初は出ていたエンジン効果音が鳴らなくなる、
という症状になってしまいました。

その際、eclipseに出ていたエラーログは、
01-26 18:00:00.000: ERROR/AudioTrack AudioFlinger found not create track, status: -12
01-26 18:00:00.000: ERROR/AudioTrack Error creating AudioTrack
でした。

Webで調べたところ、
status: -12
というのは、
効果音をロードしてTrackを生成する時に必要となる
リソース(メモリ)不足が主な原因のようです。

しかし僕の場合は
それほどメモリを消費するような大きなサイズのサウンドファイルもない。

他にも調べてみて、以下の方法で解決できました。
anddev.org - SoundPool crashing with "could not create track"

該当のサウンドファイル(.ogg)のビットレートを
ステレオ320kbpsからモノラルの192kbsに下げました。

何kbpsにするのが適正なのかは定かではありませんが、
上記のようにしても音に大きな劣化などは感じられませんでした。
もし同じ症状で悩んでいる方がおられましたら、試してみてください。

以上でぇぇぇぇぇぇす。


2015年1月8日木曜日

64bit(arm64)対応するとJSONKitがエラー[iOSアプリ]

どうも、俺です。

Xcode開発でアーキテクチャにarm64を追加すると
組み込んだ3rdパーティ製ツールのJSONKitからエラーが出てビルドできません。



githubを見ると、JSONKitはかなり長い間更新が止まっており
arm64アーキテクチャに対応していないようです。

この場合は、
該当のエラーが出ている箇所にマウスポインタを併せてクリックし、
エラーを修正してしまえば対応できます。


エラー箇所は2箇所あります。


または、
元のJSONKitをフォークして64bit対応したソースが公開されているので、
そちらでも対応出来ると思います。(※未確認)


以上でぇぇぇぇぇぇす。

2014年11月13日木曜日

[Xcode] No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7s armv7).のエラー

どうも、俺です。

Xcodeでビルドさせたときに、タイトルのようなエラーが出る人へ。


方法は2つ考えられます。

1)Build Settings内にある「Build Active Architecture Only」の値をNoにする。
2)転送先端末(またはシミュレータ)にマッチしたアーキテクチャを「Valid Architectures」に記述する。

これでエラーが出なくなるかもしれません。


1)の「Build Active Architecture Only」ですが、
これは"Yes"にすると現在選択された(転送先)端末に適した
アーキテクチャのみでビルドする、
という設定になるため、そのアーキテクチャが「Valid Architectures」にない場合は上記のエラーとなるようです。

以上でぇぇぇす。

2014年10月24日金曜日

[cocos2d-x] 謎の'string' file not foundエラー

どうも、俺@眠いです。

ある日突然、cocos2d-xでビルドを実行したときに
Lexical or Preprocessor Issue
'string' file not found

というエラーに出くわしました。

環境はMac OSX 10.9.5  +  Xcode v6.0.1 + cocos2d-x v2.1.5です。


ファイルに何も変更を加えておらず、
Clean → Buildを行った際に発生したので何がなんだかです。



エラーが発生しているファイルは、
CCDataVisitor.h
で、
#include <string>

の箇所でエラーが出ました。


ググると同じようなエラーに遭遇した人がたくさんいるようですが、
僕の場合は、

ビルド時にCCDatavisitor.hの#include で'string' file not foundというエラーが突然出るようになってハマったAdd Star


この方と同じ症状で、
Blockクラスを作成していました。

なぜだか理由は分かりませんが、
上記ブログと同じようにBlockクラスを削除して、別のクラス名にするとエラーがなくなりました。



以上でぇぇぇぇぇす。


2014年10月3日金曜日

Androidアプリ Lintエラーの対応

どうも、俺です。
しばらくなかったブログ更新を埋めるかのように連日投稿しています。

今日はAndroidアプリをeclipseでビルドするときに出るLinのエラー対応についてです。

■エラーその1
"xxxxx" is not translated "......"

→解決方法
 無視しましょう。

プロジェクト名>Properties>Android Lint Preferences
を選択、
MissingTranslationを選択してそのSeverityを"Warning"にしましょう。



これは、外部のライブラリ等を組み込んだ時に、
そのライブラリで設定されているローカライズ情報が、
開発中アプリまたはその他ライブラリに影響するために出るエラー、だそうです。。
要約すると、「言語リソースが足りねぇよ」というエラーです。


■エラーその2
"xxxx" is translated here but not found in default locale

→解決方法
google-play-servicesプロジェクト内にある
res>values-en-rIN>auth_strings.xmlをコピーして、
同じくgoogle-play-servicesプロジェクトの
res>valuesフォルダにペースト。



google-play-servicesを導入してから出るようになったエラーなので、
おそらくそれが原因っぽい。。



以上でぇぇぇぇぇぇす。