Android 语音识别在Rmschanged上获得负值
我在试着辨认声音。它工作,但几秒钟后,它会自动断开,并给出rms值-2.12。如果我们再次开始再检查,会给我一个例外: 这是我的主要活动Android 语音识别在Rmschanged上获得负值,android,listener,speech-recognition,speech-to-text,Android,Listener,Speech Recognition,Speech To Text,我在试着辨认声音。它工作,但几秒钟后,它会自动断开,并给出rms值-2.12。如果我们再次开始再检查,会给我一个例外: 这是我的主要活动 public class MainActivity extends Activity { private SpeechRecognizer mSpeechRecognizer; private Intent mSpeechRecognizerIntent; protected long mSpeechRecognizerStartListeningTime
public class MainActivity extends Activity {
private SpeechRecognizer mSpeechRecognizer;
private Intent mSpeechRecognizerIntent;
protected long mSpeechRecognizerStartListeningTime = 0;
TextView tvreconizetext;
Button speakButton;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
speakButton = (Button) findViewById(R.id.bSpeak);
tvreconizetext = (TextView) findViewById(R.id.tvreconizetext);
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_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 100000);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());
SpeechRecognitionListener listener = new SpeechRecognitionListener();
mSpeechRecognizer.setRecognitionListener(listener);
speakButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mSpeechRecognizer != null) {
mSpeechRecognizer.destroy();
}
}
protected class SpeechRecognitionListener implements RecognitionListener {
@Override
public void onBeginningOfSpeech() {
Log.e("tag", "onBeginningOfSpeech");
}
@Override
public void onBufferReceived(byte[] buffer) {
Log.e("tag", "onBufferReceived :" + buffer);
}
@Override
public void onEndOfSpeech() {
Log.e("tag", "onEndOfSpeech ");
}
@Override
public void onError(int error) {
if (mSpeechRecognizer != null) {
mSpeechRecognizer.cancel();
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
} else {
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
Log.e("tag", "onError :" + error);
}
@Override
public void onEvent(int eventType, Bundle params) {
Log.e("tag", "onEvent :" + eventType + "," + params);
}
@Override
public void onPartialResults(Bundle partialResults) {
Log.e("tag", "onPartialResults :" + partialResults);
}
@Override
public void onReadyForSpeech(Bundle params) {
Log.e("tag", "onReadyForSpeech :" + params);
}
@Override
public void onResults(Bundle results) {
ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
Log.e("matches", "matches ::" + matches.get(0));
tvreconizetext.setText(matches.get(0));
mSpeechRecognizer.cancel();
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
@Override
public void onRmsChanged(float rmsdB) {
Log.e("tag", "onRmsChanged :" + rmsdB);
}
}
}
公共类MainActivity扩展活动{
私人语音识别器;
私人意图mSpeechRecognizerIntent;
受保护的长mSpeechRecognizerStartListeningTime=0;
text查看tvreconizetext;
按钮扬声器按钮;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
speakButton=(按钮)findViewById(R.id.bSpeak);
tvreconizetext=(TextView)findViewById(R.id.tvreconizetext);
mSpeechRecognizer=SpeechRecognizer.createSpeechRecognizer(this);
mSpeechRecognizerIntent=新意图(RecognizerIntent.ACTION\u recognizer\u SPEECH);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_语言_模型,
识别者意图、语言、模型、自由形式);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA\语音\输入\最小\长度\毫秒,100000);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_调用_包,this.getPackageName());
SpeechRecognitionListener=新建SpeechRecognitionListener();
mSpeechRecognizer.setRecognitionListener(listener);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
});
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
if(mSpeechRecognizer!=null){
mSpeechRecognizer.destroy();
}
}
受保护类SpeechRecognitionListener实现了RecognitionListener{
@凌驾
开始时的公共无效fSpeech(){
Log.e(“tag”、“onbeginingofspeech”);
}
@凌驾
已接收公共无效onBufferReceived(字节[]缓冲区){
Log.e(“tag”,“onBufferReceived:”+buffer);
}
@凌驾
公共无效onEndOfSpeech(){
Log.e(“tag”、“onEndOfSpeech”);
}
@凌驾
公共无效onError(内部错误){
if(mSpeechRecognizer!=null){
mSpeechRecognizer.cancel();
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}否则{
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
Log.e(“标记”,“onError:+错误”);
}
@凌驾
public void onEvent(int eventType,Bundle参数){
Log.e(“tag”、“onEvent:+eventType+”、“+params”);
}
@凌驾
public void onPartialResults(Bundle partialResults){
Log.e(“标签”,“部分结果:”+partialResults);
}
@凌驾
ReadyForSpeech上的公共void(Bundle参数){
Log.e(“tag”,“onReadyForSpeech:+params”);
}
@凌驾
公共结果(捆绑结果){
ArrayList matches=results.getStringArrayList(SpeechRecognitor.results\u RECOGNITION);
Log.e(“matches”,“matches::”+matches.get(0));
tvronizetext.setText(matches.get(0));
mSpeechRecognizer.cancel();
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
@凌驾
在RMSCHANGED上的公共无效(浮动rmsdB){
Log.e(“标签”,“onRmsChanged:+rmsdB”);
}
}
}
这是我的活动_main.xml
<Button
android:id="@+id/bSpeak"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Speak" />
<TextView
android:id="@+id/tvreconizetext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/bSpeak"
android:gravity="center"
android:textSize="18sp" />
我还在清单中使用了“录制音频”权限
这是个例外
01-02 11:42:39.706:E/ChromiumNetwork(6713):上传异常
方法01-02 11:42:39.706:E/铬网络(6713):
com.google.android.apps.gsa.shared.exception.GsaIOException:错误
代码:262182 01-02 11:42:39.706:E/ChromiumNetwork(6713):at
com.google.android.apps.gsa.shared.io.y.abort(QueueDataSource.java:61)
01-02 11:42:39.706:E/铬网络(6713):at
com.google.android.apps.gsa.search.core.i.l.abort(ackeredatasource.java:94)
01-02 11:42:39.706:E/铬网络(6713):at
com.google.android.apps.gsa.search.core.i.a.a.e.a(MonitoredCronetRequest.java:169)
01-02 11:42:39.706:E/铬网络(6713):at
com.google.android.apps.gsa.search.core.i.a.a.e.a(MonitoredCronetRequest.java:44)
01-02 11:42:39.706:E/铬网络(6713):at
com.google.android.apps.gsa.search.core.i.a.a.e$2.a(MonitoredCronetRequest.java:271)
01-02 11:42:39.706:E/铬网络(6713):at
org.chromium.net.CronetUrlRequest$2.run(CronetUrlRequest.java:579)
01-02 11:42:39.706:E/铬网络(6713):at
com.google.android.apps.gsa.search.core.i.x$1.run(TaskRunnerScheduledExecutor.java:36)
01-02 11:42:39.706:E/铬网络(6713):at
Executors$RunnableAdapter.call(Executors.java:390)
01-02 11:42:39.706:E/铬网络(6713):at
java.util.concurrent.FutureTask.run(FutureTask.java:234)01-02
11:42:39.706:E/ChromiumNetwork(6713):at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-02 11:42:39.706:E/铬网络(6713):at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-02 11:42:39.706:E/铬网络(6713):at
java.lang.Thread.run(Thread.java:838)01-02 11:42:39.706:
电子/彩色网络(6713):at
com.google.android.apps.gsa.shared.util.concurrent.a.q$1.run(GsaThreadFactory.java:118)
如何使用识别侦听器顺利识别语音。如果有人有想法,请分享。您可能想提供您编写的代码。以及完整的异常stacktrace。感谢回复@NikolayShmyrev我已经更新了我的问题,请检查我需要无限时间进行语音识别,如果我在100秒内没有说话,那么它将停止,否则它需要工作我也尝试了你的库“pocketsphinx”,但没有成功:(