Search code examples
androidspeech

Jelly Bean Beep In Speech Recognition


I've been looking through different threads and haven't found anything that has worked for me on the problem that I am experiencing. I'd like to get rid of the "beep" sound that you get when speech recognition starts. I'm working with Jelly Bean 4.2.2 so I'm not sure if the same problem is on early versions, if it is I'd also like a fix for that. Also, I was wondering if anyone has suggestions on how to respond to certain Speech Recognition Results. Please let me know how my code can be improvised to include those features.

package com.example.speech;

import java.util.ArrayList;

import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.app.Activity;
import android.content.Intent;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.view.Menu;
import android.view.View.OnClickListener;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.util.Log;

public class MainActivity extends Activity implements  OnClickListener {



ListView lv;
private SpeechRecognizer mSpeechRecognizer;
private Intent mSpeechRecognizerIntent; 
boolean reseter = false;
private AudioManager mAudioManager;
private volatile boolean mNoSpeechCountDownOn;


@Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    boolean available = SpeechRecognizer.isRecognitionAvailable(this);
    Log.d("Speech", "available = " + available);
    mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
    mSpeechRecognizer.setRecognitionListener(new SpeechListener());
    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());
    mAudioManager = (AudioManager) getSystemService(this.AUDIO_SERVICE);
    commandA();



}

private CountDownTimer mNoSpeechCountDown = new CountDownTimer(5000, 5000)
{   
    @Override
    public void onTick(long millisUntilFinished)
    {

    }

    @SuppressWarnings("synthetic-access")
    @Override
    public void onFinish()
    {
        mNoSpeechCountDownOn = false;
        mSpeechRecognizer.cancel();
        mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
    }
};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}


private class SpeechListener implements RecognitionListener {


    @Override
    public void onBeginningOfSpeech() {
        if (mNoSpeechCountDownOn)
        {
            mNoSpeechCountDownOn = false;
            mNoSpeechCountDown.cancel();
        }
        Log.d("Speech", "onBeginningOfSpeech");

    }

    @Override
    public void onBufferReceived(byte[] buffer) {
        Log.d("Speech", "onBufferReceived");
    }

    @Override
    public void onEndOfSpeech() {
        Log.d("Speech", "onEndOfSpeech");


    }

    @Override
    public void onError(int error) {
        if (mNoSpeechCountDownOn)
        {
            mNoSpeechCountDownOn = false;
            mNoSpeechCountDown.cancel();
        }
        Log.d("Speech", "onError");
    }

    @Override
    public void onEvent(int eventType, Bundle params) {
        Log.d("Speech", "onEvent");
    }

    @Override
    public void onPartialResults(Bundle partialResults) {
        Log.d("Speech", "onPartialResults");
    }

    @Override
    public void onReadyForSpeech(Bundle params) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
        {
            mNoSpeechCountDownOn = true;
            mNoSpeechCountDown.start();
            mAudioManager.setStreamMute(AudioManager.STREAM_SYSTEM, false);
        }
        Log.d("Speech", "onReadyForSpeech");
        try {
            Thread.sleep(4900);

        } catch (InterruptedException e) {
            mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
            mAudioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
            Log.d("speech", "Mute on");

        }

    }


    @Override
    public void onResults(Bundle results) {
        Log.d("Speech", "results");


        ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

        // Do whatever you want here
        try {
            Thread.sleep(1);

        } catch (InterruptedException e) {
            mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
            mAudioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
            Log.d("speech", "Mute on");

        }
    }

    @Override
    public void onRmsChanged(float rmsdB) {
        //Log.d("Speech", "onRmsChanged");
    }



}
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

}
 }

Solution

  • public class MainActivity extends Activity implements OnClickListener {
    
    ListView lv;
    private SpeechRecognizer mSpeechRecognizer;
    private Intent mSpeechRecognizerIntent; 
    boolean reseter = false;
    private AudioManager mAudioManager;
    
    Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lv = (ListView)findViewById(R.id.lvVoiceReturn);
    Button b= (Button)findViewById(R.id.bVoice);
    b.setOnClickListener(this);
    boolean available = SpeechRecognizer.isRecognitionAvailable(this);
    Log.d("Speech", "available = " + available);
    mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
    mSpeechRecognizer.setRecognitionListener(new SpeechListener());
    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());
    mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    
    
    }
    
    private CountDownTimer mNoSpeechCountDown = new CountDownTimer(5000, 5000)
    {   
        @Override
        public void onTick(long millisUntilFinished)
        {
    
        }
    
        @SuppressWarnings("synthetic-access")
        @Override
        public void onFinish()
        {
            mNoSpeechCountDownOn = false;
            mSpeechRecognizer.cancel();
            mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
        }
    };
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }
    
    
    @Override
    public void onClick(View v) {
     // TODO Auto-generated method stub`
    Log.d("speech", "button active");
    mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
    mAudioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
    
    }
    private class SpeechListener implements RecognitionListener {
    
    
    @Override
    public void onBeginningOfSpeech() {
        if (mNoSpeechCountDownOn)
        {
                    mNoSpeechCountDownOn = false;
                    mNoSpeechCountDown.cancel();
        }
        Log.d("Speech", "onBeginningOfSpeech");
    
    }
    
    @Override
    public void onBufferReceived(byte[] buffer) {
        Log.d("Speech", "onBufferReceived");
    }
    
    @Override
    public void onEndOfSpeech() {
        Log.d("Speech", "onEndOfSpeech");
    
    
    }
    
    @Override
    public void onError(int error) {
        if (mNoSpeechCountDownOn)
        {
                    mNoSpeechCountDownOn = false;
                    mNoSpeechCountDown.cancel();
        }
        Log.d("Speech", "onError");
    }
    
    @Override
    public void onEvent(int eventType, Bundle params) {
        Log.d("Speech", "onEvent");
    }
    
    @Override
    public void onPartialResults(Bundle partialResults) {
        Log.d("Speech", "onPartialResults");
    }
    
    @Override
    public void onReadyForSpeech(Bundle params) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
        {
                    mNoSpeechCountDownOn = true;
                    mNoSpeechCountDown.start();
              mAudioManager.setStreamMute(AudioManager.STREAM_SYSTEM, false);
        }
        Log.d("Speech", "onReadyForSpeech");
    
    }
    
    
    @Override
    public void onResults(Bundle results) {
        Log.d("Speech", "results");
        ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
    
      // Do whatever you want here
    
    }
    
    @Override
    public void onRmsChanged(float rmsdB) {
        //Log.d("Speech", "onRmsChanged");
    }
    
    
    
    }
    }