我不知道如何在android的语音识别器中增加语音识别时间

时间:2019-03-23 02:23:01

标签: android

“你好,我是韩国人,我不会英语。但是我正在使用Google API中的语音识别器开发android应用程序,我想增加识别时间,但是当我单击按钮时,我不知道没说,5秒钟后,它发生了ERROR_SPEECH_TIMEOUT,然后它听不到我的声音了

所以我找到了三个参数并尝试应用它。但是什么也没发生。

EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS

RecognitionListener listener = new RecognitionListener() {

    @Override
    public void onReadyForSpeech(Bundle params) {
        Log.d(" 태그", "speech Ready");
        Toast.makeText(getApplicationContext(), "Let's speak !", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onBeginningOfSpeech() {
        Log.d(" 태그", "speech Begin");
    }

    @Override
    public void onRmsChanged(float rmsdB) {
        Log.d(" 태그", "speech RMS changed");
    }

    @Override
    public void onBufferReceived(byte[] buffer) {
        Log.d(" 태그", "speech buffer received");
    }

    @Override
    public void onEndOfSpeech() {
        Log.d(" 태그", "speech end");
        Toast.makeText(getApplicationContext(), "녹음 끝", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onError(int error) {
        switch (error) {
            case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
                Log.d(" 태그", "ERROR_NETWORK_TIMEOUT");
                break;

            case SpeechRecognizer.ERROR_NETWORK:
                Log.d(" 태그", "ERROR_NETWORK");
                break;

            case SpeechRecognizer.ERROR_AUDIO:
                Log.d(" 태그", "ERROR_AUDIO");
                break;

            case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
                Log.d(" 태그", "ERROR_SPEECH_TIMEOUT");
                break;

            case SpeechRecognizer.ERROR_CLIENT:
                Log.d(" 태그", "ERROR_CLIENT");
                break;

            case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
                Log.d(" 태그", "ERROR_INSUFFICIENT_PERMISSIONS");
                break;

            case SpeechRecognizer.ERROR_NO_MATCH:
                Log.d(" 태그", "ERROR_NO_MATCH");
                break;

            case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
                Log.d(" 태그", "ERROR_RECOGNIZER_BUSY");
                break;

            case SpeechRecognizer.ERROR_SERVER:
                Log.d(" 태그", "ERROR_SERVER");
                break;
        }
        stopListen();
        startListen();
    }

    @Override
    public void onResults(Bundle results) {
        String key = "";
        key = SpeechRecognizer.RESULTS_RECOGNITION;
        ArrayList<String> mResults = results.getStringArrayList(key);
        String[] rs = new String[mResults.size()];
        mResults.toArray(rs);
        Log.d(" 태그", rs[0]);
        textView.append(rs[0] + ". ");
        startListen();
    }

    @Override
    public void onPartialResults(Bundle partialResults) {
    }

    @Override
    public void onEvent(int eventType, Bundle params) {
    }
};

private void startListen() {
    speechRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
    speechRecognizer.setRecognitionListener(listener);
    speechRecognizer.startListening(i);
}

private void stopListen() {
    speechRecognizer.stopListening();
    speechRecognizer.cancel();
    speechRecognizer.destroy();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageButton = findViewById(R.id.btn);
    textView = findViewById(R.id.txt);

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        return;
    }

    for (String permission : perMissionList) {
        int check = checkCallingOrSelfPermission(permission);
        if (check == PackageManager.PERMISSION_DENIED) {
            requestPermissions(perMissionList, 0);
        }
    }

    i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName());
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ko-KR");
    i.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS,10000);

    imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (clickFlag) {
                clickFlag = false;
            } else {
                clickFlag = true;
            }

            if (clickFlag) {
                startListen();
            } else {
                Toast.makeText(getApplicationContext(), "녹음 끝", Toast.LENGTH_SHORT).show();
                Log.d("태그", "녹음종료");
                stopListen();
            }
        }
    });
}

0 个答案:

没有答案