title: Android Audio Player
body: <p>I have and audio recorder and player first i can record audio then the recorded audio can be played ,when audio is playing i want my seekbar thumb move smoothly but currently it have no smooth movement also the fast switching of play and pause sometimes fail my application by saying that illegal state :anybody please suggest a solution for improving my audio player . recding no pblm</p>
  
  <pre><code>public class RecorderActivity extends Activity{
      public static int          AUDIO_RECORDING_RESULT=0;
   public static int       FROM_AUDIO_RECDING_HOME=0;
   public static int       FROM_AUDIO_RECDING_SEARCH=0;
   public static int       FROM_AUDIO_RECDING=0;
  
   private static MediaRecorder                 recorder;
      private static Button                        recd_stop_audio;
      private static Button                        audio_play_pause;
      private static Chronometer                   audio_recding_time;
      private static Chronometer                   audio_playtime_begin;
      private static TextView                      audio_playtime_end;
      public static  int                           audio_play_pause_flag         = 1;
      private static int                           audio_recding_stop_flag       = 1;
      private static SeekBar                       audio_seekbar_play_indication;
      private static View                          v1;
      private static View        v2;
      private static View        v3;
      private static TextView       textview_audio_information_grade;
      private static TextView                      textview_audio_information1;
      private static TextView                      textview_audio_information2_1;
      private static TextView                      textview_audio_information2_2;
      private static TextView                      textview_audio_information2;
      private static TextView                      textview_audio_information3; 
      private static int                           audio_seekbar_progress;
      private static int                           audio_seekbar_incr;
      private Button                               continue_audio;
      private static Button                        delete_recding;
      private static MediaPlayer                   mp;
      private static int                           audio_paused_flag             = 0;
      private static TextView                      txt_audio_serviceprovidername;
  
  
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.audio);
    MyCustomesData.context=RecorderActivity.this;
     final AlertDialog.Builder builder = new AlertDialog.Builder(RecorderActivity.this);
     audio_paused_flag=0;
     FROM_AUDIO_RECDING=0;
     AUDIO_RECORDING_RESULT=0;
  
     MyCustomesData.sumitAReport_PAGE=MyCustomesConstants.USER_AUDIO;
     continue_audio = (Button) findViewById(R.id.Button_Voice_Record_Continue);
     textview_audio_information_grade=(TextView)findViewById(R.id.Description_grade);
           textview_audio_information1 = (TextView) findViewById(R.id.Description);
           textview_audio_information2 = (TextView) findViewById(R.id.Description2);
           textview_audio_information2_1=(TextView)findViewById(R.id.Description2_1);
           textview_audio_information2_2=(TextView)findViewById(R.id.Description2_2);
           textview_audio_information3= (TextView)findViewById(R.id.Description3);
           v1 = (View) findViewById(R.id.View1);
           v2 = (View) findViewById(R.id.View22);
           v3=  (View) findViewById(R.id.View33);
           audio_seekbar_play_indication = (SeekBar) findViewById(R.id.SeekBar01);
           audio_playtime_begin = (Chronometer) findViewById(R.id.TimerStart);
           audio_playtime_end = (TextView) findViewById(R.id.TimerStop);
           audio_recding_time = (Chronometer) findViewById(R.id.Rec_Timer_ID);
           recorder = new MediaRecorder();
           recd_stop_audio = (Button) findViewById(R.id.Button_record_sound);
           audio_play_pause = (Button) findViewById(R.id.Button_Play_Sound);
           delete_recding = (Button) findViewById(R.id.Button_Delete_Sound);
           txt_audio_serviceprovidername=(TextView)findViewById(R.id.TextView_Audio_Provider);
           txt_audio_serviceprovidername.setText(MyCustomesData.MyCustomesListContext.getProviderName());
           audio_seekbar_play_indication.setOnClickListener(null);
           audio_seekbar_play_indication.setEnabled(false);
           audio_play_pause.setEnabled(false);
              delete_recding.setEnabled(false);
           showHelpInformation();
  
           if(MyCustomesData.MyCustomesListContext.isAudioRecd())
           {
            showRecdingInformation();
            audio_play_pause.setEnabled(true);
               delete_recding.setEnabled(true);
           }
  
             recd_stop_audio.setOnClickListener(new OnClickListener() {
  
                 public void onClick(View v) {
                    if (audio_recding_stop_flag == 0) {
  
                      audiorecding();
  
                     } else {
  
                      audiorecding();
  
                     }
  
                 }
             });
  
             audio_play_pause.setOnClickListener(new OnClickListener() {
  
                 public void onClick(View v) {
                  playaudio();
                               }
             });
             audio_recding_time.setOnChronometerTickListener(new OnChronometerTickListener() {
  
      public void onChronometerTick(Chronometer chronometer) {
       if(chronometer.getText().equals("02:00"))
       {
        audiorecding();
       }
  
      }
     });
           **//UPDATING SEEKBAR USING CHRONOMETER**  
             audio_playtime_begin.setOnChronometerTickListener(new OnChronometerTickListener() {
  
                 public void onChronometerTick(Chronometer chronometer) {
  
                 if(!audio_playtime_begin.getText().equals("00:00"))
                  {
                   audio_seekbar_play_indication.setProgress(audio_seekbar_progress);
                      audio_seekbar_progress = audio_seekbar_progress + audio_seekbar_incr;
  
                  }
                  else
                   audio_seekbar_progress=1;
  
  
                 }
             });
  
  
  
             delete_recding.setOnClickListener(new OnClickListener() {
  
                 public void onClick(View v) {
  
                     audio_seekbar_progress = 1;
                             if (mp != null) {
                             if (audio_play_pause_flag == 0) {
                            audio_play_pause_flag =1;
                            audio_playtime_begin.stop();
                            mp.stop();
                               mp.reset();
                               mp.release();
                               audio_play_pause.setBackgroundResource(R.drawable.play1);
  
                             }
                         }
  
                         recorder = new MediaRecorder();
                         v1.setVisibility(View.VISIBLE);
                         v2.setVisibility(View.VISIBLE);
                         recd_stop_audio.setEnabled(true);
                         audio_play_pause.setEnabled(false);
                         delete_recding.setEnabled(false);
                            audio_play_pause.setBackgroundResource(R.drawable.play1);
                         audio_play_pause_flag = 1;
                       audio_playtime_begin.stop();
                       audio_playtime_begin.setBase(SystemClock.elapsedRealtime());
                       audio_paused_flag = 0;
                         audio_playtime_end.setText("00:00"); // Seekbar End Time
                         audio_recding_time.setBase(SystemClock.elapsedRealtime()); // Recording time
                         audio_seekbar_play_indication.setProgress(0);
                         MyCustomesData.MyCustomesListContext.setAudioRecd(false);
                         showHelpInformation();
  
  
                 }
             });
  
             continue_audio.setOnClickListener(new OnClickListener() {
  
                 public void onClick(View v) {
                  System.out.println("The Staus of report"+MyCustomesData.MyCustomesListContext.isAudioRecd()+":"+MyCustomesData.MyCustomesListContext.getTextReport());
  
                  if (audio_recding_stop_flag == 0)
                  {
                   audiorecding();
                  }
                  if(audio_play_pause_flag == 0)
                  {
                  mp.stop();
                     mp.reset();
                     mp.release();
                     audio_seekbar_play_indication.setProgress(100); //Max value
                       audio_playtime_begin.stop();
                        audio_play_pause_flag = 1;
                       audio_play_pause.setBackgroundResource(R.drawable.play1);
                  }
                StringBuffer txtReport=new StringBuffer(MyCustomesData.MyCustomesListContext.getTextReport());
                String txtreport=new String(txtReport);
                txtreport=txtreport.trim();
               if(!MyCustomesData.MyCustomesListContext.isAudioRecd()&amp;&amp;txtreport.length()==0)
               {
  
                 builder.setMessage("xxxxxxxxxxxxxxxx.").setCancelable(false).setPositiveButton("OK", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
                               dialog.cancel();
                               FROM_AUDIO_RECDING=0;
                         AUDIO_RECORDING_RESULT=0;
                         finish();
                           }
                       });
  
                       AlertDialog alert = builder.create();
                       alert.setTitle("Attention");
                       alert.setIcon(R.drawable.alert_dialog_icon);
                       alert.show();
               }
  
               else
                {
                AUDIO_RECORDING_RESULT=1;
                finish();
  
                }
  
                 }
  
             });
  
  
   }
      static void audiorecding()
      {
  
            audio_play_pause.setEnabled(false);
            delete_recding.setEnabled(false);
  
          if (audio_recding_stop_flag == 0) {
  
  
  
  
             int maxtime = audio_seekbar_play_indication.getMax();
           audio_recding_stop_flag = 1;
           audio_recding_time.stop();
            recorder.stop();
              recorder.reset();
              recorder.release(); 
              audio_seekbar_progress = 1;
              recd_stop_audio.setBackgroundResource(R.drawable.rec_btn);
            audio_play_pause.setEnabled(true);
              delete_recding.setEnabled(true);
  
             MyCustomesData.MyCustomesListContext.setAudioRecd(true);
             if(audio_recding_time.getText().equals("00:00"))
             {
              audio_recding_time.setText("00:01");
              MyCustomesData.MyCustomesListContext.setAudioRecdingTime( "00:01");  
             }
             else
  
             MyCustomesData.MyCustomesListContext.setAudioRecdingTime( audio_recding_time.getText().toString());
  
             showRecdingInformation();
  
          } 
          else {
  
  
              audio_recding_stop_flag = 0;
  
  
              try {
               showHelpInformation();
               audio_playtime_begin.setBase(SystemClock.elapsedRealtime());
                 audio_playtime_end.setText("00:00");
                 audio_seekbar_play_indication.setProgress(0);
               MyCustomesListMain.path = InitialValueLoader.sanitizePath("MyCustomAudio/VoiceReport");
                  InitialValueLoader.filecheck(MyCustomesListMain.path);
                  audio_play_pause.setEnabled(false);
                  delete_recding.setEnabled(false);
                  recd_stop_audio.setBackgroundResource(R.drawable.recording_stop);
                  audio_recding_time.setBase(SystemClock.elapsedRealtime());
  
                  recorder.release();
                  audio_recding_time.start();  
                  recorder = new MediaRecorder();
                  recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // AudioSource
                  recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // OutputFormat
                  recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                  recorder.setOutputFile(MyCustomesListMain.path);
                  recorder.prepare();
                  recorder.start();
  
              } catch (Exception e) {
                  e.printStackTrace();
                  recorder.reset();
                  recorder.release();
              } 
  
      }
      }
      private static void playaudio()
       {
  
  
             showRecdingInformation();
  
             recd_stop_audio.setEnabled(false);
                if (audio_play_pause_flag == 1) {
                 audio_play_pause_flag = 0;
                 v2.setVisibility(View.GONE);
                 audio_playtime_end.setText(audio_recding_time.getText());
                 audio_play_pause.setBackgroundResource(R.drawable.play2);
  
                       if (audio_paused_flag == 1) {
                           audio_paused_flag = 0;
  
                           int stoppedMilliseconds = 0;
  
                           String chronoText = audio_playtime_begin.getText().toString();
                           String array[] = chronoText.split(":");
                           if (array.length == 2) {
                             stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000
                                 + Integer.parseInt(array[1]) * 1000;
                           } else if (array.length == 3) {
                             stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000 
                                 + Integer.parseInt(array[1]) * 60 * 1000
                                 + Integer.parseInt(array[2]) * 1000;
                           }
                           stoppedMilliseconds=stoppedMilliseconds+1000;
                           audio_playtime_begin.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds);
                           audio_seekbar_progress=audio_seekbar_progress - 1;
                           audio_playtime_begin.start();
                           mp.start();
  
  
                       } else
  
                       {
                           v2.setVisibility(View.GONE);
                           try {
  
                            audio_play_pause.setBackgroundResource(R.drawable.play2);
                               audio_seekbar_progress = 1;
                                                    audio_seekbar_play_indication.setMax(getTotalAudioRecdingTime(MyCustomesData.MyCustomesListContext.getAudioRecdingTime()));
                               audio_play_pause.setBackgroundResource(R.drawable.play2);
                               audio_playtime_end.setText(MyCustomesData.MyCustomesListContext.getAudioRecdingTime());
                               audio_seekbar_incr = 1;
                               audio_playtime_begin.setBase(SystemClock.elapsedRealtime());
                               audio_seekbar_play_indication.setProgress(0);
                               audio_playtime_begin.start();
                               mp = new MediaPlayer();
                               mp.setOnCompletionListener(new OnCompletionListener() {
  
               public void onCompletion(MediaPlayer mp) {
                 mp.stop();
                             mp.reset();
                             mp.release();
  
                             audio_playtime_begin.stop();
                             audio_seekbar_play_indication.setProgress(0);
                             audio_playtime_begin.setText(MyCustomesData.MyCustomesListContext.getAudioRecdingTime());
                             audio_seekbar_play_indication.setProgress(getTotalAudioRecdingTime(MyCustomesData.MyCustomesListContext.getAudioRecdingTime())); //Max value
                               audio_play_pause_flag = 1;
                                audio_play_pause.setBackgroundResource(R.drawable.play1);
                               recd_stop_audio.setEnabled(true);
               }
              });
  
  
                               mp.setDataSource(MyCustomesListMain.path);
                               mp.prepare();
                               mp.start();
  
                           } catch (Exception e) {
  
                               e.printStackTrace();
                               mp.stop();
                            mp.reset();
                            mp.release();
                               audio_playtime_begin.stop();
  
  
  
                           }
  
                       }
  
             }
  
             else
  
             {
              System.out.println("Audio Palyer Paused&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;");
                 audio_play_pause_flag = 1;
                 audio_paused_flag = 1;
                 audio_play_pause.setBackgroundResource(R.drawable.play1);
                 audio_playtime_begin.stop();
  
                 mp.pause();
  
             }
  
       }
      private static int getTotalAudioRecdingTime(String recdingtime)
      {
      int timeM=Integer.valueOf(recdingtime.substring(0, 2)); 
      System.out.println("The Minute"+timeM);
      int timeS=Integer.valueOf(recdingtime.substring(3, 5));
      int totaltimeinS=timeM*60+timeS;
      return totaltimeinS;
      }
  
      private static void showHelpInformation()
      {
  
  
      }
  
      private static void showRecdingInformation()
      {
  
  
  
      }
  
  
  }
  </code></pre>