Android:语音到文本 - 来自“onResults”Bundle的URI

时间:2016-10-02 05:21:42

标签: java android

我知道这个问题已被提出但我似乎无法找到任何有答案的人,所以我只是在推动我的运气

当我使用Google Speech to Text API时,我正在尝试恢复音频文件。到目前为止,我已经成功,但我只能通过语音对话框来完成。我正在尝试在没有对话框的情况下做同样的事情。

基本上,我正在尝试在“onResults”中获取“Bundle Results”的URI,以便我可以获取音频文件。

我正在尝试这样做(REQ_CODE_SPEECH_INPUT为100):

private void promptSpeechInput() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
            getString(R.string.speech_prompt));
    // for getting audio file returned
    intent.putExtra("android.speech.extra.GET_AUDIO_FORMAT", "audio/AMR");
    intent.putExtra("android.speech.extra.GET_AUDIO", true);

    startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case REQ_CODE_SPEECH_INPUT: {
            if (resultCode == RESULT_OK && null != data) {

                Bundle bundle = data.getExtras();

                ArrayList<String> result_text = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                ArrayList<String> results_audio = bundle.getStringArrayList(RecognizerIntent.EXTRA_RESULTS);

                txtSpeechInput.setText(result_text.get(0));

                Uri audioUri = data.getData();
                ContentResolver contentResolver = getContentResolver();
            }
        }
    }
}

在这里:

    speech = SpeechRecognizer.createSpeechRecognizer(this);
    speech.setRecognitionListener(this);
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE,
            "en-us");
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
            this.getPackageName());



    // for getting audio file returned
    recognizerIntent.putExtra("android.speech.extra.GET_AUDIO_FORMAT", "audio/AMR");
    recognizerIntent.putExtra("android.speech.extra.GET_AUDIO", true);

@Override
public void onResults(Bundle results) {

    //Bundle bundle = data.getExtras();

    ArrayList<String> result_text = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
    //ArrayList<String> results_audio = results.getStringArrayList(RecognizerIntent.EXTRA_RESULTS);

    returnedText.setText(result_text.get(0));

    Uri audioUri = recognizerIntent.getExtras();
    ContentResolver contentResolver = getContentResolver();

有可能吗?或者至少,是否可以使对话框不可见?非常感谢。

0 个答案:

没有答案