Local Sound File Play

I changed the “Cocos2dxMusic.java”.

    private MediaPlayer createMediaplayerFromAssets(String path){
        MediaPlayer mediaPlayer = new MediaPlayer();

        try{
            if(path.substring(0, 1).equals("/"))
            {
                mediaPlayer.setDataSource(path);
            }
            else
            {
                AssetFileDescriptor assetFileDescritor = mContext.getAssets().openFd(path);
                mediaPlayer.setDataSource(assetFileDescritor.getFileDescriptor(), 
                        assetFileDescritor.getStartOffset(), assetFileDescritor.getLength());
            }
            mediaPlayer.prepare();

            mediaPlayer.setVolume(mLeftVolume, mRightVolume);
        }catch (Exception e) {
            mediaPlayer = null;
            Log.e(TAG, "error: " + e.getMessage(), e);
        }

        return mediaPlayer;
    }

I changed the “Cocos2dxSound.java”.

    public int createSoundIdFromAsset(String path){
        int soundId = INVALID_SOUND_ID;

        try {
            if(path.substring(0, 1).equals("/"))
            {
                soundId = mSoundPool.load(path, 0);
            }
            else
            {
                soundId = mSoundPool.load(mContext.getAssets().openFd(path), 0);
            }
        } catch(Exception e){
             Log.e(TAG, "error: " + e.getMessage(), e);
        }

        return soundId;
    }

Thank you for userful information

However, there was a case where a file could not be read.
Thus I changed as follows.

    private MediaPlayer createMediaplayerFromAssets(String path){
        MediaPlayer mediaPlayer = null;

        try{
            mediaPlayer = new MediaPlayer();
            if(path.substring(0, 1).equals("/")) {
                FileInputStream fis = new FileInputStream(path);
                mediaPlayer.setDataSource(fis.getFD());
            } else {
                AssetFileDescriptor assetFileDescritor = mContext.getAssets().openFd(path);
                mediaPlayer.setDataSource(assetFileDescritor.getFileDescriptor(),
                        assetFileDescritor.getStartOffset(), assetFileDescritor.getLength());
            }
            mediaPlayer.prepare();
            mediaPlayer.setVolume(mLeftVolume, mRightVolume);

        }catch (Exception e) {
            mediaPlayer = null;
            Log.e(TAG, "error: " + e.getMessage(), e);
        }

        return mediaPlayer;
    }

Thank you for reading.

Tomoaki

Could you tell us which case where a file could not be read?

The file of a path like the following could not be read.
“/data/data/(project name)/files/hogehoge.mp3”

I referred to the following.
Android playing resource files from internal storage causes MediaPlayer.prepare to give IOException