0

Ich versuche, einen einfachen Audio-Recorder zu machen. Das Problem mit dem Audiorekorder ist, dass jedes Mal, wenn der Fortschrittsbalken schneller wird. Es würde in der ersten Runde gut laufen, aber wenn Sie den Ton abbrechen und das zweite Mal gehen wollen, wird es schneller.Porgress Bar läuft schneller auf jedem 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(); 

All dies wird in einem Dialog geschieht, so wie kann ich den Inhalt des Dialogs löschen, so dass die Fortschrittsbalken auf den Standardwert zurückgehen.

+0

Sieht aus wie Sie 250 an den Fortschritt jedes Mal hinzufügen. Möglicherweise müssen Sie den Fortschritt speichern, wenn Sie den Ton abbrechen, und ihn beim nächsten Start an die Stelle setzen, an der er unterbrochen wurde. –

Antwort

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); 
       } 

Wenn Klick Audio-Wiedergabe:

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); 
       } 
      } 
     } 
    }; 
Verwandte Themen