📜  如何在Android中将语音转换为文本?(1)

📅  最后修改于: 2023-12-03 15:24:26.756000             🧑  作者: Mango

如何在Android中将语音转换为文本?

在Android开发中,将语音转换为文本是很常见的一个需求,比如语音输入、语音搜索等等。Android提供了自带的语音识别功能,可以非常方便地进行语音转换为文本。本文将介绍如何在Android中使用自带的语音识别功能将语音转换为文本。

步骤
步骤1:添加权限

首先,需要在AndroidManifest.xml中添加一下权限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

其中,RECORD_AUDIO权限用于录制语音,INTERNET权限用于连接Google服务器进行语音识别。

步骤2:创建语音识别意图

Android提供了RecognizerIntent类来创建语音识别的意图。以下是一个简单的示例:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请说话...");
startActivityForResult(intent, REQUEST_CODE);

其中:

  • ACTION_RECOGNIZE_SPEECH是语音识别的行为。
  • EXTRA_LANGUAGE_MODEL指定语言模型,这里使用LANGUAGE_MODEL_FREE_FORM表示自由形式的语音识别。
  • EXTRA_PROMPT用于设置提示信息,可以根据需要自定义。
  • startActivityForResult方法用于启动语音识别意图。
步骤3:处理语音识别结果

当语音识别完成后,会将结果返回给调用者。因此需要在onActivityResult方法中处理语音识别结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        if (results != null && results.size() > 0) {
            String result = results.get(0);
            // 处理识别结果
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

其中:

  • RESULT_OK表示语音识别成功。
  • EXTRA_RESULTS是返回的识别结果,是一个String类型的ArrayList。
  • 取出识别结果后,可以根据需要进行处理。
完整示例

以下是一个完整的示例,用于将语音转换为文本,然后显示在TextView中:

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_CODE = 1001;
    private Button mBtnStart;
    private TextView mTvResult;

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

        mBtnStart = findViewById(R.id.btn_start);
        mTvResult = findViewById(R.id.tv_result);

        mBtnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请说话...");
                startActivityForResult(intent, REQUEST_CODE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            if (results != null && results.size() > 0) {
                String result = results.get(0);
                mTvResult.setText(result);
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}
结论

使用Android自带的语音识别功能,可以非常方便地将语音转换为文本。在实际开发中,可以根据需要进行进一步封装,提供更加灵活的语音输入方式。