Unable to to create media player usando o Cocos2D

Estou estudando a criação de jogos pelo livro “Desenvolvendo jogos para android” do Anderson Leite, porem, apesar de estar fazendo exatamente o que o livro mostra, um erro relacionado ao som persiste.

O erro

07-21 16:52:28.216: I/jogo(916): clickou na tela.
07-21 16:52:28.216: I/Jogo(916): Clickoun no play
07-21 16:52:28.226: V/MediaPlayer(916): constructor
07-21 16:52:28.226: V/SoundPoolThread(916): beginThread
07-21 16:52:28.226: V/MediaPlayer(916): setListener
07-21 16:52:28.226: V/MediaPlayer(916): setDataSource(44, 397263, 31881)
07-21 16:52:28.236: V/SoundPoolThread(916): run
07-21 16:52:28.236: V/SoundPoolThread(916): Got message m=2, mData=1
07-21 16:52:28.236: V/MediaPlayer(916): decode(51, 461017, 31789)
07-21 16:52:28.266: E/MediaPlayer(916): Unable to to create media player
07-21 16:52:28.266: D/MediaPlayer(916): create failed:
07-21 16:52:28.266: D/MediaPlayer(916): java.io.IOException: setDataSourceFD failed.: status=0x80000000
07-21 16:52:28.266: D/MediaPlayer(916): 	at android.media.MediaPlayer.setDataSource(Native Method)
07-21 16:52:28.266: D/MediaPlayer(916): 	at android.media.MediaPlayer.create(MediaPlayer.java:849)
07-21 16:52:28.266: D/MediaPlayer(916): 	at org.cocos2d.sound.SoundEngine.playSound(SoundEngine.java:152)
07-21 16:52:28.266: D/MediaPlayer(916): 	at br.com.casadocodigo.bis.scenes.GameScene.<init>(GameScene.java:56)
07-21 16:52:28.266: D/MediaPlayer(916): 	at br.com.casadocodigo.bis.scenes.GameScene.createGame(GameScene.java:79)
07-21 16:52:28.266: D/MediaPlayer(916): 	at br.com.casadocodigo.bis.controles.MenuButtons.buttonClicked(MenuButtons.java:63)
07-21 16:52:28.266: D/MediaPlayer(916): 	at br.com.casadocodigo.bis.controles.Button.ccTouchesBegan(Button.java:43)
07-21 16:52:28.266: D/MediaPlayer(916): 	at org.cocos2d.events.CCTouchHandler.ccTouchesBegan(CCTouchHandler.java:63)
07-21 16:52:28.266: D/MediaPlayer(916): 	at org.cocos2d.events.CCTouchDispatcher.update(CCTouchDispatcher.java:305)
07-21 16:52:28.266: D/MediaPlayer(916): 	at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:646)
07-21 16:52:28.266: D/MediaPlayer(916): 	at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1522)
07-21 16:52:28.266: D/MediaPlayer(916): 	at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
07-21 16:52:28.276: W/dalvikvm(916): threadid=11: thread exiting with uncaught exception (group=0x4156d2a0)
07-21 16:52:28.286: E/SoundPool(916): Unable to load sample: (null)
07-21 16:52:28.286: V/SoundPoolThread(916): Got message m=2, mData=2
07-21 16:52:28.286: V/MediaPlayer(916): decode(52, 333568, 31778)
07-21 16:52:28.286: E/AndroidRuntime(916): FATAL EXCEPTION: GLThread 2591
07-21 16:52:28.286: E/AndroidRuntime(916): java.lang.NullPointerException
07-21 16:52:28.286: E/AndroidRuntime(916): 	at org.cocos2d.sound.SoundEngine.playSound(SoundEngine.java:155)
07-21 16:52:28.286: E/AndroidRuntime(916): 	at br.com.casadocodigo.bis.scenes.GameScene.<init>(GameScene.java:56)
07-21 16:52:28.286: E/AndroidRuntime(916): 	at br.com.casadocodigo.bis.scenes.GameScene.createGame(GameScene.java:79)
07-21 16:52:28.286: E/AndroidRuntime(916): 	at br.com.casadocodigo.bis.controles.MenuButtons.buttonClicked(MenuButtons.java:63)
07-21 16:52:28.286: E/AndroidRuntime(916): 	at br.com.casadocodigo.bis.controles.Button.ccTouchesBegan(Button.java:43)
07-21 16:52:28.286: E/AndroidRuntime(916): 	at org.cocos2d.events.CCTouchHandler.ccTouchesBegan(CCTouchHandler.java:63)
07-21 16:52:28.286: E/AndroidRuntime(916): 	at org.cocos2d.events.CCTouchDispatcher.update(CCTouchDispatcher.java:305)
07-21 16:52:28.286: E/AndroidRuntime(916): 	at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:646)
07-21 16:52:28.286: E/AndroidRuntime(916): 	at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1522)
07-21 16:52:28.286: E/AndroidRuntime(916): 	at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
07-21 16:52:28.306: E/SoundPool(916): Unable to load sample: (null)
07-21 16:52:28.306: V/SoundPoolThread(916): Got message m=2, mData=3
07-21 16:52:28.306: V/MediaPlayer(916): decode(53, 429190, 31780)
07-21 16:52:28.316: E/SoundPool(916): Unable to load sample: (null)

