您的位置:首页 > 移动开发 > Swift

iOS 文本转语音(TTS)详解:Swift

2020-03-05 00:07 1251 查看

上一篇博客讲解了iOS的speech FrameWork语音识别的功能:https://www.geek-share.com/detail/2700593952.html,对应的这篇博客就写一下文本转语音。

TTS很简单,没有权限设置,也没有一大堆代码,代码如下:

import UIKit
import AVFoundation
import MediaPlayer
class ViewController: UIViewController,AVSpeechSynthesizerDelegate {
let synth = AVSpeechSynthesizer() //TTS对象
let audioSession = AVAudioSession.sharedInstance() //语音引擎

override func viewDidLoad() {
super.viewDidLoad()
synth.delegate = self
}

// 按按钮开始语音
func speechMessage(message:String){
if !message.isEmpty {
do {
// 设置语音环境,保证能朗读出声音(特别是刚做过语音识别,这句话必加,不然没声音)
try audioSession.setCategory(AVAudioSessionCategoryAmbient)
}catch let error as NSError{
print(error.code)
}
//需要转的文本
let utterance = AVSpeechUtterance.init(string: message)
//设置语言,这里是中文
utterance.voice = AVSpeechSynthesisVoice.init(language: "zh_CN")
//设置声音大小
utterance.volume = 1
//设置音频
utterance.pitchMultiplier = 1.1
//开始朗读
synth.speak(utterance)
}
}

//按按钮结束语音
func StopSpeech() {
// 立即中断语音
synth.stopSpeaking(at: AVSpeechBoundary.immediate)
// synth.stopSpeaking(at: AVSpeechBoundary.word)也能结束语音,但遇到中断上一个语音,立即朗读另一个文本就做不到。
}

// 语音结束之后要做的事(代理方法)
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
// code
}
}

写的知识点比较完整,大家也可以把这些代码写成一个类:SpeechUtil,基本不用改什么,调用类的speechMessage和StopSpeech方法就行了,若要走代理方法,别忘了SpeechUtil().synth.delegate = self

转载于:https://my.oschina.net/91shiguang/blog/864890

  • 点赞
  • 收藏
  • 分享
  • 文章举报
chibaoque1858 发布了0 篇原创文章 · 获赞 0 · 访问量 15 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: