model接口以及实现类:
/**
* Model执行业务逻辑,需要的操作开始包括语音识别、停止识别、释放资源,分别对应语音sdk的start、stop、release操作
*/
public interface IAsrModel {
void start(AppConfig appConfig,AsrConfig asrConfig,AsrListener asrListener);
void stop();
void release();
}
public class AsrModel implements IAsrModel {
@Override
public void start(AppConfig appConfig, AsrConfig asrConfig, AsrListener asrListener) {
//创建语音sdk引擎,传入AppConfig appConfig, AsrConfig asrConfig, AsrListener asrListener,开始语音识别
}
@Override
public void stop() {
// 调用语音引擎的stop,停止语音识别
}
@Override
public void release() {
//调用语音引擎的release,释放资源
}
}
view接口以及实现类:
public interface IAsrView {
//获取语音参数配置
AsrConfig getAsrConfig();
//获取App配置
AppConfig getAppConfig();
//弹出语音识别对话框
void showDialog();
//更新音频波浪线
void updateAudioWave(double value);
//更新textView中的语音识别结果
void updateAsrResult(String asrResult);
//语音识别对话框消失
void dismissDialog();
}
public class AsrActivity extends Activity implements IAsrView ,View.OnClickListener{
final int START_BTN = 1;
final int STOP_BTN = 2;
private IPresenter iPresenter = new AsrPresenter(this);
private EditText languageCodeEt;
private CheckBox autoStopCb;
private Button startAsrBtn;
private Button stopAsrBtn;
private TextView asrResultTv;
private Dialog dialog;
//音频波浪线
private View audioWaveView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_asr);
initView();
}
private void initView() {
//省去findViewById
}
@Override
public AsrConfig getAsrConfig() {
return new AsrConfig(languageCodeEt.toString(),autoStopCb.isChecked());
}
@Override
public AppConfig getAppConfig() {
return new AppConfig("appid","appkey","packagename","appversion");
}
@Override
public void showDialog() {
dialog.show();
}
@Override
public void updateAudioWave(double value) {
//audioWaveView显示音频波浪线
}
@Override
public void updateAsrResult(String asrResult) {
asrResultTv.setText(asrResult);
}
@Override
public void dismissDialog() {
dialog.dismiss();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case START_BTN:
iPresenter.start();
break;
case STOP_BTN:
iPresenter.stop();
break;
}
}
}
presenter接口以及实现类:
public interface IPresenter {
void start();
void stop();
void release();
}
public class AsrPresenter implements IPresenter {
private IAsrModel asrModel;
private IAsrView asrView;
public AsrPresenter(IAsrView asrView) {
asrModel = new AsrModel();
this.asrView = asrView;
}
@Override
public void start() {
//弹出语音识别对话框
asrView.showDialog();
//开始语音识别业务逻辑
asrModel.start(asrView.getAppConfig(), asrView.getAsrConfig(), new AsrListener() {
@Override
public void onStart() {
}
@Override
public void onNext(String asrResult) {
//拿到了语音识别结果更新界面
asrView.updateAsrResult(asrResult);
}
@Override
public void onAudioData(short[] audioData, double dbValue) {
//拿到了音频的分贝,更新界面上的语音波浪
asrView.updateAudioWave(dbValue);
}
@Override
public void onComplete() {
//语音结束,弹出框消失并释放资源
asrView.dismissDialog();
release();
}
@Override
public void onError(int errorCode) {
//语音出错,弹出框消失并释放资源
asrView.dismissDialog();
release();
}
});
}
@Override
public void stop() {
//停止语音识别
asrModel.stop();
}
@Override
public void release() {
//释放资源
asrModel.release();
}
}
bean对象:
public class AsrConfig {
private String languageCode;//语言种类
private boolean isAutoStop;//识别过程中,用户停顿的话是否需要自动停止
public AsrConfig(String languageCode, boolean isAutoStop) {
this.languageCode = languageCode;
this.isAutoStop = isAutoStop;
}
public String getLanguageCode() {
return languageCode;
}
public void setLanguageCode(String languageCode) {
this.languageCode = languageCode;
}
public boolean isAutoStop() {
return isAutoStop;
}
public void setAutoStop(boolean autoStop) {
isAutoStop = autoStop;
}
}
/**
* 使用方App的一些数据,语音sdk需要
*/
public class AppConfig {
private String appId;
public AppConfig(String appId, String appKey, String packageName, String appVersion) {
this.appId = appId;
this.appKey = appKey;
this.packageName = packageName;
this.appVersion = appVersion;
}
private String appKey;
private String packageName;
private String appVersion;
}