質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1841閲覧

AndroidStudioでCocos2dxSound.javaのエラーメッセージ

5_m_8_r_9

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/04/16 14:52

編集2017/04/18 09:53

###前提・実現したいこと
AndroidStudioでCocos2dx(cpp)のアプリをデバッグしていると以下のようなエラーメッセージが。音関連(実際音はなってない)なのとjava関連のファイル?が開けてないのはわかりましたが、具体的にどこを修正すればいいのかわかりません...

###発生している問題・エラーメッセージ

console欄エラーメッセージ

E/Cocos2dxSound: error: java.io.FileNotFoundException: at android.content.res.AssetManager.openAssetFd(Native Method) at android.content.res.AssetManager.openFd(AssetManager.java:339) at org.cocos2dx.lib.Cocos2dxSound.createSoundIDFromAsset(Cocos2dxSound.java:282) at org.cocos2dx.lib.Cocos2dxSound.preloadEffect(Cocos2dxSound.java:108) at org.cocos2dx.lib.Cocos2dxSound.playEffect(Cocos2dxSound.java:149) at org.cocos2dx.lib.Cocos2dxHelper.playEffect(Cocos2dxHelper.java:268) at org.cocos2dx.lib.Cocos2dxRenderer.nativeRender(Native Method) at org.cocos2dx.lib.Cocos2dxRenderer.onDrawFrame(Cocos2dxRenderer.java:104) at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1523) at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)

MainScene.cpp

C++

1#include "MainScene.h" 2#include "SimpleAudioEngine.h" 3 4USING_NS_CC; 5 6MainScene::MainScene() { 7} 8 9MainScene::~MainScene() { 10} 11 12Scene* MainScene::createScene() { 13 auto scene = Scene::create(); 14 auto layer = MainScene::create(); 15 scene->addChild(layer); 16 return scene; 17} 18 19bool MainScene::init() { 20 if ( !Layer::init() ) { 21 return false; 22 } 23 CocosDenshion::SimpleAudioEngine::getInstance()->preloadBackgroundMusic("main.mp3"); 24 25 return true; 26} 27 28void MainScene::onEnter() { 29 Layer::onEnter(); 30} 31 32void MainScene::onEnterTransitionDidFinish() { 33 Layer::onEnterTransitionDidFinish(); 34 35 CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("main.mp3", true); 36}

Cocos2dxSound.java エラー付近(108,149,282)

//(略) public int preloadEffect(final String path) { if (CocosPlayClient.isEnabled() && !CocosPlayClient.isDemo()) { CocosPlayClient.updateAssets(path); } CocosPlayClient.notifyFileLoaded(path); Integer soundID = this.mPathSoundIDMap.get(path); if (soundID == null) { soundID = this.createSoundIDFromAsset(path); // save value just in case if file is really loaded if (soundID != Cocos2dxSound.INVALID_SOUND_ID) { this.mPathSoundIDMap.put(path, soundID); } } return soundID; } //(略) public int playEffect(final String path, final boolean loop, float pitch, float pan, float gain){ Integer soundID = this.mPathSoundIDMap.get(path); int streamID = Cocos2dxSound.INVALID_STREAM_ID; if (soundID != null) { // parameters; pan = -1 for left channel, 1 for right channel, 0 for both channels // play sound streamID = this.doPlayEffect(path, soundID, loop, pitch, pan, gain); } else { // the effect is not prepared soundID = this.preloadEffect(path); if (soundID == Cocos2dxSound.INVALID_SOUND_ID) { // can not preload effect return Cocos2dxSound.INVALID_SOUND_ID; } SoundInfoForLoadedCompleted info = new SoundInfoForLoadedCompleted(path, loop, pitch, pan, gain); mPlayWhenLoadedEffects.putIfAbsent(soundID, info); synchronized(info) { try { info.wait(LOAD_TIME_OUT); } catch (Exception e) { e.printStackTrace(); } } streamID = info.effectID; mPlayWhenLoadedEffects.remove(soundID); } return streamID; } //(略) public int createSoundIDFromAsset(final String path) { int soundID = Cocos2dxSound.INVALID_SOUND_ID; try { if (path.startsWith("/")) { soundID = this.mSoundPool.load(path, 0); } else { soundID = this.mSoundPool.load(this.mContext.getAssets().openFd(path), 0); } } catch (final Exception e) { soundID = Cocos2dxSound.INVALID_SOUND_ID; Log.e(Cocos2dxSound.TAG, "error: " + e.getMessage(), e); } // mSoundPool.load returns 0 if something goes wrong, for example a file does not exist if (soundID == 0) { soundID = Cocos2dxSound.INVALID_SOUND_ID; } return soundID; }

