I am writing SpeechRecognizer class inside service class to recognize the voice and to record and play it in background continuously, but this code was not working.
Can any one give me an Idea how can I do that?
This is my Activity class:
public class AudioRecordTest extends Activity
{
private static final String LOG_TAG = "AudioRecordTest";
private static String mFileName = null;
//private RecordButton mRecordButton = null;
private MediaRecorder mRecorder = null;
// private PlayButton mPlayButton = null;
private MediaPlayer mPlayer = null;
Button record,play;
public static ImageView imageview;
boolean mStartRecording = false;
boolean mStartPlaying = false;
SpeechRecognizer mSpeechRecognizer;
Intent mSpeechRecognizerIntent;
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.activity_main);
imageview=(ImageView)findViewById(R.id.imageview);
Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);
}}
This is my service class:
public class MyService extends Service{
private static final String LOG_TAG = null;
boolean mStartRecording;
boolean mStartPlaying;
SpeechRecognizer mSpeechRecognizer;
Intent mSpeechRecognizerIntent;
private MediaRecorder mRecorder = null;
private static String mFileName = null;
private MediaPlayer mPlayer = null;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
this.getPackageName());
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest.m4a";
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
protected class SpeechRecognitionListener implements RecognitionListener
{
private final String TAG = null;
@Override
public void onBeginningOfSpeech()
{
//Log.d(TAG, "onBeginingOfSpeech");
//Toast.makeText(getApplicationContext(), "Test", 5000).show();
mStartRecording=true;
AudioRecordTest.imageview.setImageResource(R.drawable.hearing);
onRecord(mStartRecording);
}
@Override
public void onBufferReceived(byte[] buffer)
{
}
@Override
public void onEndOfSpeech()
{
//Log.d(TAG, "onEndOfSpeech");
stopRecording();
mStartRecording=false;
}
@Override
public void onError(int error)
{
//Log.d(TAG, "error = " + error);
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
@Override
public void onEvent(int eventType, Bundle params)
{
}
@Override
public void onPartialResults(Bundle partialResults)
{
}
@Override
public void onReadyForSpeech(Bundle params)
{
Log.d(TAG, "onReadyForSpeech"); //$NON-NLS-1$
}
@Override
public void onResults(Bundle results)
{
//Log.d(TAG, "onResults"); //$NON-NLS-1$
//ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
// matches are the return values of speech recognition engine
// Use these values for whatever you wish to do
mStartPlaying=true;
AudioRecordTest.imageview.setImageResource(R.drawable.seak);
onPlay(mStartPlaying);
}
@Override
public void onRmsChanged(float rmsdB)
{
}
}
private void onRecord(boolean start) {
if (start) {
startRecording();
} else {
stopRecording();
}
}
private void onPlay(boolean start) {
if (start) {
startPlaying();
} else {
stopPlaying();
}
}
private void startPlaying() {
//mPlayer = new MediaPlayer();
AudioManager audioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
SoundPool sp = new SoundPool(10,AudioManager.STREAM_MUSIC,0);
float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int explosion = sp.load(mFileName,0);
float volume = actualVolume / maxVolume;
sp.play(explosion, volume, volume, 10, 0, 1.45f);
}
private void stopPlaying() {
mPlayer.release();
mPlayer = null;
}
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setOutputFile(mFileName);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
}
private void stopRecording() {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}}