As classes

Classe principal

[code]
package br.com.casadocodigo.bis.scenes;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import org.cocos2d.layers.CCLayer;
import org.cocos2d.layers.CCScene;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.sound.SoundEngine;
import org.cocos2d.types.CGPoint;
import org.cocos2d.types.CGRect;

import android.util.Log;
import br.com.casadocodigo.bis.R;
import br.com.casadocodigo.bis.config.Assets;
import br.com.casadocodigo.bis.engines.GameButtons;
import br.com.casadocodigo.bis.engines.Meteor;
import br.com.casadocodigo.bis.engines.MeteorsEngine;
import br.com.casadocodigo.bis.engines.Player;
import br.com.casadocodigo.bis.engines.Shoot;
import br.com.casadocodigo.bis.interfaces.MeteorsEngineDelegate;
import br.com.casadocodigo.bis.interfaces.ShootEngineDelegate;
import br.com.casadocodigo.bis.objetos.Score;
import br.com.casadocodigo.bis.screens.ScreenBackground;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenWidth;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenHeight;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenResolution;

public class GameScene extends CCLayer implements MeteorsEngineDelegate, ShootEngineDelegate{

private ScreenBackground background;

private MeteorsEngine meteorsEngine;

private CCLayer meteorsLayer;
private CCLayer playerLayer;
private Player player;
private CCLayer shootLayer;
private CCLayer scoreLayer;


private ArrayList<Meteor> meteorsArray;	
private ArrayList<Player> playerArray;	
private ArrayList<Shoot> shootArray;

private Score score;


	
private GameScene() {
	//sons
	preloadCache();
	SoundEngine.sharedEngine().playSound(
			CCDirector.sharedDirector().getActivity(),
			br.com.casadocodigo.bis.R.raw.music, true);
	this.background=new ScreenBackground(Assets.BACKGROUND);
	this.background.setPosition(
			screenResolution(CGPoint.ccp(screenWidth()/2.0f, screenHeight()/2.0f)));
	this.addChild(background);
	this.meteorsLayer=CCLayer.node();
	this.addChild(this.meteorsLayer);
	this.playerLayer=CCLayer.node();
	this.addChild(this.playerLayer);
	GameButtons gameButtonsLayer = GameButtons.gameButtons();
	gameButtonsLayer.setDelegate(this);
	this.addChild(gameButtonsLayer);	
	this.shootLayer=CCLayer.node();
	this.addChild(this.shootLayer);
	this.scoreLayer=CCLayer.node();
	this.addChild(this.scoreLayer);
	this.addGameObjects();
}

public static CCScene createGame(){
	CCScene scene = CCScene.node();
	GameScene layer = new GameScene();
	scene.addChild(layer);		
	return scene;
}

@Override
public void createMeteors(Meteor meteor) {
	this.meteorsLayer.addChild(meteor);
	meteor.setDelegate(this);
	meteor.start();		
	this.meteorsArray.add(meteor);
}

public void addGameObjects() {
	this.meteorsArray= new ArrayList<Meteor>();
	this.meteorsEngine=new MeteorsEngine();
	this.player = new Player();
	this.playerLayer.addChild(this.player);
	this.shootArray=new ArrayList<Shoot>();
	this.playerArray=new ArrayList<Player>();
	this.playerArray.add(this.player);
	this.player.setDelegate(this);
	this.score=new Score();
	this.scoreLayer.addChild(this.score);
}

@Override
public void onEnter() {
	// TODO Auto-generated method stub
	super.onEnter();
	this.schedule("checkHits");
	this.startEngines();
}

public void startEngines() {
	this.addChild(this.meteorsEngine);
	this.meteorsEngine.setDelegate(this);
}

@Override
public void createShoot(Shoot shoot) {
	this.shootLayer.addChild(shoot);		
	shoot.setDelegate(this);
	shoot.start();		
	this.shootArray.add(shoot);
	System.out.println("quantidade de balas " + this.shootArray.size());
	System.out.println("quantidade de meteoros " + this.meteorsArray.size());
}

public boolean shoot(){
	player.shoot();
	return true;
}

public void moveRight(){
	player.moveRight();
}

public void moveLeft(){
	player.moveLeft();
}

//captura a posição e bordas do objeto
public CGRect getBoarders(CCSprite object){
	CGRect rect = object.getBoundingBox();
	CGPoint point = rect.origin;
	CGRect cgRect = CGRect.make(point.x, point.y,
			rect.size.width,rect.size.height);
	return cgRect;
	
}
//checa colisao
public boolean checkRadiusHitsOfArray(List<? extends CCSprite> array1,
		List<? extends CCSprite> array2,GameScene gameScene, String hit){
	boolean result=false;
	System.out.println(array1.size());
	for(int i = 0; i < array1.size();i++){
		System.out.println("numero de meteoros" +i);
		//pega o objeto do primeiro array
		CGRect rect1 = getBoarders(array1.get(i));
		for(int j = 0; i < array2.size();i++){
			System.out.println("numero de shoots " +j);
			//pega objeto do segundo array
			CGRect rect2 = getBoarders(array2.get(j));
			//verifica colisao
			if(CGRect.intersects(rect1, rect2)){
				Log.i("jogo", "Colisao detectada: "+hit);
				result=true;
				Method method;
				try {
					method=GameScene.class.getMethod(hit,
							CCSprite.class,CCSprite.class);
					method.invoke(gameScene, array1.get(i),array2.get(j));
				}catch(SecurityException e1){
					e1.printStackTrace();
				}catch(NoSuchMethodException e2){
					e2.printStackTrace();
				}catch(IllegalAccessException e3){
					e3.printStackTrace();
				}catch(IllegalArgumentException e4){
					e4.printStackTrace();
				}catch(InvocationTargetException e5){
					e5.printStackTrace();
				}
			}
		}
	}
	return result;
}

public void meteoroHit(CCSprite meteor,CCSprite shoot) {
	this.score.increase();
	((Meteor) meteor).shooted();
	((Shoot) shoot).explode();

}

private void playerHit(CCSprite meteor, CCSprite player) {
	((Meteor)meteor).shooted();
	((Player)player).explode();
}

//em tempo em tempo verifica se há colisoes
public void checkHits(float dt) {
	this.checkRadiusHitsOfArray(this.meteorsArray,
			this.shootArray, this, "meteoroHit");
	this.checkRadiusHitsOfArray(this.meteorsArray,
			this.playerArray,this, "playerHit");
}

@Override
public void removeMeteor(Meteor meteor) {
	this.meteorsArray.remove(meteor);
	
}

@Override
public void removeShoot(Shoot shoot) {
	this.shootArray.remove(shoot);
	
}

private void preloadCache() {
	SoundEngine.sharedEngine().preloadEffect(
			CCDirector.sharedDirector().getActivity(),
			br.com.casadocodigo.bis.R.raw.shoot);
	SoundEngine.sharedEngine().preloadEffect(
			CCDirector.sharedDirector().getActivity(),
			br.com.casadocodigo.bis.R.raw.bang);
	SoundEngine.sharedEngine().preloadEffect(
			CCDirector.sharedDirector().getActivity(),
			br.com.casadocodigo.bis.R.raw.over);
	

}

}[/code]

