2011-05-27 22 views
11

के लिए एक साधारण उदाहरण की आवश्यकता है मुझे सरल ऑडियो रिकॉर्डिंग की आवश्यकता है और एंड्रॉइड में ऑडियोआरकॉर्डर का उपयोग करके उदाहरण खेलना है। मैंने MediaRecorder के साथ प्रयास किया, यह ठीक काम करता है।ऑडियो रिकॉर्डिंग

उत्तर

4

आपका मतलब AudioRecord है? उदाहरण खोजें Google Code Search का उपयोग करके "AudioRecord.OnRecordPositionUpdateListener"। बीटीडब्ल्यू, AudioRecord रिकॉर्डिंग करता है, खेल नहीं रहा है।

यह भी देखें:

2
यहाँ

ऑडियो रिकॉर्ड के लिए नमूना कोड है।

private Runnable recordRunnable = new Runnable() { 

    @Override 
    public void run() { 

     byte[] audiodata = new byte[mBufferSizeInBytes]; 
     int readsize = 0; 

     Log.d(TAG, "start to record"); 
     // start the audio recording 
     try { 
      mAudioRecord.startRecording(); 
     } catch (IllegalStateException ex) { 
      ex.printStackTrace(); 
     } 

     // in the loop to read data from audio and save it to file. 
     while (mInRecording == true) { 
      readsize = mAudioRecord.read(audiodata, 0, mBufferSizeInBytes); 
      if (AudioRecord.ERROR_INVALID_OPERATION != readsize 
        && mFos != null) { 
       try { 
        mFos.write(audiodata); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     // stop recording 
     try { 
      mAudioRecord.stop(); 
     } catch (IllegalStateException ex) { 
      ex.printStackTrace(); 
     } 

     getActivity().runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       mRecordLogTextView.append("\n Audio finishes recording"); 
      } 
     }); 

     // close the file 
     try { 
      if (mFos != null) 
       mFos.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
}; 

तो आप दो बटन की जरूरत है (या एक अलग समय में अलग-अलग समारोह में कार्य करता है) शुरू करने और रिकॉर्ड धागा बंद करने के लिए।

 mRecordStartButton = (Button) rootView 
      .findViewById(R.id.audio_record_start); 

    mRecordStartButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      // initialize the audio source 
      int recordChannel = getChoosedSampleChannelForRecord(); 
      int recordFrequency = getChoosedSampleFrequencyForRecord(); 
      int recordBits = getChoosedSampleBitsForRecord(); 

      Log.d(TAG, "recordBits = " + recordBits); 

      mRecordChannel = getChoosedSampleChannelForSave(); 
      mRecordBits = getChoosedSampleBitsForSave(); 
      mRecordFrequency = recordFrequency; 

      // set up the audio source : get the buffer size for audio 
      // record. 
      int minBufferSizeInBytes = AudioRecord.getMinBufferSize(
        recordFrequency, recordChannel, recordBits); 

      if(AudioRecord.ERROR_BAD_VALUE == minBufferSizeInBytes){ 

       mRecordLogTextView.setText("Configuration Error"); 
       return; 
      } 

      int bufferSizeInBytes = minBufferSizeInBytes * 4; 

      // create AudioRecord object 
      mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, 
        recordFrequency, recordChannel, recordBits, 
        bufferSizeInBytes); 

      // calculate the buffer size used in the file operation. 
      mBufferSizeInBytes = minBufferSizeInBytes * 2; 

      // reset the save file setup 
      String rawFilePath = WaveFileWrapper 
        .getRawFilePath(RAW_PCM_FILE_NAME); 

      try { 
       File file = new File(rawFilePath); 
       if (file.exists()) { 
        file.delete(); 
       } 

       mFos = new FileOutputStream(file); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      if (mInRecording == false) { 

       mRecordThread = new Thread(recordRunnable); 
       mRecordThread.setName("Demo.AudioRecord"); 
       mRecordThread.start(); 

       mRecordLogTextView.setText(" Audio starts recording"); 

       mInRecording = true; 

       // enable the stop button 
       mRecordStopButton.setEnabled(true); 

       // disable the start button 
       mRecordStartButton.setEnabled(false); 
      } 

      // show the log info 
      String audioInfo = " Audio Information : \n" 
        + " sample rate = " + mRecordFrequency + "\n" 
        + " channel = " + mRecordChannel + "\n" 
        + " sample byte = " + mRecordBits; 
      mRecordLogTextView.setText(audioInfo); 

     } 
    }); 

    mRecordStopButton = (Button) rootView 
      .findViewById(R.id.audio_record_stop); 
    mRecordStopButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      if (mInRecording == false) { 

       Log.d(TAG, "current NOT in Record"); 

      } else { 

       // stop recording 
       if (mRecordThread != null) { 

        Log.d(TAG, "mRecordThread is not null"); 

        mInRecording = false; 

        Log.d(TAG, "set mInRecording to false"); 

        try { 
         mRecordThread.join(TIMEOUT_FOR_RECORD_THREAD_JOIN); 
         Log.d(TAG, "record thread joins here"); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 

        mRecordThread = null; 

        // re-enable the start button 
        mRecordStartButton.setEnabled(true); 

        // disable the start button 
        mRecordStopButton.setEnabled(false); 

       } else { 
        Log.d(TAG, "mRecordThread is null"); 
       } 
      } 
     } 
    }); 

तो आप पीसीएम डेटा को WAV फ़ाइल में सहेज सकते हैं।

+0

अपना पूरा कोड साझा करें? –

संबंधित मुद्दे