Я хочу воспроизвести wav-файл, хранящийся во внешнем каталоге, но не могу создать экземпляр MediaPlayer - PullRequest
0 голосов
/ 16 мая 2019

Я пишу небольшое приложение, которое создает файлы WAV с помощью микрофона.Я использую класс AudioRecord и получаю необработанные данные, а затем сохраняю их в формате wav во внешнем хранилище.Проблема в том, что я не могу создать экземпляр MediaPlayer для сохраненных файлов WAV.Я могу открыть выбранный файл, и у меня есть разрешения на его чтение.Файлы WAV сохранены правильно (по крайней мере, я так думаю, потому что я могу играть на компьютере).Я был бы признателен за любую помощь:)

Что я получил до сих пор:

@Override
public void onRecordingClick(int position) {
    if (player == null) {
        String path = wavFilepathList.get(position);
        File audioFile = new File(path);

        Log.d("audioFileLog", "File exists: " + audioFile.exists() + ", can read: " + audioFile.canRead());

        player = new MediaPlayer();
        try {
            player.setDataSource(path);
            Log.d("audioFileLog", "Data Source Changed");
            player.setOnPreparedListener(this);
            Log.d("audioFileLog", "Listener Set, before prepare method");
            player.prepareAsync();
            Log.d("audioFileLog", "after prepare method");
        } catch (IOException e) {
            e.printStackTrace();
            Log.d("audioFileLog", "IOException when setting data source");
        }
    }
}

@Override
public void onPrepared(MediaPlayer mp) {
    mp.start();
    Log.d("audioFileLog", "after played method");
}

Logcat:

D/audioFileLog: File exists: true, can read: true
E/ExtMediaPlayer-JNI: env->IsInstanceOf fails
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
E/ExtMediaPlayer-JNI: env->IsInstanceOf fails
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
D/audioFileLog: Data Source Changed
D/audioFileLog: Listener Set, before prepare method
D/audioFileLog: after prepare method
E/MediaPlayer: error (1, -2147483648)
E/MediaPlayer: Error (1,-2147483648)

Старые эксперименты:
1)

public void onRecordingClick(int position) {
    if (player == null) {

        File selectedFile = new File(wavFilepathList.get(position));

        Log.d("Main", "voice exists : " + selectedFile.exists() +
                ", can read : " + selectedFile.canRead());
        player = MediaPlayer.create(this, Uri.fromFile(selectedFile));
    }
    player.start();
} // on recording clicked

Logcat:

D/Main: voice exists : true, can read : true  
E/ExtMediaPlayer-JNI: env->IsInstanceOf fails  
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0  
E/ExtMediaPlayer-JNI: env->IsInstanceOf fails  
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0  
E/MediaPlayer: error (1, -2147483648)  
D/MediaPlayer: create failed:  

2)

@Override
public void onRecordingClick(int position) {
    if (player == null) {

        player= new MediaPlayer();
        try {
            player.setDataSource(wavFilepathList.get(position));

            player.setOnPreparedListener(this);
            player.prepareAsync();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} // on recording clicked

@Override
public void onPrepared(MediaPlayer mp) {
    player.start();
}

Logcat:

E/ExtMediaPlayer-JNI: env->IsInstanceOf fails
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
E/ExtMediaPlayer-JNI: env->IsInstanceOf fails
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
E/MediaPlayer: error (1, -2147483648)
E/MediaPlayer: Error (1,-2147483648)  

1 Ответ

0 голосов
/ 16 мая 2019

Попробуйте настроить mediaPlayer следующим образом:

    try{
        File audioFile = new File("The File's Path");     //  audio.wav path
        if(audioFile.exists()){    
            Log.d("audioFileLog", "Found the file");
            MediaPlayer mp = new MediaPlayer();
            mp.setDataSource('audioFile.getPath());
            mp.prepare();
            mp.start();
        }else{
            Log.d("audioFileLog", "Did not find the file");
        }
    }catch(Exception ex){
        Log.d("audioFileLog", ex.toString());
    }

, а затем используйте:

mp.stop();
mp.release();

, когда вы закончите.

...