使用讯飞实现语音听写与语音合成功能

article/2025/8/20 17:43:14

一、准备工作

1、首先你需要去科大讯飞的官网去注册一个账号,怎么注册我就不说了,然后去控制台,创建新应用。



2、下载对应的sdk,点击sdk下载,记住这里的APPID码,sdk初始化要用。



3、下载语音听写和在线语音合成对应的sdk(离线的语音听写需要手机安装语+这个软件才能用,离线语音合成收费,我就没考虑)



4、将压缩文件中的assets和lib放到项目中,需要注意的是如果是Android studio项目,lib文件夹中的.so相关文件夹都应该放在jniLibs文件夹里,直接放到libs下无法识别。


二、SDK初始化

与大部分的sdk一样越早初始化越好,免得用的时候忘了,初始化失败导致调用不成功,所以我选择在自定义的application中初始化,代码如下:


public class MyApplication extends Application {@Override
    public void onCreate() {/* 应用程序入口处调用,避免手机内存过小,杀死后台进程后通过历史intent
           进入Activity造成SpeechUtility对象为null*/
        
        /* 注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,
           请增加参数:SpeechConstant.FORCE_LOGIN+"=true"
           参数间使用“,”分隔。
           设置你申请的应用appid*/

        // 注意: appid 必须和下载的SDK保持一致,否则会出现10407错误

        StringBuffer param = new StringBuffer();param.append("appid="+getString(R.string.app_id));param.append(",");// 设置使用v5+
        param.append(SpeechConstant.ENGINE_MODE+"="+SpeechConstant.MODE_MSC);SpeechUtility.createUtility(MyApplication.this, param.toString());super.onCreate();}
}

三、语音听写功能

1、使用讯飞提供的UI

   


i.定义语音听写UI控件

//语音听写UI
private RecognizerDialog reDialog;

ii.定义语音听写初始化监听,监听初始化是否成功

/**
 * 语音听写初始化监听器。
 */
private InitListener mInitListener = new InitListener() {@Override
    public void onInit(int code) {Log.d("zhangdi", "SpeechRecognizer init() code = " + code);if (code != ErrorCode.SUCCESS) {showTip("初始化失败,错误码:" + code);}}
};

iii.初始化语音听写UI

// 初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer
// 使用UI听写功能,请根据sdk文件目录下的notice.txt,放置布局文件和图片资源
reDialog = new RecognizerDialog(this,mInitListener);

iv.定义听写UI的听写回调监听

/**
 * 听写UI监听器
 */
private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {@Override
    public void onResult(RecognizerResult results, boolean b) {//正确回调
        Log.d("zhangdi", "recognizer result" + results.getResultString());//解析返回的json字符
        String text = JsonParser.parseIatResult(results.getResultString());//将返回的结果显示在edittext        resultText.append(text);resultText.setSelection(resultText.length());}/**
     * 识别回调错误.
     */
    public void onError(SpeechError error) {if(mTranslateEnable && error.getErrorCode() == 14002) {showTip( error.getPlainDescription(true)+"\n请确认是否已开通翻译功能" );} else {showTip(error.getPlainDescription(true));}}};

v.在语音听写对应的按钮点击事件中显示UI

// 显示听写对话框
reDialog.setListener(mRecognizerDialogListener);
reDialog.show();
showTip(getString(R.string.text_begin));

2.使用自己的UI界面

i.定义语音听写对象

//语音听写对象
private SpeechRecognizer recognizer;

ii.定义语音听写初始化监听,监听初始化是否成功

/**
 * 语音听写初始化监听器。
 */
private InitListener mInitListener = new InitListener() {@Override
    public void onInit(int code) {Log.d("zhangdi", "SpeechRecognizer init() code = " + code);if (code != ErrorCode.SUCCESS) {showTip("初始化失败,错误码:" + code);}}
};

iii.初始化听写对象

// 初始化识别无UI识别对象
// 使用SpeechRecognizer对象,可根据回调消息自定义界面;
recognizer = SpeechRecognizer.createRecognizer(this, mInitListener);

iv.对听写对象进行参数设置

/**
     * 参数设置
     * @return
     */
    public void setParamRecognizer(){// 清空参数
        recognizer.setParameter(SpeechConstant.PARAMS, null);// 设置引擎,目前只支持云端模式,本地模式需要手机安装语+软件才能用
        recognizer.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);// 设置返回结果格式
        recognizer.setParameter(SpeechConstant.RESULT_TYPE, "json");// 设置语言
        recognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");// 设置语言地区,普通话
        recognizer.setParameter(SpeechConstant.ACCENT, "mandarin");// 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
        recognizer.setParameter(SpeechConstant.VAD_BOS, "4000");// 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
        recognizer.setParameter(SpeechConstant.VAD_EOS, "1000");// 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
        recognizer.setParameter(SpeechConstant.ASR_PTT, "1");// 设置音频保存路径,保存音频格式支持pcmwav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
        // 注:AUDIO_FORMAT参数语记需要更新版本才能生效
//        recognizer.setParameter(SpeechConstant.AUDIO_FORMAT,"wav");
//        recognizer.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/iat.wav");
    }

