0

J'essaie de faire un simple enregistreur audio. Le problème avec l'enregistreur audio est que, chaque fois que la barre de progression devient plus rapide. Cela fonctionnerait bien au premier tour, mais si vous annulez l'audio et que vous voulez revenir la deuxième fois, cela devient plus rapide.La barre de menu s'exécute plus rapidement sur chaque onClick

 recordButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (recorder == null) { 
         recorder = new MediaRecorder(); 
        } 
        stopped=false; 
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
        recorder.setOutputFile("/sdcard/sample.3gp"); 
        recorder.setMaxDuration(MAX_DURATION); 

        //Progressbar 
        pb.setMax(MAX_DURATION); 
        pb.setProgressTintList(ColorStateList.valueOf(Color.WHITE)); 

        new CountDownTimer(MAX_DURATION, 250) { 
         public void onTick(long millisUntilFinished) { 
          pb.setProgress(pb.getProgress() + 250); 
         } 
         public void onFinish() { 
         } 
        }.start(); 

Tout cela se passe dans une boîte de dialogue, alors comment puis-je effacer le contenu de la boîte de dialogue de sorte que la barre de progression remonte à sa valeur par défaut.

+0

On dirait que vous ajoutez 250 au progrès chaque fois. Vous devrez peut-être enregistrer la progression lorsque vous annulez l'audio et la définir à l'endroit où elle s'est arrêtée lorsque vous recommencez. –

Répondre

0
long timestamp = DateUtils.getCurrentTimeMillis(); 
    String imagePath = Environment.getExternalStorageDirectory() + "/testing/" + timestamp + "_D_FM_" + "John" + ".mp3"; 
    MediaRecorder mRecorder = new MediaRecorder(); 
mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
       mRecorder.setOutputFile(imagePath); 
       mRecorder.setAudioEncodingBitRate(16); 
       mRecorder.setAudioSamplingRate(44100); 
       mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
       // Starting record time 
       recordTime = 0; 
       // Show TextView that displays record time 
       try { 
        mRecorder.prepare(); 
        mRecorder.start(); 
        // Change isRecroding flag to true 
        isRecording = true; 
        handler.post(UpdateRecordTime); 
       } catch (IOException e) { 
        FRLog.e("LOG_TAG", "prepare failed", e); 
       } 

Lorsque clic de lecture audio:

private MediaPlayer mPlayer; 

private void playAudio(final SeekBar audioSeekbar, int position, final ImageButton audioplayImgBtn, String fileName) { 
     seekBar = audioSeekbar; 
     if (audio_playing && audio_position == position) { 
      if (isPaused) { 
       mPlayer.start(); 
       handler.post(UpdatePlayTime); 
       audioplayImgBtn.setImageResource(R.drawable.ic_pause); 
       isPaused = false; 
      } else { 
       mPlayer.pause(); 
       audioplayImgBtn.setImageResource(R.drawable.ic_messages_audio_play); 
       isPaused = true; 
      } 
     } else { 
      if (audio_playing && audio_position != position) { 
       mPlayer.pause(); 
       audioplayImgBtn.setImageResource(R.drawable.ic_messages_audio_play); 
       isPaused = true; 
      } 
      audio_position = position; 
      audioSeekbar.setProgress(0); 
      audioplayImgBtn.setImageResource(R.drawable.ic_pause); 
      if (mPlayer != null) { 
       if (mPlayer.isPlaying()) { 
        mPlayer.stop(); 
        mPlayer.reset(); 
        mPlayer.release(); 
        mPlayer = null; 
       } else { 
        mPlayer.reset(); 
        mPlayer.release(); 
        mPlayer = null; 
       } 
      } 
      mPlayer = new MediaPlayer(); 
      playTime = 0; 
      handler = new Handler(); 
      // Reset max and progress of the SeekBar 
      try { 
       // Initialize the player and start playing the audio 
       mPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/testing/" + fileName); 
       mPlayer.prepare(); 
       mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mp) { 
         audioSeekbar.setMax(mPlayer.getDuration()); 
         mPlayer.start(); 
         audio_playing = true; 
         handler.post(UpdatePlayTime); 
        } 
       }); 

       mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        @Override 
        public void onCompletion(MediaPlayer mp) { 
         audioplayImgBtn.setImageResource(R.drawable.ic_messages_audio_play); 
         audioSeekbar.setProgress(0); 
         audio_playing = false; 
         handler.removeCallbacksAndMessages(null); 
        } 
       }); 
       // Post the play progress 
       // updated code by manikandan 
       audioSeekbar.setOnTouchListener(new View.OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         if (mPlayer.isPlaying()) { 
          SeekBar sb = (SeekBar) v; 
          mPlayer.seekTo(sb.getProgress()); 
         } 
         return false; 
        } 
       }); 
       audioSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
        @Override 
        public void onProgressChanged(SeekBar seekBar, int i, boolean fromUser) { 
         if (mPlayer != null && fromUser) { 
          mPlayer.seekTo(seekBar.getProgress()); 
         } 
        } 

        @Override 
        public void onStartTrackingTouch(SeekBar seekBar) { 

        } 

        @Override 
        public void onStopTrackingTouch(SeekBar seekBar) { 
         if (mPlayer != null) { 
          if (mPlayer.isPlaying()) { 
           mPlayer.seekTo(seekBar.getProgress()); 
          } 
         } 
        } 
       }); 
      } catch (IOException e) { 
       FRLog.e("LOG_TAG", "prepare failed", e); 
      } 
     } 
    } 




Runnable UpdatePlayTime = new Runnable() { 
     public void run() { 
      if (mPlayer != null) { 
       if (mPlayer.isPlaying()) { 
        seekBar.setProgress(mPlayer.getCurrentPosition()); 
        handler.postDelayed(this, 500); 
       } 
      } 
     } 
    };