当前位置: 首页 > news >正文

thinkphp做直播网站办公室电脑局域网组建

thinkphp做直播网站,办公室电脑局域网组建,wordpress国内主题排行,html教程菜鸟一、介绍 TextToSpeech#xff1a;将文本合成语音#xff0c;立即播放或创建声音文件。 最简单的流程如下#xff1a; 1.创建TextToSpeech后#xff0c;它会找到一个适合的Engine进行连接#xff0c;然后回调onInit#xff0c;如果status不为0#xff0c;则没有找到引…一、介绍    TextToSpeech将文本合成语音立即播放或创建声音文件。 最简单的流程如下 1.创建TextToSpeech后它会找到一个适合的Engine进行连接然后回调onInit如果status不为0则没有找到引擎。 2.在初始化成功后调用speak就可以进行语音播报了。播报过程中引擎会调用UtteranceProgressListener的回调函数它是个抽象类可以覆盖其他函数如onRangeStart(String utteranceId, int start, int end, int frame) 可以在播报过程中可以拿到实时返回的读取字符位置但它是在api 26以后才开始支持。 简单的TTS语音播报代码如下  if (textToSpeech null) {textToSpeech new TextToSpeech(this, new TextToSpeech.OnInitListener() {Overridepublic void onInit(int status) {textToSpeech.speak(你好测试语音播报功能, TextToSpeech.QUEUE_ADD, null);textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {Overridepublic void onStart(String utteranceId) {}Overridepublic void onDone(String utteranceId) {}Overridepublic void onError(String utteranceId) {}});}}); } 在实际场景中可能会遇到以下问题需要抉择(尤其是在做海外市场) 1.支持引擎引擎查询和设置  2.支持语言语言支持和下载 3.版本兼容问题回调版本支持 接下来分别进行介绍。 二、实践-引擎 1.引擎是TTS核心部分主要用于加载语言语音包将文本转换为音频及执行回调的部分。引擎的实现需要继承TextToSpeechService并且需要对以下方法进行实现 protected abstract int onIsLanguageAvailable(String lang, String country, String variant)protected abstract String[] onGetLanguage()protected abstract int onLoadLanguage(String lang, String country, String variant)protected abstract void onStop()protected abstract void onSynthesizeText(SynthesisRequest request, SynthesisCallback callback) 详细的原理这里不进行讲解可以参考下面两篇文章讲的很详细 https://blog.csdn.net/qq_30359699/article/details/105388575         https://blog.csdn.net/zhupumao/article/details/78960456 首先虽然列出了要实现TextToSpeechService的方法但我们如果只使用系统提供的引擎则不需要自己继承TextToSpeechService并实现以上方法但需要知道的是 1.是否支持语言支持语言列表及加载语言包分别是onIsLanguageAvailableonGetLanguage和onLoadLanguage 2.进行文本合成语音需要在onSynthesizeText中实现对应的回调也需要在方法中调用SynthesisCallback的方法 3.onStop停止语音合成 4.因为引擎是自定义实现的所以会有自己的语言语音包来支持不同的国家语言如果做海外市场要注意引擎是否支持对应国家的语言这些语言语音包依赖于引擎提供方是否提供 5.需要在AndroidManifest中在自己的Service中加入如下配置 intent-filteraction android:nameandroid.intent.action.TTS_SERVICE /category android:nameandroid.intent.category.DEFAULT //intent-filter 说了这么多如果使用系统的引擎则可以忽略这部分内容但对理解有帮助。 2.引擎支持通常在不同品牌设备上语音引擎可能有多个并且都是系统级别的如三星有GoogleTTSService和SamsungTTSService等这个时候不选择引擎时很有可能使用的是SamsungTTSService。这里我写了个获取引擎列表的方法如下 public ListString getEngines() {if (mContext null) {throw new IllegalArgumentException(Please set mContext first!!);}ArrayListString engines new ArrayList();PackageManager pm mContext.getPackageManager();Intent intent new Intent(TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE);ListResolveInfo resolveInfo pm.queryIntentServices(intent,PackageManager.MATCH_DEFAULT_ONLY);for (ResolveInfo info: resolveInfo) {engines.add(info.serviceInfo.packageName);}return engines; } 可以看到主要是通过actionTextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE来进行查询自定义引擎的Service也必须设置action为TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE。 而最终得到的是所有继承TextToSpeechService实现引擎的包名列表当使用指定引擎时TextToSpeech会通过包名和action绑定到Service上。 好不出意外的话会包含google系统引擎的包名“com.google.android.tts”后面说到引擎时都是继承了TextToSpeechService并实现了语音合成的包名。 3.有了引擎我们在使用TextToSpeech的时候就可以使用TextToSpeech(Context context, OnInitListener listener, String engine) 来连接到指定引擎了。 三、实践-Locale Locale包含了语言国家和多样性等信息但并不全包含这些信息如果使TextToSpeech播放不同国家的语言时这时需要设置Locale给它。但TextToSpeech一定会播放吗不一定需要看引擎是否支持必定真正工作的是引擎对应的Service。那么看下图 文本输入给引擎之前引擎需要加载语言语音包如果支持指定的语言则可以输出音频数据进行播放或写入文件同时会执行回调。那么问题来了如何知道引擎是否支持语言音乐包如果不支持如何下载 那么问题可以总结如下 1.查询引擎目前支持的语言语音包引擎和语言音乐包是绑定的 2.判断指定Locale是否支持 3.下载语言语音包 接下来分别介绍。 3.1查询引擎目前支持的语言语音包: 1).系统方式 2).使用TextToSpeech方式指定引擎 3.1.1系统方式 分为两部1.发送Intent给系统 2.在当前activity中接收和解析结果 发送Intent给系统         Intent checkIntent new Intent();checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);checkIntent.setPackage(engine);activity.startActivityForResult(checkIntent, CHECK_REQUEST_CODE); 在当前activity中接收和解析结果在onActivityResult中调用下面的方法获取Locale列表 public ListLocale checkSupportTTSLocale(int requestCode, int resultCode, Intent data) {ArrayListLocale locales new ArrayList();if (requestCode CHECK_REQUEST_CODE resultCode TextToSpeech.Engine.CHECK_VOICE_DATA_PASS data ! null) {ArrayListString availableVoices data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);if (availableVoices ! null availableVoices.size() 0) {for (String voice: availableVoices) {if (Build.VERSION.SDK_INT Build.VERSION_CODES.LOLLIPOP) {String[] split voice.split(-);if (split.length 0) {Locale locale split.length 1 ? new Locale(split[0]) : (split.length 2 ? new Locale(split[0], split[1]): new Locale(split[0], split[1], split[2]));locales.add(locale);}}}}}return locales;} 3.1.2使用TextToSpeech方式 public ListLocale getSupportLocales() {ArrayListLocale locales new ArrayList();if (android.os.Build.VERSION.SDK_INT android.os.Build.VERSION_CODES.LOLLIPOP) {SetVoice voiceSet textToSpeech.getVoices();for (Voice voice: voiceSet) {locales.add(voice.getLocale());}}return locales;} 重要前提是textToSpeech指定了引擎如textToSpeech new TextToSpeech(context, listener, “com.google.android.tts”)查询到是“com.google.android.tts”支持的语音语音包对应的Locale列表。 3.2 判断指定Locale是否支持 通过之前的描述应该了解Locale在不同引擎支持的情况不一样且对应的语言语音包和引擎是绑定的所以判断是否支持Locale可以通过TextToSpeech进行判断通过下面两个方法都可以判断         TextToSpeech.setLanguage(Locale)TextToSpeech.isLanguageAvailable(Locale) 3.3 下载语言语音包 当引擎暂不支持指定语言音乐包时可以通过下载语言音乐包进行支持若没有语言语音包就没办法了不过google支持还是挺全的其它引擎就不一定了。 使用google系统引擎下载语言音乐包实现如下 Intent installIntent new Intent();installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);installIntent.setPackage(engine);activity.startActivityForResult(installIntent, INSTALL_REQUEST_CODE); 在系统页面下载完成之后返回当前activity后在onActivityResult中并不能查询到安装结果还是需要3.1方式进行查询。 四、回调和部分方法 1.TextToSpeech.setOnUtteranceProgressListener(UtteranceProgressListener listener) UtteranceProgressListener//API 15-public abstract void onStart(String utteranceId)//API 15 -public abstract void onDone(String utteranceId)//API 15 -public abstract void onError(String utteranceId) //API 23 -public void onStop(String utteranceId, boolean interrupted) //API 24 -public void onBeginSynthesis(String utteranceId, int sampleRateInHz, int audioFormat, int channelCount)//API 24 -public void onAudioAvailable(String utteranceId, byte[] audio) //API 26-public void onRangeStart(String utteranceId, int start, int end, int frame) 虽然回调方法不少但如果是使用google引擎则注意兼容版本国内实现的引擎应该比较完善目前看到华为是支持类似onRangeStart的方法这个方法能够实现实时单词高亮效果等 2.设置语音属性 //设置音调高低函数没有明确说明范围我测试的范围0.5-3.0setPitch(float pitch) //设置语速函数没有明确说明范围我测试的范围0.5-3.0setSpeechRate(float speechRate) 这两个方法调用并不是实时生效下次调用speak时才会生效 3.周期方法 //设置文本给引擎进行播报 speek //停止语音播报stop//关闭引擎shutdown 没有pause和resume如果自己实现建议在speek时进行分句操作。 五、总结 下面对调用进行总结 1.查询引擎列表使用需要的引擎实例化TextToSpeech 2.查询语言语音列表如果不支持可以通过系统方法三方实现的调用三方下载语言语音包方法进行安装 3.设置语言语音包给引擎 4.使用speak进行语音播报可以在对应的回调中处理逻辑但要注意支持API版本 5.使用完成时候记得shutdown释放资源 赋大概的时序图如下 下面是参考的文档和可以参考的资源 参考 Android Speech之TTS(文本到语音)源码及流程分析_奔腾的小马-CSDN博客 TTS源码解析_zhupumao的博客-CSDN博客_tts文件解析错误 google例子 https://android.googlesource.com/platform/development//master/samples/TtsEngine?autodive0 github上高星地址: https://github.com/ak1394/react-native-tts https://github.com/gotev/android-speech https://github.com/HMS-Core/hms-ml-demo https://github.com/happyalu/Flite-TTS-Engine-for-Android 注如有错误或探讨的地方欢迎大家留言哈。
http://www.tj-hxxt.cn/news/137244.html

