title: AudioRecord object not initializing
body: <p>In the below code my <code>audioRecord</code> object is not initializing. I tried moving it to the <code>onCreate</code> method and made it a global. I've logged the state and that returns a value of <code>1</code> which means ready to use. The debugger says that <code>startRecording</code> is being called on an uninitialized object. It is also saying that it could not get the audio source.</p>
  
  <p>Why am I getting these errors?</p>
  
  <pre><code>    package com.tecmark;
  
      import java.io.BufferedOutputStream;
      import java.io.DataOutputStream;
      import java.io.File;
      import java.io.FileOutputStream;
      import android.app.Activity;
      import android.media.AudioFormat;
      import android.media.AudioRecord;
      import android.media.MediaRecorder;
      import android.os.Bundle;
      import android.os.Environment;
      import android.util.Log;
      import android.view.View;
      import android.widget.TextView;
  
      public class recorder extends Activity  {
  
          private Thread thread;
          private boolean isRecording;
          private AudioRecord recorder;
          private FileOutputStream os;
          private BufferedOutputStream bos;
          private DataOutputStream dos;
          private TextView text;
          private int audioSource = MediaRecorder.AudioSource.MIC;
          private int sampleRate = 22050;
          private int channel = AudioFormat.CHANNEL_CONFIGURATION_MONO;
          private int encoding = AudioFormat.ENCODING_PCM_16BIT;
          private int result = 0;
          private int bufferSize;
          private byte[] buffer;
  
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
  
              Log.v("onCreate", "layout set, about to init audiorec obj");
              text = (TextView)findViewById(R.id.TextView01);
  
               bufferSize = AudioRecord.getMinBufferSize(sampleRate,channel,encoding);
               buffer = new byte[bufferSize];
  
              recorder = new AudioRecord(audioSource, sampleRate,channel,encoding,
                      AudioRecord.getMinBufferSize(sampleRate, channel,encoding));
              Log.i("recorder obj state",""+recorder.getRecordingState());
          }
  
          public void onClickPlay(View v){
  
          }
  
  
          public void record(){
              Log.i("inside record method", "******");
          File path = Environment.getExternalStorageDirectory();
              Log.v("file path", ""+path.getAbsolutePath());
  
              File file = new File(path, "test.wav");
  
              if(file.exists()){
              file.delete();
              }
  
              path.mkdirs();
              Log.v("file path", ""+file.getAbsolutePath());
  
              try {
               os = new FileOutputStream(file);
               bos = new BufferedOutputStream(os);            
                   dos = new DataOutputStream(bos);        
              } catch (Exception e1) {
               e1.printStackTrace();
              }
  
              int bufferSize = AudioRecord.getMinBufferSize(sampleRate,channel,encoding);
              byte[] buffer = new byte[bufferSize];
              recorder.startRecording();
              isRecording = true; 
              try{  
                  while (isRecording){
              result = recorder.read(buffer, 0, bufferSize);
              for(int a=0; a&lt;result;a++){
                   dos.write(buffer[a]);
  
                   if(!isRecording){
                     recorder.stop();          
                     break;
                   }
  
              }
  
               }
               dos.flush();
               dos.close();
          }catch(Exception e){
               e.printStackTrace();
          }
  
      }// end of record method
  
      public void onClickStop(View v){
          Log.v("onClickStop", "stop clicked");
          isRecording=false;
      }   
      public void onClickReverse(View v){
          Log.v("onClickReverse", "reverse clicked");
      } 
      public void onClickRecord(View v){
          Log.v("onClickRecourd", "record clicked, thread gona start");
          text.setText("recording");
          thread = new Thread(new Runnable() {
              public void run() {
                  isRecording = true;
                  record();
              }
          });
  
          thread.start();
          isRecording = false;
      }   
  }//end of class
  </code></pre>
  
  <p><strong>Logcat</strong></p>
  
  <pre><code>01-30 15:23:16.724: ERROR/AudioRecord(12817): Could not get audio input for record source 1 01-30 15:23:16.729: 
  ERROR/AudioRecord-JNI(12817): Error creating AudioRecord instance: initialization check failed. 01-30 15:23:16.729: 
  ERROR/AudioRecord-Java(12817): [ android.media.AudioRecord ] Error code
  -20 when initializing native AudioRecord object. 01-30 15:23:16.729: INFO/recorder obj state(12817): 1 01-30 15:23:16.729: 
  WARN/dalvikvm(12817): threadid=13: thread exiting with uncaught exception (group=0x4001b180) 01-30 15:23:16.729: 
  ERROR/AndroidRuntime(12817): Uncaught handler: thread Thread-7 exiting due to uncaught exception 01-30 15:23:16.739: 
  ERROR/AndroidRuntime(12817): java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord. 01-30 15:23:16.739: 
  ERROR/AndroidRuntime(12817):     at android.media.AudioRecord.startRecording(AudioRecord.java:495) 01-30 15:23:16.739: 
  ERROR/AndroidRuntime(12817):     at com.tecmark.recorder.record(recorder.java:114) 01-30 15:23:16.739: 
  ERROR/AndroidRuntime(12817):     at com.tecmark.recorder$1.run(recorder.java:175) 01-30 15:23:16.739: 
  ERROR/AndroidRuntime(12817):     at java.lang.Thread.run(Thread.java:1096)
  </code></pre>