v.在语音听写对应的按钮事件中为听写对象设置回调监听

recognizer.startListening(new RecognizerListener() {@Override
    public void onVolumeChanged(int i, byte[] bytes) {Log.i("zhangdi","i = "+i+"bytes = "+bytes.toString());}@Override
    public void onBeginOfSpeech() {showTip("开始说话");}@Override
    public void onEndOfSpeech() {showTip("结束说话");}@Override
    public void onResult(RecognizerResult recognizerResult, boolean b) {resultText.append(recognizerResult.getResultString());}@Override
    public void onError(SpeechError speechError) {showTip(speechError.getErrorDescription());}@Override
    public void onEvent(int i, int i1, int i2, Bundle bundle) {Log.i("zhangdi","i = "+i+" i1 = "+i1+" i2 = "+i2);}
});

四、语音合成功能

1.定义语音合成对象

// 语音合成对象
private SpeechSynthesizer mTts;

2.语音合成初始化监听

/**
 * 语音合成初始化监听。
 */
private InitListener mTtsInitListener = new InitListener() {@Override
    public void onInit(int code) {Log.d("zhangdi", "InitListener init() code = " + code);if (code != ErrorCode.SUCCESS) {showTip("初始化失败,错误码:"+code);} //else {
            // 初始化成功,之后可以调用startSpeaking方法
            // 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,
            // 正确的做法是将onCreate中的startSpeaking调用移至这里
        //}
    }
};

3.初始化语音合成对象

// 初始化合成对象
mTts = SpeechSynthesizer.createSynthesizer(this, mTtsInitListener);

4.为语音合成对象设置参数

private void setParamTTS() {// 清空参数
    mTts.setParameter(SpeechConstant.PARAMS, null);//设置使用云端引擎,本地语音合成是收费的,所以忽略了
    mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);//设置发音人
    mTts.setParameter(SpeechConstant.VOICE_NAME,voicerCloud);//设置合成语速
    mTts.setParameter(SpeechConstant.SPEED, "50");//设置合成音调
    mTts.setParameter(SpeechConstant.PITCH, "50");//设置合成音量
    mTts.setParameter(SpeechConstant.VOLUME, "50");//设置播放器音频流类型
    mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");// 设置播放合成音频打断音乐播放,默认为true
    mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");}

5.定义语音合成监听回调

/**
 * 合成回调监听。
 */
