java.lang.RuntimeException: setAudioSource failed

后端 未结 8 2134
灰色年华
灰色年华 2021-01-01 15:13

I am new to android development. I am just trying to record an audio with android studio(2.1.1) testing with 6.0.1 Marshmallow device.

public class MainActiv         


        
8条回答
  •  不知归路
    2021-01-01 15:29

    try this code

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.record_btn:
                recordAudio();
                break;
            case R.id.play_pause_btn:
                playAudio();
                break;
        }
    }
    
    private void playAudio() {
        if (mPlaying) {
            record_btn.setEnabled(false);
            startPlaying();
            play_pause_btn.setText("Stop Playing");
            mPlaying = false;
        } else {
            stopPlaying();
            play_pause_btn.setText("Start Playing");
            mPlaying = true;
            record_btn.setEnabled(true);
        }
    }
    
    private void startPlaying() {
        mAudioPlayer = new MediaPlayer();
        try {
            mAudioPlayer.setDataSource(mFilename);
            mAudioPlayer.prepare();
            updatingPlyingProgressBar();
            mAudioPlayer.start();
            showProgressforPlaying();
    
        } catch (IOException e) {
            e.printStackTrace();
        }
        mAudioPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                playAudio();
            }
        });
    }
    
    private void updatingPlyingProgressBar() {
        long maxTime = mAudioPlayer.getDuration();
        int second = (int) maxTime / 1000;
        playing_audio_progressBar.setMax(second * 1000);
        playing_audio_progressBar.setProgress(0);
        playing_audio_max_time.setText(second > 9 ? "00:" + second : "00:0" + second);
    }
    
    private void stopPlaying() {
        mAudioPlayer.stop();
        mAudioPlayer.release();
        mPlayingTimer.cancel();
        mAudioPlayer = null;
    }
    
    private void showProgressforPlaying() {
        seconds = 0;
        mPlayingTimer = new Timer();
        mPlayingTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                if (!mPlaying) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (playing_audio_progressBar.getProgress() < mAudioPlayer.getDuration()) {
                                playing_audio_progressBar.setProgress(playing_audio_progressBar.getProgress() + 1000);
                                seconds++;
                                playing_audio_time.setText(seconds > 9 ? "00:" + seconds : "00:0" + seconds);
                            } else {
                                playAudio();
                            }
                        }
                    });
                }
            }
        }, 1000, 1000);
    }
    
    private void recordAudio() {
        if (mRecording) {
            play_pause_btn.setEnabled(false);
            mRecording = false;
            audio_recording_progressBar.setMax(MAXTIME);
            audio_recording_progressBar.setProgress(0);
            startRecording();
            showProgressforRecording();
            record_btn.setText("Stop");
    
        } else {
            stopRecording();
            record_btn.setText("Record");
            mRecording = true;
            mRecordingtimer.cancel();
            play_pause_btn.setEnabled(true);
        }
    }
    
    private void stopRecording() {
        mAudioRecorder.stop();
        mAudioRecorder.release();
        mAudioRecorder = null;
    
    }
    
    private void startRecording() {
        mAudioRecorder = new MediaRecorder();
        mFilename = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AudioRecordDemo/" + "Audio" + System.currentTimeMillis() + ".3gp";
    
        mAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mAudioRecorder.setOutputFile(mFilename);
        mAudioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        try {
            mAudioRecorder.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        mAudioRecorder.start();
    }
    
    private void showProgressforRecording() {
        seconds = 0;
        mRecordingtimer = new Timer();
        mRecordingtimer.schedule(new TimerTask() {
            @Override
            public void run() {
                if (!mRecording) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (audio_recording_progressBar.getProgress() < MAXTIME) {
                                audio_recording_progressBar.setProgress(audio_recording_progressBar.getProgress() + 1000);
                                seconds++;
                                recorded_audio_time.setText(seconds > 9 ? "00:" + seconds : "00:0" + seconds);
                            } else {
                                recordAudio();
                            }
                        }
                    });
                }
            }
        }, 1000, 1000);
    }
    

提交回复
热议问题