Android 语音识别中的蜂鸣器

Android 语音识别中的蜂鸣器,android,speech,Android,Speech,我一直在寻找不同的线索,并没有发现任何对我的问题,我正在经历的工作。我想消除语音识别开始时发出的“嘟嘟”声。我正在使用Jelly Bean 4.2.2,所以我不确定早期版本是否存在相同的问题,如果是,我也希望对此进行修复。另外,我想知道是否有人对如何响应某些语音识别结果提出了建议。请让我知道如何即兴编写代码以包含这些功能 package com.example.speech; import java.util.ArrayList; import android.media.AudioMana

我一直在寻找不同的线索,并没有发现任何对我的问题,我正在经历的工作。我想消除语音识别开始时发出的“嘟嘟”声。我正在使用Jelly Bean 4.2.2,所以我不确定早期版本是否存在相同的问题,如果是,我也希望对此进行修复。另外,我想知道是否有人对如何响应某些语音识别结果提出了建议。请让我知道如何即兴编写代码以包含这些功能

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

}
 }
package com.example.speech;
导入java.util.ArrayList;
导入android.media.AudioManager;
导入android.os.Build;
导入android.os.Bundle;
导入android.os.CountDownTimer;
导入android.app.Activity;
导入android.content.Intent;
导入android.speech.RecognitionListener;
导入android.speech.RecognizerIntent;
导入android.SpeechRecognizer;
导入android.view.Menu;
导入android.view.view.OnClickListener;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ListView;
导入android.util.Log;
公共类MainActivity扩展活动实现OnClickListener{
ListView lv;
私人语音识别器;
私人意图mSpeechRecognizerIntent;
布尔重置=假;
私人音频经理;
私有易失性布尔MNOSpeechCountdown;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
布尔值可用=SpeechRecognition.isRecognitionAvailable(此);
Log.d(“语音”,“可用=”+可用);
mSpeechRecognizer=SpeechRecognizer.createSpeechRecognizer(this);
mSpeechRecognizer.setRecognitionListener(新建SpeechListener());
mSpeechRecognizerIntent=新意图(RecognizerIntent.ACTION\u recognizer\u SPEECH);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_语言_模型,
识别者意图、语言、模型、自由形式);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_调用_包,
这个.getPackageName());
mAudioManager=(AudioManager)getSystemService(this.AUDIO_服务);
commandA();
}
专用倒计时器mNoSpeechCountDown=新倒计时器(50005000)
{   
@凌驾
公共void onTick(长毫秒未完成)
{
}
@抑制警告(“合成访问”)
@凌驾
公共无效onFinish()
{
mNoSpeechCountDownOn=false;
mSpeechRecognizer.cancel();
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
};
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
私有类SpeechListener实现了RecognitionListener{
@凌驾
开始时的公共无效fSpeech(){
if(mNoSpeechCountDownOn)
{
mNoSpeechCountDownOn=false;
mNoSpeechCountDown.cancel();
}
日志d(“演讲”、“开始演讲”);
}
@凌驾
已接收公共无效onBufferReceived(字节[]缓冲区){
日志d(“语音”、“接收到的语音”);
}
@凌驾
公共无效onEndOfSpeech(){
Log.d(“演讲”、“单点演讲”);
}
@凌驾
公共无效onError(内部错误){
if(mNoSpeechCountDownOn)
{
mNoSpeechCountDownOn=false;
mNoSpeechCountDown.cancel();
}
日志d(“讲话”、“错误”);
}
@凌驾
public void onEvent(int eventType,Bundle参数){
日志d(“演讲”、“事件”);
}
@凌驾
public void onPartialResults(Bundle partialResults){
日志d(“演讲”、“部分结果”);
}
@凌驾
ReadyForSpeech上的公共void(Bundle参数){
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.JELLY\u BEAN)
{
mNoSpeechCountDownOn=true;
mNoSpeechCountDown.start();
mAudioManager.setStreamMute(AudioManager.STREAM_系统,false);
}
日志d(“演讲”、“准备演讲”);
试一试{
睡眠(4900);
}捕捉(中断异常e){
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
mAudioManager.setStreamMute(AudioManager.STREAM_SYSTEM,true);
日志d(“语音”、“静音打开”);
}
}
@凌驾
公共结果(捆绑结果){
日志d(“演讲”、“结果”);
ArrayList matches=results.getStringArrayList(SpeechRecognitor.results\u RECOGNITION);
//在这里你想干什么就干什么
试一试{
睡眠(1);
}捕捉(中断异常e){
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
mAudioManager.setStreamMute(AudioManager.STREAM_SYSTEM,true);
日志d(“语音”、“静音打开”);
}
}
@凌驾
在RMSCHANGED上的公共无效(浮动rmsdB){
//Log.d(“演讲”,“onRmsChanged”);
}
}
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
}
}
公共类MainActivity扩展活动实现OnClickListener{
ListView lv;
私人语音识别器;
私人意图mSpeechRecognizerIntent;
布尔重置=假;
私人音频经理;
推翻
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.lvVoiceReturn);
按钮b=(按钮)findViewById(R.id.bVoice);
b、 setOnClickListener(此);
布尔值可用=SpeechRecognition.isRecognitionAvailable(此);
Log.d(“语音”,“可用=”+可用);
mSpeechRecognizer=SpeechRecognizer.createSpeechRecognizer(this);
mSpeechRecognizer.setRecognitionListener(新建SpeechListener());
mSpeechRecognizerIntent=新意图(RecognizerIntent.ACTI
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");
}



}
}
mAudioManager.setStreamMute(AudioManager.VIBRATE_TYPE_NOTIFICATION, true);
mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);