码迷,mamicode.com
首页 > 移动开发 > 详细

iOS AV Foundation 二维码扫描 04 使用合成语音朗读二维码内容

时间:2015-03-22 10:42:21      阅读:477      评论:0      收藏:0      [点我收藏+]

标签:ios   av foundation   avspeechsynthesizer   

前一节,我们为程序识别到的二维码提供了可视化的显示,这一节,我们使用合成语音朗读扫描到的二维码的内容。

修改ViewController.m,定义以下实例变量并进行初始化:

AVSpeechSynthesizer *_speechSynthesizer;
_speechSynthesizer = [[AVSpeechSynthesizer alloc] init];
初始化语音合成器十分简单。语音合成器会控制对每个语音数据的回放和顺序。初始化完成后,Metadata output将触发语音合成器来朗读扫描到的二维码的内容。

跟踪二维码的变化

添加以下代码到captureOutput:didOutputMetadataObjects:fromConnection:的开始位置:

NSSet *originalBarcodes = [NSSet setWithArray:_barcodes.allValues];
目的是在处理一个新的frame前,将所有检测到的二维码存储起来。用于比较已经缓存的二维码和新检测到的二维码是否相同。
添加以下代码到enumerateObjectsUsingBlock的"}];"之后:

    NSMutableSet *newBarcodes = [foundBarcodes mutableCopy];
    [newBarcodes minusSet:originalBarcodes];
这段代码利用集合的减操作,去除已经缓存了的二维码,只保留新扫描到的二维码。

最后,我们再次利用集合操作移除已经不在屏幕范围内的二维码,并更新_barcode字典:

    NSMutableSet *goneBarcodes = [originalBarcodes mutableCopy];
    [goneBarcodes minusSet:foundBarcodes];
    [goneBarcodes enumerateObjectsUsingBlock: ^(Barcode *barcode, BOOL *stop) {
        [_barcodes removeObjectForKey:barcode.metadataObject.stringValue];
    }];

创建“说话方式”

接下来,我们为所有二维码数据设置“说话方式”,包括频率、音量、音高。最后调用speakUtterace:朗读出二维码的内容:

        
        // Speak the new barcodes
        [newBarcodes enumerateObjectsUsingBlock:^(Barcode *barcode, BOOL *stop) {
            AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:barcode.metadataObject.stringValue];
            utterance.rate = AVSpeechUtteranceMinimumSpeechRate + ((AVSpeechUtteranceMaximumSpeechRate - AVSpeechUtteranceMinimumSpeechRate) * 0.5f);
            utterance.volume = 1.0f;
            utterance.pitchMultiplier = 1.2f;
            
            [_speechSynthesizer speakUtterance:utterance];
        }];

修改startRunning方法,使能AudioSession:

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:0 error:nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];

修改stopRunning方法,禁用音频AudioSession:

    [[AVAudioSession sharedInstance] setActive:NO error:nil];
编译运行,当程序识别到二维码时,将用语音朗读出二维码的内容。

下一节,我们将为程序添加图像缩放功能。

转载请注明出处:http://blog.csdn.net/yamingwu/article/details/44535513


iOS AV Foundation 二维码扫描 04 使用合成语音朗读二维码内容

标签:ios   av foundation   avspeechsynthesizer   

原文地址:http://blog.csdn.net/yamingwu/article/details/44535513

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!