• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

如何使用华为机器学习服务和Kotlin实现语音合成

android 搞代码 3年前 (2022-03-02) 11次浏览 已收录 0个评论

1. 引言

  你曾遇到过这种状况吗?一本小说太长,要花很长时间浏览,但如果有app能主动为你浏览,就会省时很多。因而,将文本转换成语音的工具应运而生。华为机器学习服务(HUAWEI ML Kit)具备语音合成(Text To Speech, TTS)性能,能让app疾速实现从文本到语音的转换。TTS能够将文本转换成人声。这也能够通过默认办法实现,但这些办法不能提供天然或实在的声音。TTS服务全球通用,利用深度神经网络对文本进行解决,从而发明出天然的声音,同时也反对多种音色,以加强人声成果。TTS应用了云服务,字符数限度在500个以内,并应用UTF-8编码。
  目前反对的音色如下:

  • 英文-男声
  • 英文-女声
  • 中文-男声
  • 中文-女声
  • 英文+中文-男声
  • 英文+中文-女声

2. 后果展现

  视频展现了应用该服务后失去的后果。
  视频链接:https://developer.huawei.com/consumer/cn/forum/topicview?fid=18&tid=0201314285827100291

3.集成步骤

  步骤1: 在Android Studio中新建我的项目。

  步骤2: 在app.gradle文件中增加依赖。
  implementation ‘com.huawei.hms:ml-computer-voice-tts:1.0.4.300’

  步骤3: 在app.gradle文件顶部增加AppGallery Connect插件。
  apply plugin: ‘com.huawei.agconnect’

  步骤4: 在Activity中创立回调。

var callback: MLTtsCallback = object : MLTtsCallback {
    override fun onError(taskId: String, err: MLTtsError) {
  
    }
  
    override fun onWarn(taskId: String, warn: MLTtsWarn) {
  
    }
  
    override fun onRangeStart(taskId: String, start: Int, end: Int) {
  
    }
  
    override fun onEvent(taskId: String, eventName: Int, bundle: Bundle?) {
        if (eventName == MLTtsConstants.EVENT_PLAY_STOP) {
            val isStop = bundle?.getBoolean(MLTtsConstants.EVENT_PLAY_STOP_INTERRUPTED)
        }
    }
}

  详情如下:
  共有4种回调办法:

  • OnError():提醒用户产生什么谬误,并通过华为剖析服务(HUAWEI Analytics Kit)发送剖析数据到控制台以进一步验证。
  • OnWarn():如果呈现带宽有余之类的正告,回调将在这里呈现。
  • OnRangeStart():返回以后播放的片段与文本的映射。
  • OnEvent():当产生新事件时调用,例如,当音频暂停时,您能够在bundle中取得EVENT_PLAY_STOP_INTERRUPTED参数。

如果MLTtsConstants.EVENT_PLAY_STOP的值是false,则音频播放无误。
如果MLTtsConstants.EVENT_PLAY_STOP的值是true,则音频会呈现中断。

  步骤5: 对象初始化。

mlConfigs = MLTtsConfig()
     .setLanguage(MLTtsConstants.TTS_EN_US)
     .setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_EN)
     .setSpeed(1.0f)
     .setVolume(1.0f)
 mlTtsEngine = MLTtsEngine(mlConfigs)
 mlTtsEngine.setTtsCallback(callback)

  详情如下:
  有两种办法可用于创立TTS引擎。
  咱们通过MLTtsConfig对象应用自定义的TTS引擎:

  • 通过MLTtsConstants.TTS_EN_US将语言设置为英文,也能够通过MLTtsConstants.TTS_ZH_HANS将语言设置为中文。
  • 设置人声。

英文女声:MLTtsConstantsTTS_SPEAKER_FEMALE_EN
英文男声:MLTtsConstants.TTS_SPEAKER_MALE_EN
中文女声:MLTtsConstants.TTS_SPEAKER_FEMALE_ZH
中文男声:MLTtsConstants.TTS_SPEAKER_MALE_ZH

  • 设置语速,范畴:0.2-1.8,1.0示意1倍语速。
  • 设置音量,范畴:0.2-1.8,1.0示意1倍音量。
  • 创立MLTtsEngine对象,并提供上述MLTtsConfig对象。
  • 将上述创立的callback对象放入MLTtsEngine。

  步骤6: 在Activity中增加以下办法,当用户单击按钮时调用。

private fun startTtsService() {
   val id = mlTtsEngine.speak(sourceText,MLTtsEngine.QUEUE_APPEND)
 }

  详情如下:
  sourceText为用户输出的文本。

  • 当须要队列零碎时,应用MLTtsEngine.QUEUE_APPENDED。当TTS的第一次操作实现,紧接着进行下一次操作。
  • 如果只需解决以后操作,应用MLTtsEngine.QUEUE_FLUSH。
  • 通过onPause(),终止MLTtsEngine。
override fun onPause() {
     super.onPause()
     mlTtsEngine.stop()
 }
  • 通过onDestroy(),开释MLTtsEngine占用的资源。
override fun onDestroy() {
     super.onDestroy()
     mlTtsEngine.shutdown()
 }

4.常见问题

  问:TTS服务只反对在华为设施上应用吗?

  答:是的。

  问:须要上网能力应用TTS服务吗?

  答:是的,应用云服务必须连贯互联网。

5.结束语

  咱们尚且在钻研的初级阶段。华为ML Kit提供的TTS服务实用于以下场景:新闻浏览、有声小说、股票信息播报、语音导航、视频配音。

  心愿您喜爱这篇文章,也心愿您能够分享应用该服务时的意见或倡议。

  你能够在Github下载源码。

  Github链接:https://github.com/HMS-Core/hms-ml-demo/tree/master/TTSSampleKotlin


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何使用华为机器学习服务和Kotlin实现语音合成

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址