Воспроизведение записанного звука с помощью счетчика хронометра - PullRequest
0 голосов
/ 27 ноября 2018

Я создаю приложение для записи с счетчиком хронометра, хронометр работает нормально с началом записи, остановкой записи и остановкой воспроизведения.

Моя проблема только в запуске воспроизведения, при нажатии кнопки начала воспроизведенияхронометр начинается с 0, но я не могу остановить хронометр, когда аудиофайл останавливается.

Это код запуска воспроизведения, пожалуйста, помогите.Любая помощь, я очень признателен

playAudio.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) throws IllegalArgumentException,
                SecurityException, IllegalStateException {

            stopRecord.setEnabled(false);
            startRecord.setEnabled(false);
            stopAudio.setEnabled(true);
            mediaPlayer = new MediaPlayer();
            try {
                mediaPlayer.setDataSource(AudioSavePathInDevice);
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (!running) {
                myChronometer.setBase(SystemClock.elapsedRealtime() - pauseOffset);
                 myChronometer.start();
                running = true;

                // myChronometer.stop();
            }
            mediaPlayer.start();



            Toast.makeText(MainActivity.this, "Recording Playing",
                    Toast.LENGTH_LONG).show();
        }
    });

Сэр, это код остановки звука

stopAudio.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (running) {
                myChronometer.stop();
                myChronometer.setBase(SystemClock.elapsedRealtime());
                pauseOffset = 0;
                pauseOffset = SystemClock.elapsedRealtime() - myChronometer.getBase();
                running = false;
            }

            stopRecord.setEnabled(false);
            startRecord.setEnabled(true);
            stopAudio.setEnabled(false);
            playAudio.setEnabled(true);


            if(mediaPlayer != null){
                mediaPlayer.stop();
                mediaPlayer.release();
             //   MediaRecorderReady();

                //resetmymyChronometer
                myChronometer.setBase(SystemClock.elapsedRealtime());
                pauseOffset = 0;

            }
        }
    });

это код остановки записи

stopRecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (running) {
                myChronometer.stop();
                myChronometer.setBase(SystemClock.elapsedRealtime());
                pauseOffset = 0;
                pauseOffset = SystemClock.elapsedRealtime() - myChronometer.getBase();
                running = false;
            }
            mediaRecorder.stop();
            stopRecord.setEnabled(false);
            playAudio.setEnabled(true);
            startRecord.setEnabled(true);
            stopAudio.setEnabled(false);

            Toast.makeText(MainActivity.this, "Recording Completed",
                    Toast.LENGTH_LONG).show();
        }
    });

MediaRecorderReady метод

public void MediaRecorderReady(){
        //myChronometer start
        if (!running) {

            myChronometer.setBase(SystemClock.elapsedRealtime() - pauseOffset);
            myChronometer.start();
            running = true;
        //***********************

        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
        mediaRecorder.setOutputFile(AudioSavePathInDevice);

    }
}

слушатель startRecord

startRecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(checkPermission()) {

                AudioSavePathInDevice =
                        Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +
                                CreateRandomAudioFileName(5) + "AudioRecording.3gp";

                MediaRecorderReady();

                try {
                    startRecord.setEnabled(true);
                    mediaRecorder.prepare();
                    mediaRecorder.start();

                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                startRecord.setEnabled(false);
                stopRecord.setEnabled(true);

                Toast.makeText(MainActivity.this, "Recording started",
                        Toast.LENGTH_LONG).show();

            } else {
                requestPermission();
            }

        }
    });

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вы можете использовать OnCompletionListener, например:

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    public void onCompletion(MediaPlayer mp) {
        // your code to stop record
    }
});

для получения дополнительной информации: https://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener

0 голосов
/ 27 ноября 2018

Строка

myChronometer.stop();

никогда не вызывается.

В методе onClick () вашего playAudio вы должны установить

running = true
...