讯飞语音——语音转文字(易错点)

¼òµ¥µÄѶ·ÉÓïÒôʹÓÃ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();
    }
}