最近有一个需求,就是要加入语音合成,并能够在进入后台或者锁屏之后能够播报,现在最流行的应该就是科大讯飞了,功能强大,用起来简单,但是如果只要简单的TTS功能就没有必要集成其他的SDK了,iOS中提供好的API就可以了。

AVSpeechSynthesizer

这个类可以用来播放一个或者多个语音内容,播放的语音内容都是通过实例化AVSpeechUtterance而得到,对于一个或者多个AVSpeechUtterance实例,AVSpeechSynthesizer对象起到队列的作用,提供了API可以控制和监视正在进行的语音播放,首先引入头文件:

#import <AVFoundation/AVFoundation.h>

创建AVSpeechSynthesizer:

AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];

播放合成语音的相关方法:

- (void)speakUtterance:(AVSpeechUtterance *)utterance;

AVSpeechSynthesizerDelegate协议的监听方法:

@optional
// 播放开始状态
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didStartSpeechUtterance:(AVSpeechUtterance *)utterance;
// 播放结束状态
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance;
// 播放暂停状态
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance *)utterance;
// 跳出播放状态
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance *)utterance;
// 退出播放状态
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance *)utterance;
// 播放状态时,当前所播放的字符串范围,及AVSpeechUtterance实例(可通过此方法监听当前播放的字或者词)
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer willSpeakRangeOfSpeechString:(NSRange)characterRange utterance:(AVSpeechUtterance *)utterance;

AVSpeechSynthesisUtterance

这个类的一个实例可以理解为合成的一段语音所需要的内容和设置,其中包含了文本内容,语速,音调等信息。播放合成一段最简单的“Hello!”语音如下:

// 创建 AVSpeechSynthesizer
AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
// 创建 AVSpeechUtterance
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:@"Hello!"];
// 播放合成语音
[synthesizer speakUtterance:utterance];

上面是最基本的用法

// 设置合成语音的语言utterance.voice = voiceLanguage;// 语速 0.0f~1.0futterance.rate = 0.5f;// 声音的音调 0.5f~2.0futterance.pitchMultiplier = 0.8f;// 使播放下一句的时候有0.1秒的延迟utterance.postUtteranceDelay = 0.1f;

还可以设置这些属性,如果同时实例两个语音合成,那么会第一个实例播报完成之后再进行第二个实例的播报,程序不会阻塞

设置播报不同的语言:

AVSpeechSynthesisVoice *voiceType = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];

这里在设置语言的时候发现一个问题,就是只能设置中文女声找不到中文男声,但是一次错误让我找到了中文男声的设置方法,@"zh-CN"是中文女生的设置方式,而@"zh-CH"就是中文男声的设置方式

苹果支持的语言类型:

  • Arabic (ar-SA)

  • Chinese (zh-CN, zh-HK, zh-TW)

  • Czech (cs-CZ)

  • Danish (da-DK)

  • Dutch (nl-BE, nl-NL)

  • English (en-AU, en-GB, en-IE, en-US, en-ZA)

  • Finnish (fi-FI)

  • French (fr-CA, fr-FR)

  • German (de-DE)

  • Greek (el-GR)

  • Hebrew (he-IL)

  • Hindi (hi-IN)

  • Hungarian (hu-HU)

  • Indonesian (id-ID)

  • Italian (it-IT)

  • Japanese (ja-JP)

  • Korean (ko-KR)

  • Norwegian (no-NO)

  • Polish (pl-PL)

  • Portuguese (pt-BR, pt-PT)

  • Romanian (ro-RO)

  • Russian (ru-RU)

  • Slovak (sk-SK)

  • Spanish (es-ES, es-MX)

  • Swedish (sv-SE)

  • Thai (th-TH)

  • Turkish (tr-TR)

如果完成上面的操作就可以正常的播报了,但是退到后台或者锁屏之后播报就会停止了,但是需求要这样的情况也要能播报啊

不要担心还有一个属性需要设置就可以了

NSLog(@"Current Category:%@", [AVAudioSession sharedInstance].category);NSError *error = nil;[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];if (nil != error) {NSLog(@"set Option error %@", error.localizedDescription);}NSLog(@"Current Category:%@", [AVAudioSession sharedInstance].category);

通过设置上面的属性还有就是勾选后台模式就可以实现上面要达到的效果

类别 当按“静音”或者锁屏是是否静音 是否引起不支持混音的App中断 是否支持录音和播放
AVAudioSessionCategoryAmbient 只支持播放
AVAudioSessionCategoryAudioProcessing - 都不支持
AVAudioSessionCategoryMultiRoute 既可以录音也可以播放
AVAudioSessionCategoryPlayAndRecord 默认不引起 既可以录音也可以播放
AVAudioSessionCategoryPlayback 默认引起 只用于播放
AVAudioSessionCategoryRecord 只用于录音
AVAudioSessionCategorySoloAmbient 只用于播放

