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

时间: 2024-12-28 00:50:25

iOS AV Foundation 二维码扫描 04 使用合成语音朗读二维码内容的相关文章

iOS AV Foundation 二维码扫描 02 扫码

AVFoundation支持以下一维和二维码的扫描: QR code Aztec EAN13 EAN8 UPC-E PDF417 Code 93 Code 39 Code 39 mode 41 QR code就是我们所熟知的二维码. 打开ViewController.m,添加以下实例变量: AVCaptureMetadataOutput *_metadataOutput; 当从视频帧中检测到元数据时,AVCaptureMetadataOutput会调用应用程序的回调函数.AV Foundatio

iOS AV Foundation 二维码扫描 01 使用摄像头

从这一节开始,我们使用AV Foundation制作一个条码(不仅仅是二维码)扫描程序,除了扫描二维码功能外,还具备语音合成和摄像头缩放功能. 创建名为ColloQR的单view应用程序.打开storyboard,禁用sized class.选中view controller,通过editor菜单将其放入navigation controller中.最后修改标题为ColloQR: 使用摄像头 打开ViewController.m,添加import: @import AVFoundation; 在

iOS AV Foundation 二维码扫描 03 为扫描到的二维码添加可视化效果

上一节,我们已经实现了二维码的扫描,这一节,我们利用元数据的bounds和corners实现一个可视化的扫描效果. bounds定义了包含二维码图像的矩形,corners定义了二维码图像的实际坐标: 当摄像头和二维码图片完全对齐时,bounds和corners就是相同的.但是通常来说,几乎不可能让摄像头和二维码完全对齐. 打开ViewController.m,添加以下实例变量,用于存放所有检测到得二维码,以二维码的内容为索引. NSMutableDictionary *_barcodes; 在v

Ios二维码扫描(系统自带的二维码扫描)

Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你当前的控制器中导入 #import <AVFoundation/AVFoundation.h> <AVCaptureMetadataOutputObjectsDelegate>代理 3).在@interface中定义 @property (nonatomic,strong)AVCapt

ios7 苹果原生二维码扫描

在ios7苹果推出了二维码扫描,以前想要做二维码扫描,只能通过第三方ZBar与ZXing. ZBar在扫描的灵敏度上,和内存的使用上相对于ZXing上都是较优的,但是对于 “圆角二维码” 的扫描确很困难. ZXing 是 Google Code上的一个开源的条形码扫描库,是用java设计的,连Google Glass 都在使用的.但有人为了追求更高效率以及可移植性,出现了c++ port. Github上的Objectivc-C port,其实就是用OC代码封装了一下而已,而且已经停止维护.这样

Vin码扫描识别sdk技术

一.Vin码扫描识别sdk技术扫描录入信息的产品背景 VIN码即车架号就是汽车的唯一的身份证,汽车从下线出厂.进4S店销售.行驶证登记造册.保险登记.车辆车检.车辆维修保养.车辆召回.车辆交易等直至车辆报废,这无数有关于汽车的场景中,汽车VIN码的信息录入始终贯穿其中,如同我们一生中无数场景都要用到身份证一样. Vin码扫描识别sdk技术在终端设备上去录入17位数的VIN,整个录入过程非常繁琐,且效率较差.针对多个行业客户对自动识别VIN码的迫切需求,我公司开发出VIN码识别技术,只需在APP中

二维码扫描(iOS原生二维码扫描)

一.关于二维码扫描的第三方库有很多:例如比较常用的两个 1.ZBar SDK ZBar为我们提供了两种使用方式,一种是直接调用ZBar提供的ZBarReaderViewController打开一个扫描界面,另一种方式是使用ZBar提供的可以嵌在其他视图中的ZBarReaderView,实际项目中我们更可能会使用第二种方式,这可以让我们对界面做更多的定制,详细的百度查找相关文档来看. 2.ZXing(Github镜像地址)是一个开源的条码生成和扫描库(开源协议为Apache2.0).它不但支持众多

【转】 iOS使用AVFoundation实现二维码扫描

原文:http://strivingboy.github.io/blog/2014/11/08/scan-qrcode/ 关于二维码扫描有不少优秀第三方库如: ZBar SDK 里面有详细的文档,相应介绍也非常多,如:http://rdcworld-iphone.blogspot.in/2013/03/how-to-use-barcode-scanner-br-and-qr-in.html ZXing google推出的开源项目,相应介绍如:http://blog.devtang.com/blo

iOS使用AVFoundation实现二维码扫描(ios7以上)——转载

关于二维码扫描有不少优秀第三方库: ZBar SDK 里面有详细的文档,相应介绍也非常多,如:http://rdcworld-iphone.blogspot.in/2013/03/how-to-use-barcode-scanner-br-and-qr-in.html ZXing google推出的开源项目,相应介绍如:http://blog.devtang.com/blog/2012/12/23/use-zxing-library/ 关于AVFoundation AVFoundation 是一