Cocos2dxHelper.java:268付近

public static int playEffect(final String path, final boolean isLoop, final float pitch, final float pan, final float gain) { return Cocos2dxHelper.sCocos2dSound.playEffect(path, isLoop, pitch, pan, gain); }

Cocos2dxRenderer.java:104付近

public void onDrawFrame(final GL10 gl) { /* * No need to use algorithm in default(60 FPS) situation, * since onDrawFrame() was called by system 60 times per second by default. */ if (sAnimationInterval <= 1.0 / 60 * Cocos2dxRenderer.NANOSECONDSPERSECOND) { Cocos2dxRenderer.nativeRender(); } else { final long now = System.nanoTime(); final long interval = now - this.mLastTickInNanoSeconds; if (interval < Cocos2dxRenderer.sAnimationInterval) { try { Thread.sleep((Cocos2dxRenderer.sAnimationInterval - interval) / Cocos2dxRenderer.NANOSECONDSPERMICROSECOND); } catch (final Exception e) { } } /* * Render time MUST be counted in, or the FPS will slower than appointed. */ this.mLastTickInNanoSeconds = System.nanoTime(); Cocos2dxRenderer.nativeRender(); } }

###補足情報
cocos2d-x-3.9
AndroidStudio2.2.3

(追記)再生しようとしているファイルはmp3です。Resources/bgm/main.mp3
(追記)元のMainScene.cpp(BGM鳴らしたいだけのコードですが)とエラーの発生しているCocosなんちゃら.javaの該当部分を追記させていただきました。AssetManager.java、GLSurfaceView.javaはconsole欄で灰色表示になってたので弄らないでということでしょうか、、、不足がありましたらまた書き込ませていただきますのでよろしくお願いします。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mingos

2017/04/18 08:35

java.io.FileNotFoundExceptionなので、再生しようとしているmp3ファイルのパスが正しくない可能性があるとしか言えないです。エラーが発生しているcocos2d-x側のコードも掲載してもらえますか?
5_m_8_r_9

2017/04/18 09:55

メインソースとエラー該当箇所の.javaのソース?を追記させていただきました。まだ不足してましたらさらに追記させていただきますのでよろしくお願いします...
guest

回答1

0

ベストアンサー

載せてもらったコードでは、"main.mp3"を再生しようとしていますよね。

cpp

1CocosDenshion::SimpleAudioEngine::getInstance()->preloadBackgroundMusic("main.mp3");

しかし、実際に再生したいファイルの場所は、Resources/bgm/main.mp3にあるとの事ですが、その場合はこのように書く必要があると思います。

cpp

1 CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("bgm/main.mp3", true);

このパターンでは、単純にパスの指定の誤りという事になると思います。
しかし、AppDelegate.cppで、FileUtils::getInstance()->addSearchPath("bgm");を実行しているのであれば、別の原因がありそうです。

投稿2017/04/18 10:02

mingos

総合スコア4025

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

5_m_8_r_9

2017/04/18 10:41

そこが原因でしたか...!意外と身近なところにミスがあってショックです(てっきり.javaの部分にエラーがあるのかと思ってしまってました...)書き換えてみたところ音が鳴るようになりました。次からはFileUtils::getInstance()->addSearchPath("○○");系を先に追加しておこうと思います。ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問