Android 调用百度在线语音识别功能

换了好几个语音转文字的工具,主要跟百度上大家的方法一样,最开始用的科大讯飞的语音,真的还蛮好用的,整体来说demo的接口比较清晰吧~准确率也很高,但是量大就要收费。所以,换了第二种,Android原生语音识别功能,但是,现在很多手机都进不去Google了,开放的接口也用不了,小米可以用哦。已经试过了,照网上的去调原生的接口,对于小米就直接可以去调小爱了!惊喜,哈哈哈,原谅我书读得少!但是其他很多手机还是用不了了,所以,放弃了。最后只能选百度免费的语音识别了!
这里呢,首先很感谢 https://www.jb51.net/article/106299.htm?winzoom=1#comments ,
这里的工具类SpeechRecognizerTool把百度语音识别中可能会用到的接口给列出来了,直接可以用,对于初学者来说很棒~~因为要实现说话时,跟微信一样的语音提示框,所以参考了 https://blog.csdn.net/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中,然后在自己的项目中
Android 调用百度在线语音识别功能_第1张图片

2.然后在manifest里面application或者你自己的activity下添加

     
    
    
        

3.添加权限
(1)静态的 manifest中的权限

 
 
 
 
 
 
 

(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 toApplyList = new ArrayList();

    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.net/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的一些布局文件

 
 
  
  

7.仿微信的对话框那种网上很多哈,这里就不放了 https://blog.csdn.net/lhk147852369/article/details/78658055 里面写了一个dialog的类,可以直接参考用的
结束~~~

你可能感兴趣的:(Android,移动端)