Swift语音和文本的转换
谈到语音和文本的转换, 就要说到语音转文本和文本转语音两大技术
- 文本转语音是iOS7以后的技术, 用到的是AVFoundation框架
- 语音转文本是iOS10以后, 苹果发布的一个Speech框架
- 下面先介绍一下简单的文本转语音
- GitHub上Demo地址
- 项目包括
- 文本转语音
- 实时语音转文本
- 本地语音转文本
- 录音保存本地,转文本
文本转语音
- 文本转语音技术, 简称TTS (是
Text To Speech
的缩写), 语音合成苹果官方文档 - 是苹果iOS7以后新增的功能, 使用AVFoundation 库
- 下面介绍一下需要用到的类
AVSpeechSynthesizer
: 语音合成器
属性
1 | //是否正在语音播放 |
方法
1 | //播放语音 |
AVSpeechBoundary
- 描述语音可能被暂停或停止的枚举值
1 | case immediate |
AVSpeechUtterance
- 可以将文本和成一段语音的类, 或者说就是一段要播放的语音
3-1. 属性
1 | //使用的声音 |
初始化方法
1 | public init(string: String) |
AVSpeechSynthesisVoice
- 用于语音合成的独特声音, 主要是不同的语言和地区
- 所支持的所有语言种类详见最底部附录
相关属性
1 | //获得当前的语言 |
相关方法
1 | init?(language: String?) |
AVSpeechSynthesizerDelegate代理
- 所有代理方法都是支持iOS7.0以上的系统
1 | //开始播放 |
6. 具体功能的核心代码
1 | //MARK: 开始/停止转换 |
语音转文本
- 在2016 WWDC大会上,Apple公司介绍了一个很好的语音识别的API,那就是Speech框架
- Speech框架支持iOS10以上系统
- Speech框架官方文档
- 下面简单介绍一下主要的操作类
SFSpeechRecognizer
: 语音识别器
- 这个类是语音识别的操作类
- 用于语音识别用户权限的申请,语言环境的设置,语音模式的设置以及向Apple服务发送语音识别的请求
- 初始化方法
1 | //这个初始化方法将默认以设备当前的语言环境作为语音识别的语言环境 |
- 类方法
1 | //获取所有支持的语言 |
- 其他属性
1 | var isAvailable: Bool |
- 相关方法
1 | //识别与指定请求关联的音频来源的语音,使用指定的协议返回结果 |
- 代理
1 | weak var delegate: SFSpeechRecognizerDelegate? { get set } |
2. SFSpeechRecognitionRequest
- 语音识别请求类,需要通过其子类来进行实例化
- 相关属性
1 |
|
- 子类
SFSpeechURLRecognitionRequest
SFSpeechAudioBufferRecognitionRequest
SFSpeechURLRecognitionRequest
- 通过制定的URL路径识别本地的语音
- 方法和属性
1 | //创建一个语音识别请求,使用指定的URL进行初始化 |
SFSpeechAudioBufferRecognitionRequest
- 识别音频缓冲区中提供的语音的请求
- 识别即时语音, 类似于iPhone 中的Siri
- 官方文档
- 音频缓冲区相关方法属性
1 | func append(AVAudioPCMBuffer) |
- 获取音频格式
1 | var nativeAudioFormat: AVAudioFormat |
SFSpeechRecognitionTask
- 语音识别请求结果类
- 语音识别任务,监视识别进度
- 相关方法属性
1 | func cancel() |
SFSpeechRecognitionTaskDelegate
协议
1 | //当开始检测音频源中的语音时首先调用此方法 |
SFTranscription
- 语音转换后的信息类, 包含改短语音信息的类
- 你所说的一句话,可能是有好几个词语拼成的,
formattedString
就是你所说的那句话,segments
就是你所说的你那句话的组成每个单词的集合
1 | //返回了一条表达语音译文的字符数据 |
SFTranscriptionSegment
- 语音转换中的音频节点类
- 相关属性
1 | //当前节点识别后的文本信息 |
SFSpeechRecognitionResult
: 语音识别结果类
- 是语音识别结果的封装,其中包含了许多套平行的识别信息,其每一份识别信息都有可信度属性来描述其准确程度
- 该类只是语音识别结果的一个封装,真正的识别信息定义在SFTranscription类中
1 | //准确性最高的识别实例 |
语音识别转文本
- 添加Speech框架
import Speech
info.plist
必须添加相关权限
1 | Privacy - Speech Recognition Usage Description |
- 判断用户授权
- 在使用speech framework做语音识别之前,你必须首先得到用户的允许
- 因为不仅仅只有本地的ios设备会进行识别,苹果的服务器也会识别
- 所有的语音数据都会被传递到苹果的后台进行处理
- 因此,获取用户授权是强制必须的
1 | ///语音识别权限认证 |
- 再然后就是初始化相关请求和识别类处理相关语音
- 详细代码参考GitHub的Demo地址
附录:
AVSpeechSynthesisVoice
支持的语言种类
1 | ar-SA 沙特阿拉伯(阿拉伯文) |