0

我試圖製作一個簡單的錄音機。錄音機的問題在於,每當進度條變快時。它在第一回閤中運行良好,但是如果取消音頻並想第二次回合,速度會變得更快。Porgress酒吧在每個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(); 

所有這一切都是在對話中發生的事情,所以我怎麼清除對話框的內容,這樣的進度條可以追溯到它的默認值。

+0

看起來要添加每次250〜進展。您可能需要在取消音頻時存儲進度,並將其設置爲當您再次啓動時停止播放。 –

回答

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

當點擊音頻播放:

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