9

I am working on application that will record the voice of the user and save the file on the SD card and then allow the user to listen to the audio again.

I am able to allow the user to record his voice using the RecognizerIntent, but I cant figure out how to save the audio file and allow the user to hear the audio. I would appreciate it if someone could help me out. I have displayed my code below:

    // Setting up the onClickListener for Audio Button
    attachVoice = (Button) findViewById(R.id.AttachVoice_questionandanswer);
    attachVoice.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        voiceIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        voiceIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Please Speak");
        startActivityForResult(voiceIntent, VOICE_REQUEST);
        }
    });

protected void onActivityResult(int requestCode, int resultCode, Intent data) {


  if(requestCode == VOICE_REQUEST && resultCode == RESULT_OK){




}
RagHaven
  • 4,156
  • 21
  • 72
  • 113

2 Answers2

8

There is an example of how to do audio capture using MediaRecorder in the Android Developer Documentation.

I would recommend saving the files on the SD Card and then have your gallery code check the SD card to see which files to display. You can get the directory of the SD Card using the Environment.getExternalStorageDirectory() method. It would be best to save your files in a subdirectory of the SD Card root directory.

Make sure you give your applications the Permissions it will need. At the very least it will need RECORD_AUDIO and WRITE_EXTERNAL_STORAGE.

Also you have to see these tutorials:

http://www.androiddevblog.net/android/android-audio-recording-part-1

http://www.androiddevblog.net/android/android-audio-recording-part-2

yshahak
  • 4,996
  • 1
  • 31
  • 37
K_Anas
  • 31,226
  • 9
  • 68
  • 81
  • Is it possible to do this with the RecognizerIntent ? I would like to use that because it has a better UI and looks a lot better – RagHaven Jun 05 '12 at 22:25
  • No recognizerIntent is used for speech recognition!! you speak, the phone recognize your speech as a sequence of character and then fetch data for you that correspond to what you said. – K_Anas Jun 05 '12 at 22:32
  • `MediaRecorder ` seems not working here, as it is generating errors in Speech Recognition when used. – PeakGen Feb 03 '16 at 10:36
2

If you really want to record audio via the speech recognition API then you could use the RecognitionService.Callback which has a method

void bufferReceived(byte[] buffer)

This gives you access to the recorded audio buffer as speech is being recorded and recognized. (No information is provided about the sample rate though.) You can then save the obtained buffers into a file for a later playback. I think keyboard apps use this call to display the waveform of the recorded speech. You have to implement the UI yourself.

The bare RecognizerIntent.ACTION_RECOGNIZE_SPEECH just returns a set of words/phrases without any audio.

Kaarel
  • 10,554
  • 4
  • 56
  • 78
  • the [docs](http://developer.android.com/reference/android/speech/RecognitionService.Callback.html#bufferReceived(byte[])) on the bufferReceived method do specify the endianness, but say that the sample rate is implementation dependent. – toadzky Oct 30 '12 at 15:19
  • Also this method is not called by every device, you cannot depend on it. On those devices that do call this, the data's sample rate is typically 8KHz. – escape-llc Feb 05 '14 at 14:43