private SynthesizerListener mTtsListener = new SynthesizerListener() {@Override
    public void onSpeakBegin() {showTip("开始播放");}@Override
    public void onSpeakPaused() {showTip("暂停播放");}@Override
    public void onSpeakResumed() {showTip("继续播放");}@Override
    public void onBufferProgress(int percent, int beginPos, int endPos,String info) {// 合成进度
        mPercentForBuffering = percent;showTip(String.format(getString(R.string.tts_toast_format),mPercentForBuffering, mPercentForPlaying));}@Override
    public void onSpeakProgress(int percent, int beginPos, int endPos) {// 播放进度
        mPercentForPlaying = percent;showTip(String.format(getString(R.string.tts_toast_format),mPercentForBuffering, mPercentForPlaying));}@Override
    public void onCompleted(SpeechError error) {if (error == null) {showTip("播放完成");} else if (error != null) {showTip(error.getPlainDescription(true));}}@Override
    public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
        // 若使用本地能力,会话idnull
        // if (SpeechEvent.EVENT_SESSION_ID == eventType) {
        //    String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
        //    Log.d(TAG, "session id =" + sid);
        // }
    }
};

6.在语音合成对应按钮的点击事件中为语音合成对象设置监听

int code = mTts.startSpeaking(text, mTtsListener);
if (code != ErrorCode.SUCCESS) {showTip("语音合成失败,错误码: " + code);
}


http://chatgpt.dhexx.cn/article/NCqWTdL9.shtml

相关文章

科大讯飞语音听写在vue2中的使用