[code]
package br.com.casadocodigo.bis.engines;

import org.cocos2d.actions.instant.CCCallFunc;
import org.cocos2d.actions.interval.CCFadeOut;
import org.cocos2d.actions.interval.CCScaleBy;
import org.cocos2d.actions.interval.CCSequence;
import org.cocos2d.actions.interval.CCSpawn;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.sound.SoundEngine;
import org.cocos2d.types.CGPoint;

import br.com.casadocodigo.bis.R;
import br.com.casadocodigo.bis.config.Assets;
import br.com.casadocodigo.bis.interfaces.ShootEngineDelegate;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenWidth;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenHeight;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenResolution;

public class Shoot extends CCSprite {

private ShootEngineDelegate delegate;

float positionX,positionY;

public Shoot(float positionX, float positionY) {
	super(Assets.SHOOT);
	this.positionX = positionX;
	this.positionY = positionY;
	setPosition(this.positionX, this.positionY);
	this.schedule("update");
}

public void update(float dt){
	positionY += 2;
	this.setPosition(screenResolution(CGPoint.ccp(positionX, positionY)));
}


public void setDelegate(ShootEngineDelegate delegate) {
	this.delegate = delegate;
}

public void start() {
	SoundEngine.sharedEngine().	playEffect(
			CCDirector.sharedDirector().getActivity(),
			br.com.casadocodigo.bis.R.raw.shoot);

}

public void explode() {
	//remove array
	this.delegate.removeShoot(this);
	//para o agendamento
	this.unschedule("update");
	//cria efeitos
	float dt=0.2f;
	CCScaleBy a1 = CCScaleBy.action(dt, 2f);
	CCFadeOut a2 = CCFadeOut.action(dt);
	CCSpawn s1 = CCSpawn.actions(a1, a2);
	//funçao a ser executada depois do efeito
	CCCallFunc c1 = CCCallFunc.action(this, "removeMe");
	//roda efeito
	this.runAction(CCSequence.actions(s1, c1));
}

public void removeMe() {
	this.removeFromParentAndCleanup(true);
}

}[/code]

