繁体   English   中英

如何使SpeechRecognizer返回非英语字符串

[英]How to get SpeechRecognizer to return non-English strings

我正在使用SpeechRecognizer尝试找回一些德语字符串。 我正在传递Google Translate德语录音(例如,“你好吗?”->“ Wie geht es Ihnen?”)。

我已经看过几个关于如何更改语言以接受英语以外的东西的SO问题,但似乎没有一个可行。

在将设备的语言设置保持为英语(en-US)的同时,有人知道如何执行此操作吗?

仅当将设备的语言设置为“ de-DE”时,我才能成功取回德语字符串。

这是我的示例代码:

public class MainActivity extends Activity {

    private static final String TAG = MainActivity.class.getSimpleName();
    Button mSpeakBtn;
    TextView mResultTextView;
    SpeechRecognizer mSpeechRecognizer;

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

        // Init Views
        mSpeakBtn = (Button) findViewById(R.id.speak_btn);
        mResultTextView = (TextView) findViewById(R.id.result_tv);

        // Set click listener for button
        mSpeakBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mResultTextView.setText("Speak now...");

                mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
                mSpeechRecognizer.setRecognitionListener(new RecognitionListener() {
                    @Override
                    public void onReadyForSpeech(Bundle params) {

                    }

                    @Override
                    public void onBeginningOfSpeech() {
                    }

                    @Override
                    public void onRmsChanged(float rmsdB) {

                    }

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

                    }

                    @Override
                    public void onEndOfSpeech() {
                        mResultTextView.setText("Processing...");
                    }

                    @Override
                    public void onError(int error) {
                        mResultTextView.setText("ERROR: " + error);
                    }

                    @Override
                    public void onResults(Bundle results) {
                        List<String> allWords = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
                        Log.d(TAG, "onResults:\t" + allWords.toString());
                        String result = allWords.get(0);
                        mResultTextView.setText("RESULT: '" + result + "'");
                    }

                    @Override
                    public void onPartialResults(Bundle partialResults) {

                    }

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

                    }
                });

                String locale = Locale.GERMANY.toString().replace("_", "-");
                Log.d(TAG, "Locale:\t" + locale);

                Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, locale);
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, locale);
                intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getApplication().getPackageName());
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
                mSpeechRecognizer.startListening(intent);
            }
        });
    }
}

我也只在这样做的地方尝试过:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, locale);
mSpeechRecognizer.startListening(intent);

但是结果是一样的-将德语发音转换为“英语”。

有指针吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM