Android: IOException while trying to play .wav sound with MediaPlayer (Prepare failed)

453 views Asked by At

I'm building an app that produces a .wav sound file and saves it to the external storage:

/storage/emulated/0/speech.wav

The problem comes when I try to open and play the file. I'm getting this error:

    V/MediaPlayer-JNI: native_setup
    V/MediaPlayer: constructor
    V/MediaPlayer: setListener
    E/MediaPlayer-JNI: QCMediaPlayer mediaplayer NOT present
    V/MediaPlayer-JNI: setAudioStreamType: 3
    V/MediaPlayer: MediaPlayer::setAudioStreamType
    V/MediaPlayer-JNI: setDataSourceFD: fd 55
    V/MediaPlayer: setDataSource(55, 0, 576460752303423487)
    V/MediaPlayer: setVideoSurfaceTexture
    V/MediaPlayer: prepare
    V/MediaPlayer: message received msg=300, ext1=0, ext2=0
    V/MediaPlayer: Received SEC_MM_PLAYER_CONTEXT_AWARE
    V/MediaPlayer: callback application
    V/MediaPlayer: back from callback
    V/MediaPlayer: message received msg=100, ext1=1, ext2=-2147483648
    E/MediaPlayer: error (1, -2147483648)
    V/MediaPlayer: signal application thread
    V/MediaPlayer: prepare complete - status=1
    W/System.err: java.io.IOException: Prepare failed.: status=0x1
    W/System.err:     at android.media.MediaPlayer._prepare(Native Method)
    W/System.err:     at android.media.MediaPlayer.prepare(MediaPlayer.java:1307)
    W/System.err:     at com.gdoldurov.lorapersonalweatherassistant.MainActivity$SynthesizeSpeech.onPostExecute(MainActivity.java:262)
    W/System.err:     at com.gdoldurov.lorapersonalweatherassistant.MainActivity$SynthesizeSpeech.onPostExecute(MainActivity.java:197)
    W/System.err:     at android.os.AsyncTask.finish(AsyncTask.java:636)
    W/System.err:     at android.os.AsyncTask.access$500(AsyncTask.java:177)
    W/System.err:     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
    W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
    W/System.err:     at android.os.Looper.loop(Looper.java:135)
    W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5910)
    W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
    W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)

When I try to open the file on the phone it says "File not supported". But when I connect the phone to my pc(via USB) I can open the file on the computer and it plays just fine. I have the

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

permissions. Here is my code:

      protected void onPostExecute(File f){
        try {
            String fn = f.getAbsolutePath();
            //AssetManager am = getAssets();
           // AssetFileDescriptor afd = am.openFd(fn);
            final MediaPlayer player = new MediaPlayer();
            FileInputStream fis = null;
            fis = new FileInputStream(f);
            player.setAudioStreamType(AudioManager.STREAM_MUSIC);
            player.setDataSource(fis.getFD());
            player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    player.start();
                }
            });
            //player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
            player.prepare();
            //player.start();
            player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    mp.release();

                }
            });
            player.setLooping(false);

        }catch(Exception e){
            e.printStackTrace();
        }

    }
0

There are 0 answers