讯飞语音——语音转文字(易错点)
¼òµ¥µÄѶ·ÉÓïÒôʹÓÃTips
¸ù¾ÝѶ·É¹Ù·½ÌṩµÄdemo£¬¼òµ¥µÄдÁ˼¸¸ö×¢ÒâÊÂÏÒ×´íµã£©¡£
µÚ1²½£ºÔÚÏÂÔØSDKµÄʱºò£¬ÐèҪעÒ⣬SDK»á¸ú×Ô¼ºÔÚѶ·É×¢²áµÄÏîÄ¿Óйء£ÔÚAndroid StudioÖÐн¨ÏîÄ¿£¬appkeyÐèÒª¸úÏÂÔصÄSDK¶ÔÓ¦ÆðÀ´£¬·ñÔò»áÌáʾappkey²»ÕýÈ·¡£
µÚ2²½£º¿½jar°üºÍ.soÎļþ¡£jar°ü¿ÉÒÔÖ±½ÓÌí¼Óµ½ÏîÄ¿ÖÐÈ¥£¬ÀàËÆÓÚ"Add to Path"¡£.soÎļþ£¬ÐèÒªÔÚbuild.gradleÎļþÖÐÊÖ¹¤È¥×¢²á£¬´úÂëÈçÏ£º sourceSetsÓëbuildTypesÊÇͬһ¼¶µÄ
buildTypes {
...
}
sourceSets {
main {
jniLibs.srcDirs = \['libs'\]
}
}
ÏêϸµÄActivityµÄ´úÂëÈçÏ£º
MainActivity:
MainActivity AppCompatActivity View.OnClickListener{
EditText ;
onResume() {
.onResume();
FlowerCollector.();
}
onPause() {
.onPause();
FlowerCollector.();
}
onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.);
.onCreate(savedInstanceState);
setContentView(R.layout.);
initView();
}
initView() {
= (EditText) findViewById(R.id.);
findViewById(R.id.).setOnClickListener();
}
onClick(View v) {
Intent intent = Intent(MainActivity.,IatDemoActivity.);
(intent != ){
startActivity(intent);
}
}
}
IatDemoActivityµÄÏêϸ´úÂ룺
public class IatDemoActivity extends Activity implements View.OnClickListener {
private static String TAG = IatDemoActivity.class.getSimpleName();
// ÓïÒôÌýд¶ÔÏó
private SpeechRecognizer mIat;
// ÓïÒôÌýдUI
private RecognizerDialog mIatDialog;
// ÒýÇæÀàÐÍ
private String mEngineType = SpeechConstant.TYPE_CLOUD;
private EditText mResultText;
private Toast mToast;
private SharedPreferences mSharedPreferences;
public String PREFER_NAME = "com.iflytek.setting";
// ÓÃHashMap´æ´¢Ìýд½á¹û
private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();
private RadioGroup group;
// Óï¼Ç°²×°ÖúÊÖÀà
ApkInstaller mInstaller;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_iat_demo);
initLayout();
//ʹÓÃspeechRecognizer¶ÔÏ󣬿ÉÒÔ¸ù¾Ý»Øµ÷ÏûÏ¢×Ô¶¨Òå½çÃæ
mIat = SpeechRecognizer.createRecognizer(IatDemoActivity.this, mInitListener);
//³õʼ»¯Ìýдdialog£¬Èç¹ûֻʹÓÃÓÐUIÌýд¹¦ÄÜ£¬ÎÞÐè´´½¨speechRecognizer
//ʹÓÃUIÌýд¹¦ÄÜ£¬·ÅÖò¼¾ÖÎļþºÍͼƬ×ÊÔ´
mIatDialog = new RecognizerDialog(IatDemoActivity.this,mInitListener);
mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
mResultText = ((EditText) findViewById(R.id.iat_text));
mSharedPreferences = getSharedPreferences(PREFER_NAME, Activity.MODE_PRIVATE);
// Óï¼Ç°²×°ÖúÊÖÀà
mInstaller = new ApkInstaller(IatDemoActivity.this);
}
private void initLayout() {
findViewById(R.id.iat_recognize).setOnClickListener(IatDemoActivity.this);
mResultText = (EditText) findViewById(R.id.txt_result);
}
/*
Ìýд¼àÌýÆ÷
*/
RecognizerListener mRecognizerListener = new RecognizerListener() {
@Override
public void onVolumeChanged(int volume, byte\[\] data) {
showTip("µ±Ç°ÕýÔÚ˵»°£¬ÒôÁ¿´óС£º" + volume);
Log.d(TAG, "·µ»ØÒôƵÊý¾Ý£º" + data.length);
}
@Override
public void onBeginOfSpeech() {
showTip("¿ªÊ¼Ëµ»°ÁË");
}
@Override
public void onEndOfSpeech() {
showTip("½áÊø˵»°");
}
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
Log.d(TAG, recognizerResult.getResultString());
printResult(recognizerResult);
if (b) {
// TODO ×îºóµÄ½á¹û
}
}
@Override
public void onError(SpeechError speechError) {
// Tips£º
// ´íÎóÂ룺10118(ÄúûÓÐ˵»°)£¬¿ÉÄÜÊǼÒô»úȨÏÞ±»½û£¬ÐèÒªÌáʾÓû§´ò¿ªÓ¦ÓõļÒôȨÏÞ¡£
// Èç¹ûʹÓñ¾µØ¹¦ÄÜ£¨Óï¼Ç£©ÐèÒªÌáʾÓû§¿ªÆôÓï¼ÇµÄ¼ÒôȨÏÞ¡£
showTip(speechError.getPlainDescription(true));
}
@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {
}
};
/**
* ÌýдUI¼àÌýÆ÷
*/
RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
printResult(recognizerResult);
}
@Override
public void onError(SpeechError speechError) {
showTip(speechError.getPlainDescription(true));
}
};
private void printResult(RecognizerResult results) {
String text = JsonParser.parseIatResult(results.getResultString());
String sn = null;
// ¶ÁÈ¡json½á¹ûÖеÄsn×Ö¶Î
try {
JSONObject resultJson = new JSONObject(results.getResultString());
sn = resultJson.optString("sn");
} catch (JSONException e) {
e.printStackTrace();
}
mIatResults.put(sn, text);
StringBuffer resultBuffer = new StringBuffer();
for (String key : mIatResults.keySet()) {
resultBuffer.append(mIatResults.get(key));
}
mResultText.setText(resultBuffer.toString());
mResultText.setSelection(mResultText.length());
}
/**
* ²ÎÊýÉèÖÃ
*/
public void setParam() {
// Çå¿Õ²ÎÊý
mIat.setParameter(SpeechConstant.PARAMS, null);
// ÉèÖÃÌýдÒýÇæ
mIat.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);
// ÉèÖ÷µ»Ø½á¹û¸ñʽ
mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");
String lag = mSharedPreferences.getString("iat_language_preference", "mandarin");
if (lag.equals("en_us")) {
// ÉèÖÃÓïÑÔ
mIat.setParameter(SpeechConstant.LANGUAGE, "en_us");
} else {
// ÉèÖÃÓïÑÔ
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
// ÉèÖÃÓïÑÔÇøÓò
mIat.setParameter(SpeechConstant.ACCENT, lag);
}
// ÉèÖÃÓïÒôÇ°¶Ëµã:¾²Òô³¬Ê±Ê±¼ä£¬¼´Óû§¶à³¤Ê±¼ä²»Ëµ»°Ôòµ±×ö³¬Ê±´¦Àí
mIat.setParameter(SpeechConstant.VAD_BOS, mSharedPreferences.getString("iat_vadbos_preference", "4000"));
// ÉèÖÃÓïÒôºó¶Ëµã:ºó¶Ëµã¾²Òô¼ì²âʱ¼ä£¬¼´Óû§Í£Ö¹Ëµ»°¶à³¤Ê±¼äÄÚ¼´ÈÏΪ²»ÔÙÊäÈ룬 ×Ô¶¯Í£Ö¹Â¼Òô
mIat.setParameter(SpeechConstant.VAD_EOS, mSharedPreferences.getString("iat_vadeos_preference", "1000"));
// ÉèÖñêµã·ûºÅ,ÉèÖÃΪ"0"·µ»Ø½á¹ûÎÞ±êµã,ÉèÖÃΪ"1"·µ»Ø½á¹ûÓбêµã
mIat.setParameter(SpeechConstant.ASR_PTT, mSharedPreferences.getString("iat_punc_preference", "1"));
// ÉèÖÃÒôƵ±£´æ·¾¶£¬±£´æÒôƵ¸ñʽ֧³Öpcm¡¢wav£¬ÉèÖ÷¾¶Îªsd¿¨Çë×¢ÒâWRITE_EXTERNAL_STORAGEȨÏÞ
// ×¢£ºAUDIO_FORMAT²ÎÊýÓï¼ÇÐèÒª¸üа汾²ÅÄÜÉúЧ
mIat.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH,
Environment.getExternalStorageDirectory() + "/msc/TalkYuyin/iat"+((Long)System.currentTimeMillis()).toString().hashCode()+".wav");
}
private InitListener mInitListener = new InitListener() {
@Override
public void onInit(int i) {
if (i != ErrorCode.SUCCESS) {
showTip("³õʼ»¯Ê§°Ü£¬´íÎóÂ룺" + i);
}
}
};
private void showTip(final String str) {
mToast.setText(str);
mToast.show();
}
int ret = 0; // º¯Êýµ÷Ó÷µ»ØÖµ
@Override
public void onClick(View view) {
switch (view.getId()){
// ¿ªÊ¼Ìýд
// ÈçºÎÅжÏÒ»´ÎÌýд½áÊø£ºOnResult isLast=true »òÕß onError
case R.id.iat_recognize:
mResultText.setText(null);// Çå¿ÕÏÔʾÄÚÈÝ
mIatResults.clear();
// ÉèÖòÎÊý
setParam();
boolean isShowDialog = mSharedPreferences.getBoolean(
getString(R.string.pref_key_iat_show), true);
if (isShowDialog) {
// ÏÔʾÌýд¶Ô»°¿ò
mIatDialog.setListener(mRecognizerDialogListener);
mIatDialog.show();
showTip(getString(R.string.text_begin));
} else {
// ²»ÏÔʾÌýд¶Ô»°¿ò
ret = mIat.startListening(mRecognizerListener);
if (ret != ErrorCode.SUCCESS) {
showTip("Ìýдʧ°Ü,´íÎóÂ룺" + ret);
} else {
showTip(getString(R.string.text_begin));
}
}
break;
// Í£Ö¹Ìýд
case R.id.iat_stop:
mIat.stopListening();
showTip("Í£Ö¹Ìýд");
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// Í˳öʱÊÍ·ÅÁ¬½Ó
mIat.cancel();
mIat.destroy();
}
@Override
protected void onResume() {
// ¿ª·Åͳ¼Æ Òƶ¯Êý¾Ýͳ¼Æ·ÖÎö
FlowerCollector.onResume(IatDemoActivity.this);
FlowerCollector.onPageStart(TAG);
super.onResume();
}
@Override
protected void onPause() {
// ¿ª·Åͳ¼Æ Òƶ¯Êý¾Ýͳ¼Æ·ÖÎö
FlowerCollector.onPageEnd(TAG);
FlowerCollector.onPause(IatDemoActivity.this);
super.onPause();
}
}