相关文章:

  • 永州商城网站建设wordpress 排除分类
  • 温州企业网站建设要多少钱wordpress 更换中文
  • 长春专业做网站公司排名网站建设方案协议书
  • 南京网站优化哪家好培训机构的网站建设
  • html网页设计网站开发报告做视频的背景音乐哪里下载网站
  • 黑色风格网站主页面新公司需要做网站
  • 网站未备案 打不开建设网站哪个模板网站
  • 做简单的网站链接前端网页模板
  • 南京网络公司网站无锡网站排名公司
  • 网站建设管理员角色设置亿网正品
  • 企业网站的基本内容和营销功能深圳网站搜索优化工具
  • 多语言网站建设应注意哪些事项济南个人急售二手房
  • 正规的镇江网站建设怎样在我的世界做汽车视频网站
  • 网站开发需要哪些职位做网站大约多少钱
  • 免费门户网站系统wordpress 文章编辑 插件
  • 网站程序开发外包平面设计公司广告语
  • 表白网站制作模板巴南市政建设网站
  • 广东 网站建设汽车租赁网站建设内容
  • 男男床做第一次视频网站wordpress文章循环不带置顶文章
  • 微信订阅号 网站开发网店模板
  • 北京大型网站优化wordpress 女性模板
  • 网站开发维护成本wordpress 文章版权
  • 游戏网站首页模板最快做网站的语言
  • 郑州企业免费建站wordpress3.6
  • 网站不显示内容佛山网站建设专业定制
  • 我自己做的一个网站显示证书错误郑州新闻
  • 住房和城乡建设部网站诚信评价win7一键优化工具
  • 未备案网站处理系统做邀请函用哪个网站好呢
  • 郑州专业网站制作的公司哪家好wordpress eaccelerator
  • 360网站收录提交入口大全个人网页设计模板html代码