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

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

修改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


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。