安装 worker-loader版本是2.0.0 vue.config.js的配置如下chainWebpack:(config)=>{config.output.globalObject("this"); }, configureWebpack: (config) => {config.module.rules.push({test: /\.worker.js$/,use: {loader: "worker-loader",option…

vue+科大讯飞语音听写功能(解决针对vue new Worker报错问题)

参考1:vue科大讯飞语音听写功能(解决针对vue new Worker报错问题)_Other world的博客-CSDN博客 参考2:vue中使用web worker - Gerryli - 博客园 参考3:将PC浏览器、ZOOM等软件正在播放的音频实时转成文字!讯飞语音输入法的妙用 -…

Unity2021接入讯飞语音听写(Android)

使用的引擎工具: Unity2021.3.19 android-studio-2021.1.21 第一步: 新建一个Android项目(工程名字随便啦) 然后新建一个library (同上,库名自己命名吧) Android环境目前就算是初步建立好了。 …

vue2中接入讯飞语音听写

首先先登录https://www.xfyun.cn/,在控制台中创建自己的app,并且拿到APPID。 下载crypto-js 与线程worker npm install crypto-js npm install worker-loader 官网中有示例文件,稍微改造一下,封装成组件就能使用了。 transco…

Java 接入讯飞语音听写Speech to Text(STT)功能

标题 讯飞认证配置封装监听器客户端工具 Speech2TextClient.java 对外开放接口对外开放接口实现结果参考 根据官方提供的 WebIATWS 工具扩展修改,接入了讯飞的语音听写(STT)服务 讯飞认证配置 public class XFAuthorityConfig {public static final String hostUr…

html5语音听写流式,iOS 讯飞语音听写(流式版)

最近项目中用到了讯飞的语音识别,然后稍微看了一下,里面有几个值得注意的点,记录一下,先说语音听写(流式版),实时语音转写后期会附上 ,文末有 demo //语音听写(流式版) 语音听写流式版其实没设么好说的,因为直接有 SDK,导入项目就可以了,需要注意的点就是每个创建的 APP 和 SDK…

科大讯飞语音听写(Android)

前面就不废话了,像申请应用,获取SDK等等,我相信大家应该都会的,科大讯飞采用的是两种语音听写功能,一种带有UI,一种没有UI,本人还是比较笨的,所以就写了较为简单的不带UI的语音听写,…

语音转写和语音听写_如何在Windows 10上使用语音听写

语音转写和语音听写 Windows 10’s Fall Creators Update makes voice dictation much easier to use. Now, you can immediately begin dictation by pressing a key WindowsH on your keyboard. You don’t have to dig through the Control Panel and set anything up first…

【超简单】之基于PaddleSpeech搭建个人语音听写服务

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛? 当您面对成吨的会议录音,着急写会议纪要而…

遥感技术及高分遥感影像在地震中的应用及高分二号获取

长期以来,地震预报监测、灾害调查、灾情信息获取主要依靠实地勘测手段,其获取的数据精度和置信度虽然较高,但存在工作量大、效率低、费用高和信息不直观等缺点。遥感技术手段可在一定程度上克服传统实地勘测手段的缺点,并具有其他…

高分一号(GF-1)-中国高分辨率对地观测系统的第一颗卫星

2013年4月26日12时13分04秒由长征二号丁运载火箭成功发射,开启了中国对地观测的新时代。卫星全色分辨率是2米,多光谱分辨率为8米。高分一号卫星的宽幅多光谱相机幅宽达到了800公里。 “高分一号”的特点是增加了高分辨率多光谱相机,该相机的性…

历年(2017-2022)国产陆地观测卫星(高分1号2号6号等)外场绝对辐射定标系数

国产卫星绝对辐射定标系数(2008——2022) 2017年 参考博文:高分一号/二号/六号定标系数_desertsTsung的博客-CSDN博客

第059篇:高分二号遥感影像预处理流程(ENVI5.3.1平台+ENVI App Store中最新的中国国产卫星支持工具)

今天被袁老的新闻刷屏,湖南衡水县水稻基地传出好消息: 袁隆平团队第三代杂交水稻测产,测得晚稻平均亩产为911.7公斤 早稻晚稻实现亩产3061斤 伟大,除了伟大,不知道还能用什么词概括袁老的不凡成就! 说到这…

envi5.3处理高分二号影像数据详细过程记录

目录 一、多光谱影像处理 1. 辐射定标 2.大气校正 1. 需要准备一些数据: 2.大气校正过程 3、正射校正 二、全色影像处理 1. 辐射定标 2. 正射校正 三、图像融合 1.几何配准 2.图像融合 高分二号处理流程 envi5.3的安装教程: ENVI5.3安装 安装完ENVI5.3后…

我国高分系列卫星遥感影像介绍

继上一篇介绍《遥感图像处理》的文章之后,本篇文章对我国的高分系列卫星遥感影像进行简单的整理。 高分系列卫星是在高分专项的支持下,也就是高分辨率对地观测系统重大专项,由国防科技工业局牵头,组织实施建设的一系列高分辨率对…

高分辨率遥感卫星影像在交通方面的应用及高分二号影像获取

高分辨率遥感影像在城市交通领域具有广泛的应用前景:如遥感交通调查、遥感影像地图与电子地图制作、道路工程地质遥感解译、交通安全与知道抗灾救灾、交通事故现场快速勘察、交通需求预测、车辆与车牌视频识别等等。高分辨率影像比如高分二号卫星、高分一号卫星&…

中国高分系列卫星介绍

中国高分系列卫星 中国高分系列卫星是"高分专项"所规划的高分辨率对地观测的系列卫星。它是《国家中长期科学和技术发展规划纲要(2006~2020年)》所确定的16个重大专项之一。由于课程汇报,所以作了一个PPT,在…

高分二号(GF-2)号卫星数据的查询下载地址和方法

高分二号卫星是我国自主研制的首颗空间分辨优于1米的民用光学遥感卫星可在平台中查询到,搭载有两台高分辨率1米全色、4米多光谱相机,具有亚米级空间分辨率、高定位精度和快速姿态机动能力等特点,有效地提升了卫星综合观测效能,达到…

遥感科普|中国高分系列卫星综述(2020版)

遥感科普|中国高分系列卫星综述(2020版) 文章来源:卫星遥感大数据公众号 高分系列卫星概述 中国高分系列卫星是"高分专项"所规划的高分辨率对地观测的系列卫星。它是《国家中长期科学和技术发展规划纲要(2006~2020年&#xff09…

国产高分系列卫星平台介绍

目录 高分专项 高分一号(GF-1) 高分二号(GF-2) 高分三号(GF-3) 高分四号(GF-4) 高分五号(GF-5) 高分六号(GF-6) 高分七号(GF-7) 高分八…