Android MediaPlayer prepare failed: status = 0x1
Asked Answered
A

3

9

I'm building an audio recorder that needs to play back the recorded sound. I'm running into a lot of trouble playing back the audio. I know that the file exists because I isolated it into a folder on my SD Card, but for some reason it can't play it back.

Here is my code:

public class RecorderEditActivity extends SherlockActivity implements
    DatabaseHelper.MetadataListener {

private long position;

private Button playButton = null;
private TextView date = null;
private EditText title = null;
private EditText notes = null;
private Button saveButton = null;

private MediaPlayer mediaPlayer = null;
private boolean isPlaying = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.edit_item);

    position = getIntent().getExtras().getLong(DatabaseHelper.KEY_ROWID);

    playButton = (Button) findViewById(R.id.play);
    date = (TextView) findViewById(R.id.recording_date);
    title = (EditText) findViewById(R.id.edit_title);
    notes = (EditText) findViewById(R.id.edit_notes);
    saveButton = (Button) findViewById(R.id.save_edit_button);

    mediaPlayer = new MediaPlayer();

    DatabaseHelper.getInstance(getApplicationContext()).getMetadataAsync(
            position, this);

    playButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!isPlaying) {
                playButton.setText(R.string.stop_text);
                try {
                    mediaPlayer = new MediaPlayer();
                    mediaPlayer
                            .setDataSource("sdcard/test/"
                                    + date.toString() + ".3gp");
                    mediaPlayer.prepare();
                    mediaPlayer.start();
                    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mp) {
                            mp.stop();
                        }
                    });
                } catch (Exception e) {
                    Log.e(e.getClass().getName(), e.getMessage(), e);
                }
            } else {
                playButton.setText(R.string.play_text);
                mediaPlayer.release();
            }
            isPlaying = !isPlaying;
        }
    });

Here are the errors from LogCat:

03-20 00:33:40.963: E/MediaPlayer(21268): error (1, -2147483648)
03-20 00:33:40.963: E/java.io.IOException(21268): Prepare failed.: status=0x1
03-20 00:33:40.963: E/java.io.IOException(21268): java.io.IOException: Prepare failed.: status=0x1
03-20 00:33:40.963: E/java.io.IOException(21268):   at android.media.MediaPlayer.prepare(Native Method)
03-20 00:33:40.963: E/java.io.IOException(21268):   at com.packagename.soundrecorder.RecorderEditActivity$1.onClick(RecorderEditActivity.java:56)
03-20 00:33:40.963: E/java.io.IOException(21268):   at android.view.View.performClick(View.java:4204)
03-20 00:33:40.963: E/java.io.IOException(21268):   at android.view.View$PerformClick.run(View.java:17355)
03-20 00:33:40.963: E/java.io.IOException(21268):   at android.os.Handler.handleCallback(Handler.java:725)
03-20 00:33:40.963: E/java.io.IOException(21268):   at android.os.Handler.dispatchMessage(Handler.java:92)
03-20 00:33:40.963: E/java.io.IOException(21268):   at android.os.Looper.loop(Looper.java:137)
03-20 00:33:40.963: E/java.io.IOException(21268):   at android.app.ActivityThread.main(ActivityThread.java:5041)
03-20 00:33:40.963: E/java.io.IOException(21268):   at java.lang.reflect.Method.invokeNative(Native Method)
03-20 00:33:40.963: E/java.io.IOException(21268):   at java.lang.reflect.Method.invoke(Method.java:511)
03-20 00:33:40.963: E/java.io.IOException(21268):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-20 00:33:40.963: E/java.io.IOException(21268):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-20 00:33:40.963: E/java.io.IOException(21268):   at dalvik.system.NativeStart.main(Native Method)

Hopefully someone can help me interpret and solve this problem. I've done a ton of research and nothing I do helps. Thanks :)

Abdomen answered 19/3, 2013 at 22:43 Comment(3)
In your code mediaPlayer object is being created twice i.e. once outside the loops and then in onClick function. Have you tried removing the mediaPlayer object before the getInstance call?Dermatosis
please post the file you are trying to playPhenyl
do you have <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> in your manifest file?Phenyl
A
7

I figured it out: Stupid mistakes as usual. I forgot to add the read external memory permission, and I have Vasily to thank for that fix because of your comment above. The other thing was that I didn't call getText() on my date TextView so it didn't properly set the file name.

Abdomen answered 20/3, 2013 at 13:30 Comment(1)
Could you accept this as the valid answer please. Thanks.Ingles
D
4

I think you are facing the issue due to an incorrect DataSource being set to your MediaPlayer. Can you please try your setDataSource with the following change

mediaPlayer.setDataSource("file://sdcard/test/"
             + date.toString() + ".3gp");

I think with this change, your code should work fine

EDIT: Please check this post MediaPlayer Preparing Failed for more details on the reason behind prefixing file:// to your file name.

Dermatosis answered 19/3, 2013 at 22:56 Comment(0)
A
1

I hope following code will help:

String soundPath = Environment.getExternalStorageDirectory().getPath() + "test/" + date.toString() + ".mp3";
mediaPlayer.setDataSource(soundPath);
Aureomycin answered 10/2, 2014 at 12:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.