iOS语音播报开发

    最近做APP,有用到语音播报模块,于是小记一下。语音播报即在我们使用支付宝APP,钱到账会街道一个通知类消息,并且语音播放出来,如:支付宝到账15元。或者经常听到小店里外卖系统播报:您有新的订单,请注意查收!此类语音播报,原理:在APP接收到固定的消息推送的同时,通过手机系统原生自带语音(或者调用API,如百度语音、讯飞语音等)播报出固定的消息内容。此外,还要注意在APP在后台运行时,也要注意消息的接收播报,或者应项目要求不需要播报,或者在APP被杀死的情况下也要接收推送和播报。

    下面我所说的是APP在前台运行和后台运行(不包括杀死)的情况下,接收到的消息被播报出来。

    消息推送我们集成的是极光推送,这里不再做过多阐述,语音我们暂时用的是iOS原生的,直接原生调用方法把字符串读出来。后期可能会自己录制一段语音,然后把文件加入工程中,播报使用自己的语音文件。大家也可以直接调用讯飞或百度语音,都支持的。

    首先,iOS原生语音框架是在AVFoundation里,所以我们要首先引入框架

#import <AVFoundation/AVFoundation.h>

    下面是语音播报的代码:

//语音播报
        AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:alert];
        
        utterance.pitchMultiplier=1;
        //中式发音
        AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];
        
        utterance.voice = voice;
        
        NSLog(@"%@",[AVSpeechSynthesisVoice speechVoices]);
        
        AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc]init];
        
        [synth speakUtterance:utterance];

在消息推送代理方法回调中:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    
    NSLog(@"后台:%@",userInfo);
    if ([userInfo[@"type"]isEqual:@"1"]) {
        
        AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:userInfo[@"aps"][@"alert"]];
        
        AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
        
        [synth speakUtterance:utterance];
    }
   
    [JPUSHService handleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS语音通话可以通过苹果提供的AVFoundation框架来实现,具体步骤如下: 1. 导入AVFoundation框架 在项目中导入AVFoundation框架,这个框架提供了音频和视频播放、录制、编辑等功能。 2. 创建AVAudioSession会话 AVAudioSession提供了一个音频会话来管理应用程序的音频功能,包括设置音量、启动和停止录音、控制多路音频等。 ```swift let session = AVAudioSession.sharedInstance() do { try session.setCategory(.playAndRecord, mode: .default) try session.setActive(true) } catch { print(error.localizedDescription) } ``` 这里我们设置会话的类别为playAndRecord,表示同时支持播放和录制。 3. 创建AVAudioEngine引擎 AVAudioEngine是一个强大的音频处理引擎,可以用它来处理音频数据。 ```swift let engine = AVAudioEngine() ``` 4. 创建AVAudioPlayerNode节点和AVAudioInputNode节点 AVAudioPlayerNode节点用于播放来自远程用户的音频数据,而AVAudioInputNode节点用于录制本地用户的音频数据。 ```swift let player = AVAudioPlayerNode() let input = engine.inputNode ``` 5. 连接输入和输出 将AVAudioInputNode节点和AVAudioPlayerNode节点连接起来,这样本地用户录制的音频数据就会被发送给远程用户,而远程用户的音频数据则会通过AVAudioPlayerNode节点播放出来。 ```swift engine.connect(input, to: player, format: input.outputFormat(forBus: 0)) ``` 6. 启动引擎 ```swift try? engine.start() ``` 7. 开始录制和播放 用户按下语音对讲按钮时,我们开始录制本地音频数据,并向远程用户发送数据。同时,我们也开始播放来自远程用户的音频数据。 ```swift // 开始录制 input.installTap(onBus: 0, bufferSize: 1024, format: input.outputFormat(forBus: 0)) { (buffer, time) in // 发送数据给远端用户 } // 开始播放 player.play() ``` 8. 停止录制和播放 用户松开语音对讲按钮时,我们停止录制本地音频数据,并停止向远程用户发送数据。同时,我们也停止播放来自远程用户的音频数据。 ```swift // 停止录制 input.removeTap(onBus: 0) // 停止播放 player.stop() ``` 以上就是使用AVFoundation框架实现iOS语音通话的基本步骤,具体实现还需要考虑音频编解码、网络传输等技术细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值