Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 第二个侦听语音识别器出错_Java_Android_Speech Recognition - Fatal编程技术网

Java 第二个侦听语音识别器出错

Java 第二个侦听语音识别器出错,java,android,speech-recognition,Java,Android,Speech Recognition,我对android上的SpeechRecognitor有问题。这是我的密码: public class MyRecognizerListener implements RecognitionListener { String id; MyRecognizerListener(String id){ this.id = id; } @Override public void onEndOfSpeech() { } @O

我对android上的SpeechRecognitor有问题。这是我的密码:

public class MyRecognizerListener implements RecognitionListener {

    String id;

    MyRecognizerListener(String id){
        this.id = id;
    }

    @Override
    public void onEndOfSpeech() {
    }

    @Override
    public void onBeginningOfSpeech() {
        Log.d("Speech", "Inizia ad Ascoltare");
    }

    @Override
    public void onReadyForSpeech(Bundle params) {
        Log.d("Speech", "E' pronto ad Ascoltare");
    }

    @Override
    public void onPartialResults(Bundle results) {
            matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

            if(matches.size() > 1) {

                Log.d("Speech", "Risultati Parziali = " + Integer.toString(matches.size()));

                for (int i = 0; i < matches.size(); i++) {
                    Log.d("Speech", matches.get(i));
                }

                if (matches.contains("si") || matches.contains("sì") || matches.contains("Sì")
                        || matches.contains("yes") || matches.contains("ES")) {
                    Opera opera = createOpera(id);
                    startAudio(opera);
                }

                matches = null;
                turnSpeechOff = false;
                speechRecognizer.cancel();
                speechRecognizer.destroy();
                speechRecognizer = null;
            }
    }

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

    }

    @Override
    public void onError(int error) {

        if(turnSpeechOff) {
            Log.d("Speech", Integer.toString(error));
            turnSpeechOff = false;
            speechRecognizer.cancel();
            speechRecognizer.destroy();
            speechRecognizer = null;

        }

    }

    @Override
    public void onRmsChanged(float rmsdB) {

    }

    @Override
    public void onBufferReceived(byte[] buffer) {

    }

    @Override
    public void onResults(Bundle results) {
        matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

        for (int i = 0; i < matches.size(); i++){
            Log.d("Parole",  matches.get(i));
        }

        if(matches.contains("si") || matches.contains("sì") || matches.contains("Sì")
                || matches.contains("yes") || matches.contains("ES")){
            Opera opera = createOpera(id);
            startAudio(opera);
        }

        matches = null;
        turnSpeechOff = false;
        speechRecognizer.cancel();
        speechRecognizer.destroy();
        speechRecognizer = null;
    }

}

public void startAudioAsk(final String art_id){

    if(speechRecognizer != null) {
        return;
    }
    if(audioPlayer == null || !audioPlayer.isPlaying() ) {

        if(operaAudioAsk != null && operaAudioAsk.equals(art_id)){
            return;
        }

        operaAudioAsk = art_id;
        if(language.equals("IT")) {
            audioPlayer = MediaPlayer.create(this, R.raw.chiedi);
        } else {
            audioPlayer = MediaPlayer.create(this, R.raw.ask);
        }
        audioPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                audioPlayer.reset();
                audioPlayer.release();
                int audioTitle;
                if(language.equals("IT")){
                    audioTitle = getResources().getIdentifier(art_id + "_title" + "_it", "raw", getPackageName());
                    audioPlayer = MediaPlayer.create(MainActivity.this, audioTitle);
                } else {
                    audioTitle = getResources().getIdentifier(art_id + "_title" + "_en", "raw", getPackageName());
                    audioPlayer = MediaPlayer.create(MainActivity.this, audioTitle);
                }
                audioPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        askVoice(art_id);
                        audioPlayer.reset();
                        audioPlayer.release();
                        audioPlayer = null;
                    }
                });
                audioPlayer.start();
            }
        });

        audioPlayer.start();
    }
}

public void askVoice(String art_id){
    if(speechRecognizer == null) {
        speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
        speechRecognizer.setRecognitionListener(new MyRecognizerListener(art_id));
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName());
        intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
        intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
        intent.putExtra(RecognizerIntent.EXTRA_WEB_SEARCH_ONLY, true);
        if(language.equals("IT")){
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "it");
        } else {
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en_US");
        }
        speechRecognizer.startListening(intent);
        voiceTimer = new Timer();
        voiceTimer.schedule(new StopVoiceManager(), 2000);
        Log.d("Speech", "Starta");
    }
}

public void stopVoice(){
    if(speechRecognizer != null){
        Log.d("Speech", "Cancello");
        turnSpeechOff = true;
        speechRecognizer.stopListening();
    }
}

public class StopVoiceManager extends TimerTask{

    @Override
    public void run() {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                stopVoice();
                Log.d("Speech", "Prova a Cancellare");
            }
        });
    }
}
公共类MyRecognitzerListener实现了RecognitionListener{
字符串id;
MyRecognitizerListener(字符串id){
this.id=id;
}
@凌驾
公共无效onEndOfSpeech(){
}
@凌驾
开始时的公共无效fSpeech(){
日志d(“演讲”、“广告宣传”);
}
@凌驾
ReadyForSpeech上的公共void(Bundle参数){
日志d(“演讲”,“E”pronto ad Ascoltare”);
}
@凌驾
公共void onPartialResults(捆绑结果){
matches=results.getStringArrayList(SpeechRecognizer.results\u RECOGNITION);
如果(匹配.size()>1){
Log.d(“Speech”,“Risultati Parziali=“+Integer.toString(matches.size())”);
for(int i=0;i
正如你所看到的,还有一项任务