后台语音播报

来源:互联网 发布:无损音乐声谱软件 编辑:程序博客网 时间:2024/05/20 05:23

由于项目需要,运动轨迹功能需要加入321倒计时语音播报功能。经过网上了解,苹果自带AVFoundationFramework包括语音播报功能,实现起来也很简单。

实现过程如下:

1. #import <AVFoundation/AVFoundation.h>

2.alloc语音合成对象

3.创建并配置utterance


本人是将语音播报封装成一个独立的单例model来实现播报功能的调用


- (id)init {

    self = [superinit];

    if (!self) {

        returnnil;

    }

    _speechSynth = [[AVSpeechSynthesizeralloc]init];

    

    returnself;

}


+ (SpeechModel*)sharedInstance{

    staticdispatch_once_t oncePredicate;

    staticSpeechModel *_sharedInstance = nil;

    dispatch_once(&oncePredicate, ^{

        _sharedInstance = [[SpeechModelalloc] init];

        

    });

    return _sharedInstance;

}


- (void)speech:(NSString*)str english:(BOOL)b{

    AVSpeechUtterance *utterance = [AVSpeechUtterancespeechUtteranceWithString:str];

    utterance.pitchMultiplier =1.0; //高低音控制

    utterance.rate = AVSpeechUtteranceDefaultSpeechRate;

    if (b) {

        //英式发音

        AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoicevoiceWithLanguage:@"en-US"];

        

        utterance.voice = voice;

    }else{

        //中式发音

        AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoicevoiceWithLanguage:@"zh-CN"]; //@"zh-CN"

        utterance.voice = voice;

    }

    

    

    //    NSLog(@"%@",[AVSpeechSynthesisVoice speechVoices]);

    

    [_speechSynth speakUtterance:utterance];

}

如果未定义utterance.voice属性,语音将自动跟随系统


到此,语音播报实现功能全部完成,方法能自动将文字转化为语音读出,不足之处就是进入后台,播报会自动停止。或者在后台运动语音播报时,会收到播报中断通知,使语音无法正常播报。接下来,我们就是要做相关配置,使能支持后台播报。


项目中是使用后台定位回调,来实现后台语音播报方法的调用。当然,你也可以使用远程推送的方式来实现后台播报的调用。使用远程推送时,注意playload的配置,"content-available" = 1;//必带字段,相关文章可通过下面链接学习远程推送知识。

http://www.cocoachina.com/ios/20160908/17511.html


接下来对工程进行配置,使支持后台语音



勾选Capabilities下Background Modes中的Audiu,AirPlay选项

//使语音支持后台播报

    NSError *error = NULL;

    AVAudioSession *session = [AVAudioSessionsharedInstance];

    [session setCategory:AVAudioSessionCategoryPlaybackerror:&error];

    if(error) {

        // Do some error handling

    }

    [session setActive:YESerror:&error];

    if (error) {

        // Do some error handling

    }

工程中增加上述代码,本人将代码加在单例类中

到此,后台语音播报的功能就完成了。本人测试的过程中发现,一定要先前台语音播报过,进入后台才能唤醒语音播报。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 凉了胃怎么办喝什么药 生宝宝后屁股扁了怎么办 屁股又宽又扁怎么办 烫伤一年多色差没有恢复怎么办 上古卷轴5不能动怎么办 上古卷轴ol卡死怎么办 小妹妹这么骚长大了怎么办 同事借钱忘了还怎么办 怀了二胎想离婚怎么办 如果闺蜜疏远了怎么办 考上博士但是硕士要延期怎么办 硕士延期也不能毕业怎么办 硕士论文工作量太少被延期了怎么办 竞彩足球比赛延期中断怎么办? 竞彩足球输了怎么办 讯飞语音不兼容百度怎么办 虎牙直播不兼容语音怎么办 为什么手机打开游戏就死机怎么办 2007cad打开时时死机怎么办 手机qq总是无响应怎么办 英雄联盟登录服务器未响应怎么办 苹果7p照相死机怎么办 小米手机qq打不开怎么办啊 电脑qq老是闪退怎么办 微信摄像卡住了怎么办 电脑打开应用程序没反应怎么办 宇飞来手机锁了怎么办 宇飞来手机忘记密码怎么办 vivo手机突然开不了机怎么办 苹果六关不了机怎么办 微信老是无响应怎么办 打游戏被骂了怎么办 微信运动跳转排行榜失败怎么办 小恩爱账号忘了怎么办 华为账号更换后游戏账号怎么办 注册游戏账号需要身份证怎么办 英雄联盟被裁决了怎么办 百度网盘密码重置不了怎么办 sap密码输入被锁怎么办 dnf二级密码错10怎么办 大网卡网速慢了怎么办