Java 语音转文字

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ocp114/article/details/81911041

最近变懒了,连做读书笔记都不想打字了,于是找了一下网上看看有木有语音转文字的工具,发现 windows 自家就有啊,但是准确率惊人啊,所以心血来潮就开搞了,这里用到了讯飞的语音转文字服务
1、到讯飞开放平台那边注册开发者账号
2、找到 “语音听写"
3、创建应用
4、填写完表单之后,会得到一个 appid
5、下载 SDK
6、下载的 SDK 一般都有三个 demo 项目,使用其中一个即可
7、加入下面的 class,运行

import com.iflytek.cloud.speech.RecognizerListener;
import com.iflytek.cloud.speech.RecognizerResult;
import com.iflytek.cloud.speech.SpeechConstant;
import com.iflytek.cloud.speech.SpeechError;
import com.iflytek.cloud.speech.SpeechRecognizer;
import com.iflytek.cloud.speech.SpeechUtility;

/**
 * @author 黄小天  [email protected]
 * @date 2018年8月20日 下午10:41:59
 */
public class Recoder {
    //讯飞开放平台语音听写 appid
    private static String APPID = "appid";
    //语音听写对象
    private SpeechRecognizer mIat = SpeechRecognizer.createRecognizer();
    //标志是否已经开始录音
    private boolean startRecordFlag = false;
    
    public Recoder() {
        setting();
    }
    
    public static void main(String[] args) {
        new Recoder().startRecord();
    }
    
    /**
     * 开始录音
     */
    public void startRecord() {
        startRecordFlag = true;
        if (!mIat.isListening()) {
            mIat.startListening(recognizerListener);
        }
    }
    
    /**
     * 停止录音
     */
    public void stopRecord() {
        startRecordFlag = false;
        mIat.stopListening();
    }
    
    /**
     * 听写监听器
     */
    private RecognizerListener recognizerListener = new RecognizerListener() {
        private StringBuffer sb = new StringBuffer();
        /**
         * 获取听写结果. 获取RecognizerResult类型的识别结果
         */
        @Override
        public void onResult(RecognizerResult results, boolean islast) {
            sb.append(results.getResultString());
            if (islast) {
                System.out.println("result: " + sb.toString());
                sb.setLength(0);
                //开始新一轮语音识别
                if (startRecordFlag) {
                    mIat.stopListening();
                    mIat.startListening(recognizerListener);
                } 
            }
        }

        @Override
        public void onError(SpeechError error) {
            System.out.println("onError enter");
            if (null != error) {
                System.out.print(" Code:" + error.getErrorDescription(true));
            }
            //出错直接重试,暂时不做什么处理,可能会有死循环的事情发生
            if (startRecordFlag) {
                mIat.stopListening();
                mIat.startListening(recognizerListener);
            } 
        }

        @Override
        public void onEvent(int eventType, int arg1, int agr2, String msg) {}
        
        @Override
        public void onVolumeChanged(int volume) {}
        
        @Override
        public void onBeginOfSpeech() {}

        @Override
        public void onEndOfSpeech() {}
    };

    /**
     * 初始化基本配置
     */
    private void setting() {
        //设置开发者信息 appid
        SpeechUtility.createUtility("appid=" + APPID);
        
        //配置参数
        mIat.setParameter(SpeechConstant.RESULT_TYPE, "plain");//返回结果类型  {json, xml, plain}, 默认值:json
        
//        mIat.setParameter(SpeechConstant.NET_TIMEOUT, "20000");//网络连接超时时间,[0, 30000],默认值:20000
//        mIat.setParameter(SpeechConstant.KEY_SPEECH_TIMEOUT, "10000");//设置录取音频的最长时间,[0, 60000],默认值:60000
//        mIat.setParameter(SpeechConstant.DOMAIN, "iat");//应用领域用于听写和语音语义服务,{ "iat"(短信和日常用语), "video", "poi"(地图), "music" },默认值:"iat"
        mIat.setParameter(SpeechConstant.VAD_BOS, "1000");//开始录入音频后,音频前面部分最长静音时长,[1000, 10000], 默认值:5000
//        mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");//语言,{ "zh_cn", "en_us" }, 默认值:"zh_cn"
//        mIat.setParameter(SpeechConstant.ACCENT, "mandarin");//语言区域 默认 mandarin:普通话 | cantonese:粤语 | lmz:四川话 | henanese:河南话
        mIat.setParameter(SpeechConstant.VAD_EOS, "1000");//后端点超时,开始录入音频后,音频后面部分最长静音时长,[0, 10000], 默认值:1800
//        mIat.setParameter(SpeechConstant.SAMPLE_RATE, "16000");//识别采样率,{8000,16000}, 默认值:16000
//        mIat.setParameter(SpeechConstant.ASR_NBEST, "1");//句子级多候选,有歧义的句子有多少个候选结果 ,[1, 5],默认值:1
//        mIat.setParameter(SpeechConstant.ASR_WBEST, "1");//词级多候选,有歧义的词有多少个候选结果 ,[1, 5],默认值:1
//        mIat.setParameter(SpeechConstant.ASR_PTT, "1");//设置是否有标点符号, { null, 0, 1}, 默认值:1
//        mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, null );//识别录音保存路径 当前识别支持未压缩的16位,单声道,采样率为16000或8000,字节顺序为 Little-Endian的Windows PCM音频。
    }
}

猜你喜欢

转载自blog.csdn.net/ocp114/article/details/81911041