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];编译运行,当程序识别到二维码时,将用语音朗读出二维码的内容。下一节,我们将为程序添加图像缩放功能。

转载请注明出处:

可你仍然感谢天地和人世所带来的这些变化和发生。

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

相关文章:

你感兴趣的文章:

标签云: