Java 语音转文字

最近变懒了,连做读书笔记都不想打字了,于是找了一下网上看看有木有语音转文字的工具,发现 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;

/**
 * @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音频。
    }
}

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java语音文字可以使用Java Speech API(JSAPI),它是Java SE 6中的一项标准API,提供了语音识别语音合成、语音录制等功能。 使用JSAPI进行语音文字,需要先创建一个SpeechRecognizer对象,然后打开一个音频输入流,将音频数据传给SpeechRecognizer进行语音识别。识别完成后,可以通过监听RecognitionResult事件来获取识别结果。 下面是一个简单的Java语音文字的例子: ``` import javax.speech.*; import javax.speech.recognition.*; import java.io.*; public class SpeechToTextDemo implements ResultListener { public static void main(String[] args) throws Exception { // 创建语音识别器 SpeechRecognizer recognizer = Central.createRecognizer(null); // 注册结果监听器 recognizer.addResultListener(new SpeechToTextDemo()); // 打开音频输入流 AudioFileFormat aff = new AudioFileFormat(AudioFileFormat.Type.WAVE, new File("test.wav")); AudioInputStream ais = AudioSystem.getAudioInputStream(new File("test.wav")); recognizer.allocate(); recognizer.recognize(ais); } // 语音识别结果处理 public void resultAccepted(ResultEvent e) { Result result = (Result)(e.getSource()); String text = result.getBestFinalResultNoFiller(); System.out.println("识别结果:" + text); } } ``` 这个例子读取一个WAV格式的音频文件test.wav,并将其换为文字输出。需要注意的是,JSAPI目前只支持英语、日语和西班牙语等少数语言,对于中文等其他语言的支持还比较有限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值