admin管理员组文章数量:1654380
换了好几个语音转文字的工具,主要跟百度上大家的方法一样,最开始用的科大讯飞的语音,真的还蛮好用的,整体来说demo的接口比较清晰吧~准确率也很高,但是量大就要收费。所以,换了第二种,Android原生语音识别功能,但是,现在很多手机都进不去Google了,开放的接口也用不了,小米可以用哦。已经试过了,照网上的去调原生的接口,对于小米就直接可以去调小爱了!惊喜,哈哈哈,原谅我书读得少!但是其他很多手机还是用不了了,所以,放弃了。最后只能选百度免费的语音识别了!
这里呢,首先很感谢 https://www.jb51/article/106299.htm?winzoom=1#comments ,
这里的工具类SpeechRecognizerTool把百度语音识别中可能会用到的接口给列出来了,直接可以用,对于初学者来说很棒~~因为要实现说话时,跟微信一样的语音提示框,所以参考了 https://blog.csdn/lhk147852369/article/details/78658055 的对话框的写法
百度语音首先:
1.创建一个应用,拥有应用的APPID,API_KEY,SECRET_KEY,下载Android的sdk,会有一个demo。
文件名:audiobd_speech_sdk_asr_v3.0.8.2_20180801_d6f298a
把下载的文件中 core->src->main->jniLibs中的5个文件放到自己工程中的app->src->main->(自己新建)jniLibs中
把下载的文件中的core->libs中的bdasr_V3_20180801_d6f298a.jar拷贝放到自己工程中的app->libs中,然后在自己的项目中
2.然后在manifest里面application或者你自己的activity下添加
<meta-data android:name="com.baidu.speech.APP_ID"
android:value="*******" />
<meta-data
android:name="com.baidu.speech.API_KEY"
android:value="******************" />
<meta-data
android:name="com.baidu.speech.SECRET_KEY"
android:value="**********************************" />
<service android:name="com.baidu.speech.VoiceRecognitionService" android:exported="false" />
3.添加权限
(1)静态的 manifest中的权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
(2)动态的权限申请
/**
* android 6.0 以上需要动态申请权限
*/
private void initPermission() {
String permissions[] = {Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.INTERNET,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
ArrayList<String> toApplyList = new ArrayList<String>();
for (String perm :permissions){
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
toApplyList.add(perm);
//进入到这里代表没有权限.
}
}
String tmpList[] = new String[toApplyList.size()];
if (!toApplyList.isEmpty()){
ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// 此处为android 6.0以上动态授权的回调,用户自行实现。
}
4.SpeechRecognizerTool这个工具类
他们写的哈:https://www.jb51/article/106299.htm?winzoom=1#comments
package com.yjp.speechrecognizer;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognitionListener;
import android.speech.SpeechRecognizer;
import android.widget.Toast;
import com.baidu.speech.VoiceRecognitionService;
public class SpeechRecognizerTool implements RecognitionListener {
public interface ResultsCallback {
void onResults(String result);
}
private Context mContext;
private SpeechRecognizer mSpeechRecognizer;
private ResultsCallback mResultsCallback;
public SpeechRecognizerTool(Context context) {
mContext = context;
}
public synchronized void createTool() {
if (null == mSpeechRecognizer) {
// 创建识别器
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(mContext,
new ComponentName(mContext, VoiceRecognitionService.class));
// 注册监听器
mSpeechRecognizer.setRecognitionListener(this);
}
}
public synchronized void destroyTool() {
mSpeechRecognizer.stopListening();
mSpeechRecognizer.destroy();
mSpeechRecognizer = null;
}
// 开始识别
public void startASR(ResultsCallback callback) {
mResultsCallback = callback;
Intent intent = new Intent();
bindParams(intent);
mSpeechRecognizer.startListening(intent);
}
//停止识别
public void stopASR() {
mSpeechRecognizer.stopListening();
}
private void bindParams(Intent intent) {
// 设置识别参数
}
@Override
public void onReadyForSpeech(Bundle params) {
// 准备就绪
Toast.makeText(mContext, "请开始说话", Toast.LENGTH_SHORT).show();
}
@Override
public void onBeginningOfSpeech() {
// 开始说话处理
}
@Override
public void onRmsChanged(float rmsdB) {
// 音量变化处理
//这里可以调用声音大小哦,在写像微信一样的声音的时候就可以直接调用哦~
}
@Override
public void onBufferReceived(byte[] buffer) {
// 录音数据传出处理
}
@Override
public void onEndOfSpeech() {
// 说话结束处理
}
@Override
public void onError(int error) {
}
@Override
public void onResults(Bundle results) {
// 最终结果处理
if (mResultsCallback != null) {
String text = results.get(SpeechRecognizer.RESULTS_RECOGNITION)
.toString().replace("]", "").replace("[", "");
mResultsCallback.onResults(text);
}
}
@Override
public void onPartialResults(Bundle partialResults) {
// 临时结果处理
}
@Override
public void onEvent(int eventType, Bundle params) {
}
}
5.在把他们的调用方法拿上来,可以参考使用工具类
package com.yjp.speechrecognizer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements SpeechRecognizerTool.ResultsCallback {
private Button mStartSpeechButton;
private TextView mTextView;
private SpeechRecognizerTool mSpeechRecognizerTool = new SpeechRecognizerTool(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.speechTextView);
mStartSpeechButton = (Button) findViewById(R.id.startSpeechButton);
mStartSpeechButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
mSpeechRecognizerTool.startASR(MainActivity.this);
mStartSpeechButton.setBackgroundResource(
R.drawable.bdspeech_btn_orangelight_pressed);
break;
case MotionEvent.ACTION_UP:
mSpeechRecognizerTool.stopASR();
mStartSpeechButton.setBackgroundResource(
R.drawable.bdspeech_btn_orangelight_normal);
break;
default:
return false;
}
return true;
}
});
}
@Override
protected void onStart() {
super.onStart();
mSpeechRecognizerTool.createTool();
}
@Override
protected void onStop() {
super.onStop();
mSpeechRecognizerTool.destroyTool();
}
@Override
public void onResults(String result) {
final String finalResult = result;
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mTextView.setText(finalResult);
}
});
}
}
6.MainActivity的一些布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android/apk/res/android"
xmlns:tools="http://schemas.android/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
android:gravity="center"
tools:context="com.yjp.speechrecognizer.MainActivity">
<Button
android:id="@+id/startSpeechButton"
android:layout_width="60dp"
android:layout_height="40dp"
android:background="@drawable/bdspeech_btn_orangelight_normal"
android:text="按住说话"/>
<TextView
android:id="@+id/speechTextView"
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
7.仿微信的对话框那种网上很多哈,这里就不放了 https://blog.csdn/lhk147852369/article/details/78658055 里面写了一个dialog的类,可以直接参考用的
结束~~~
版权声明:本文标题:Android 调用百度在线语音识别功能 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729659559a1209542.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论