可以看到,其实默认的就是“AVAudioSessionCategorySoloAmbient”类别。从表中我们可以总结如下:

  • AVAudioSessionCategoryAmbient : 只用于播放音乐时,并且可以和QQ音乐同时播放,比如玩游戏的时候还想听QQ音乐的歌,那么把游戏播放背景音就设置成这种类别。同时,当用户锁屏或者静音时也会随着静音,这种类别基本使用所有App的背景场景。
  • AVAudioSessionCategorySoloAmbient: 也是只用于播放,但是和"AVAudioSessionCategoryAmbient"不同的是,用了它就别想听QQ音乐了,比如不希望QQ音乐干扰的App,类似节奏大师。同样当用户锁屏或者静音时也会随着静音,锁屏了就玩不了节奏大师了。
  • AVAudioSessionCategoryPlayback: 如果锁屏了还想听声音怎么办?用这个类别,比如App本身就是播放器,同时当App播放时,其他类似QQ音乐就不能播放了。所以这种类别一般用于播放器类App
  • AVAudioSessionCategoryRecord: 有了播放器,肯定要录音机,比如微信语音的录制,就要用到这个类别,既然要安静的录音,肯定不希望有QQ音乐了,所以其他播放声音会中断。想想微信语音的场景,就知道什么时候用他了。
  • AVAudioSessionCategoryPlayAndRecord: 如果既想播放又想录制该用什么模式呢?比如VoIP,打电话这种场景,PlayAndRecord就是专门为这样的场景设计的 。
  • AVAudioSessionCategoryMultiRoute: 想象一个DJ用的App,手机连着HDMI到扬声器播放当前的音乐,然后耳机里面播放下一曲,这种常人不理解的场景,这个类别可以支持多个设备输入输出。
  • AVAudioSessionCategoryAudioProcessing: 主要用于音频格式处理,一般可以配合AudioUnit进行使用

还有的需求是需要像支付宝收款语音播报的效果,那种情况看别人的文章需要静默推送才能达到,因为要在程序已经被杀死的情况下也要能够播报,但是没有尝试过,如果将来需要会再来补充

iOS 语音合成支持后台和锁屏情况相关推荐

  1. iOS音频的后台播放 锁屏

    初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等, ...

  2. 后台或者锁屏播放音乐播放,

    引入依赖的库文件: AudioToolBox.framework MediaPlayer.framework CoreMedia.framework AVFoundation.framework 2. ...

  3. 高德地图 小米note3 在锁屏情况下(长时间) 白屏问题

    1.白屏问题先排查是否是自己导包有问题,申请的key是不是对 2.如果能加载出来地图,在锁屏情况下还是白屏 我这个就是在长时间锁屏的情况下回白屏,oppo  魅族 vivo 都没有问题,就小米note ...

  4. Android app后台服务在锁屏情况下一直运行的方法

    在开发app中,不让音乐播放器,即使在锁屏的情况下 也要保持音乐不能停止播放,这就需要 在休眠时保持cpu唤醒状态,来运行service,而PowerManager.WakeLock中api可以实现这 ...

  5. Android App后台、锁屏运行,百度定位不实时定位。未解问题,求大神指教?

    细节描述: 功能需要实现:App 一直给后台上传经纬度.(正常运行,后台运行,锁屏运行) 问题描述:红米Note 5A. 在A点,App 锁屏,走到B 点,然而在A---B之间一直上传的是A点锁屏前的 ...

  6. 快速录像机高级版v1.3.6.1 支持后台或息屏

    简介: 该软件用处就是后台拍摄,不管你手机是锁屏.在玩王者荣耀.聊QQ微信,它都能在后台帮你无声隐藏拍摄,遇到困难想要录取证据可以派上用场!另外提一点,录制过程中,状态栏通知是可以自定义的.至于其他玩 ...

  7. bugku 管理员系统 后台代码_不会吧,这也行?iOS后台锁屏监听摇一摇

    [toc] 背景介绍 一般情况下,出于省电.权限.合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但是iOS就无法实现!今天要介绍的需求也有这种感觉,就是"当 APP 处于后台或锁 ...

  8. 关于音乐播放器锁屏播放,后台播放,封面显示等

    1. 如果应用需要后台播放:那么在appdelegate 中添加 [AVAudioSession *session = [AVAudioSession sharedInstance];[session ...

  9. iphone QQ音乐锁屏歌词实现思路

    先用户之所想 亚德里安.斯莱沃斯基在<需求>一书提到,真正的需求并不是用户明确提出的,用语言表述的部分.这些部分你看得见,你的竞争对手也同样看得见,只抓住看得见的部分,你就已经陷入红海了. ...

最新文章

  1. 蚂蚁上市后,马云不是最大赢家,竟是她!
  2. Django-model中的Querysets
  3. 通过堡垒机rdp 黑屏_[调优]彻底解决RDP连接过程缓慢的问题
  4. 三层交换网络的各层职责
  5. WPF自定义控件的自定义属性绑定后不更新问题
  6. How does framework require TechnicalInfo.js
  7. mysql mtop_mysqlmtop2.2运行出错
  8. Ubuntu server中静态IP配置
  9. openstack密钥对_您对OpenStack了解多少?
  10. c++ cstring 转换 char_C语言进阶之路:字符串与整数之间的转换!
  11. E. Sergey and Subway
  12. frpc客户端 linux安装,centos配置frp服务端,与客户端
  13. HoRNet L3012 for Mac(贝斯低音效果器)v1.0特别版
  14. f2 柱状图滚动 钉钉小程序_钉钉小程序------子组件监测父组件的数据更新
  15. 魔百盒UNT403A UNT413A 卡刷精简固件-芯片S905L3
  16. 基于SpringBoot的统计报表后台管理系统
  17. android登录ins,在android中集成instagram身份验证
  18. powerdesigner制作数据字典
  19. 中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”?(考虑中间有几个闰年)
  20. 870-Linux下解决高并发socket最大连接数限制

热门文章

  1. 服务器维护lol3.23,LOL测试服3月23日更新了什么?LOL测试服3月23日更新内容介绍...
  2. UltraEdit 15 注册码
  3. 【C++】2021-9-14-C++叒复习过程(二)(存在部分笔记的特征)
  4. Zphyr_Bluetooth
  5. CDA以API为数据源
  6. 基于TDOA声源定位算法仿真–MATLAB仿真
  7. 兼容IE的excel下载
  8. 计算机网络安全(清华大学出版社)
  9. 应用快速开发--准备篇 工欲善其事必先利其器
  10. php药膳 源码,-道家药膳