package br.com.casadocodigo.bis.engines;

import java.util.Random;

import org.cocos2d.actions.instant.CCCallFunc;
import org.cocos2d.actions.interval.CCFadeOut;
import org.cocos2d.actions.interval.CCScaleBy;
import org.cocos2d.actions.interval.CCSequence;
import org.cocos2d.actions.interval.CCSpawn;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.sound.SoundEngine;
import org.cocos2d.types.CGPoint;

import br.com.casadocodigo.bis.R;
import br.com.casadocodigo.bis.interfaces.MeteorsEngineDelegate;

import static br.com.casadocodigo.bis.config.DeviceSettings.screenWidth;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenHeight;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenResolution;

public class Meteor extends CCSprite {
	
	private float x,y;
	private MeteorsEngineDelegate delegate;
	
	public Meteor(String image) {
		super(image);
		x = new Random().nextInt(Math.round((screenWidth())));
		y = screenHeight();
	}
	
	public void start() {
		this.schedule("update");
	}
	
	public void update(float dt){
		y -= 1;
		this.setPosition(CGPoint.ccp(x, y));
	}


	public void setDelegate(MeteorsEngineDelegate delegate) {
		this.delegate = delegate;
	}
	
	public void shooted() {
		SoundEngine.sharedEngine().playEffect(
				CCDirector.sharedDirector().getActivity(),
				br.com.casadocodigo.bis.R.raw.bang);
		SoundEngine.sharedEngine().pauseSound();
		this.delegate.removeMeteor(this);
		this.unschedule("upadate");
		float dt = 0.2f;
		//diminui o meteoro
		CCScaleBy a1 = CCScaleBy.action(dt, 0.5f);
		//efeito fade
		CCFadeOut a2 = CCFadeOut.action(dt);
		CCSpawn s1 = CCSpawn.actions(a1, a2);
		CCCallFunc c1 = CCCallFunc.action(this, "removeMe");
		this.runAction(CCSequence.actions(s1, c1));
	}	
	
	public void removeMe() {
		this.removeFromParentAndCleanup(true);
	}

}

[code]
package br.com.casadocodigo.bis.engines;

import org.cocos2d.actions.interval.CCFadeOut;
import org.cocos2d.actions.interval.CCScaleBy;
import org.cocos2d.actions.interval.CCSequence;
import org.cocos2d.actions.interval.CCSpawn;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.sound.SoundEngine;

import br.com.casadocodigo.bis.R;
import br.com.casadocodigo.bis.config.Assets;
import br.com.casadocodigo.bis.interfaces.ShootEngineDelegate;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenWidth;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenHeight;
import static br.com.casadocodigo.bis.config.DeviceSettings.screenResolution;

public class Player extends CCSprite{

float positionX =  screenWidth()/2;
float positionY = 50;
private ShootEngineDelegate delegate;

public Player() {
	super(Assets.NAVE);
	setPosition(positionX, positionX);
}

public void setDelegate(ShootEngineDelegate delegate){
	this.delegate=delegate;
}

public void shoot(){
	this.delegate.createShoot(new Shoot(positionX,positionY));
}

public void moveLeft(){
	if(positionX > 30){
		positionX -=10;
	}
	setPosition(positionX, positionY);
}

public void moveRight(){
	if(positionX < screenWidth() -30){
		positionX += 10;
	}
	setPosition(positionX, positionY);
}

public void explode() {
	//this.unschedule("update");
	SoundEngine.sharedEngine().playEffect(
			CCDirector.sharedDirector().getActivity(),
			br.com.casadocodigo.bis.R.raw.over);
	float dt=0.2f;
	CCScaleBy a1 = CCScaleBy.action(dt, 2f);
	CCFadeOut a2 = CCFadeOut.action(dt);
	CCSpawn s1 = CCSpawn.actions(a1, a2);
	this.runAction(CCSequence.actions(s1));
}

}[/code]

Estou com o mesmo problema. Alguém pode ajudar?

Amigo, o erro é bem bobo, porem não me recordo agora, darei uma olhada quando chegar em casa.

Mas se tu esta cansado de ter que se matar para encontrar referencias do cocos2d para Java e estiver disposto a aprender outra framework, te indico o libgdx ( http://libgdx.badlogicgames.com/documentation.html ), ele é um pouco mais complicado, porem a vasta quantidade de referencias, tutoriais, exemplos, tudo feito especialmente em Java e para Android acaba se tornando mais negocio.

De qualquer modo se tiver tempo vejo qual a solução deste problema em questão.

Obrigado amigo, vou dar uma olhada assim que possivel neste framework. Valeu.