24、探索iOS开发中的交互技术:3D Touch、语音识别与SiriKit

探索iOS开发中的交互技术:3D Touch、语音识别与SiriKit

1. 3D Touch交互体验

3D Touch是一种全新的iPhone交互方式(当前iPad版本暂不支持)。在开发应用时,要考虑到不同iPhone机型对3D Touch的支持情况,确保应用在有或没有3D Touch功能的设备上都能正常运行。

当你在模拟器或连接的iPhone上运行相关项目时,会看到首个视图显示一个按钮。长按该按钮,会出现第二个视图;从第二个视图向上滑动,则会显示预览菜单项列表。

2. 语音识别与合成技术

语音交互为应用带来了更加自然和便捷的用户体验,下面将详细介绍语音识别与合成的相关内容。

2.1 语音转文字
  • 权限申请 :使用麦克风和语音识别功能前,需在Info.plist文件中添加隐私设置。点击Navigator面板中的Info.plist文件,点击“+”图标创建新行,选择“Privacy – Microphone Usage Description”和“Privacy – Speech Recognition Usage Description”,并在“Value”列添加描述性文本,向用户说明应用访问麦克风和使用语音识别的原因。
  • 界面设计 :创建一个名为“Speech2Text”的Single View App iOS项目。在用户界面上拖放一个UILabel和两个UIButtons,将顶部按钮文本改为“Start Recognizing Speech”,底部按钮文本改为“Stop Recording”。调整UILabel的大小,使其能够显示多行文本,并在Attributes Inspector中将行数修改为0。选择“Editor ➤ Resolve Auto Layout Issues ➤ Reset to Suggested Constraints”为所有项目定义约束。
  • 代码实现
import UIKit
import Speech

class ViewController: UIViewController, SFSpeechRecognizerDelegate {
    @IBOutlet var recordButton: UIButton!
    @IBOutlet var textLabel: UILabel!
    @IBOutlet var stopButton: UIButton!
    let audioEngine = AVAudioEngine()
    let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US"))
    var request : SFSpeechAudioBufferRecognitionRequest? = nil
    var recognitionTask : SFSpeechRecognitionTask?

    override func viewDidLoad() {
        super.viewDidLoad()
        stopButton.isEnabled = false
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func buttonTapped(_ sender: UIButton) {
        recordButton.isEnabled = false
        stopButton.isEnabled = true
        recognizeSpeech()
    }

    @IBAction func stopTapped(_ sender: UIButton) {
        recordButton.isEnabled = true
        stopButton.isEnabled = false
        stopRecording()
    }

    func stopRecording() {
        audioEngine.stop()
        request?.endAudio()
        recognitionTask?.cancel()
        audioEngine.inputNode.removeTap(onBus: 0)
    }

    func recognizeSpeech() {
        let node = audioEngine.inputNode
        request = SFSpeechAudioBufferRecognitionRequest()
        guard let recognitionRequest = request else {
            fatalError ("Can not create a recognition request")
        }
        recognitionRequest.shouldReportPartialResults = true
        let recordingFormat = node.outputFormat(forBus: 0)
        node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, _) in
            self.request?.append(buffer)
        }
        audioEngine.prepare()
        do {
            try audioEngine.start()
        } catch {
            return print (error)
        }
        guard let recognizeMe = SFSpeechRecognizer() else {
            return
        }
        if !recognizeMe.isAvailable {
            return
        }
        recognitionTask = speechRecognizer?.recognitionTask(with: request!, resultHandler: {result, error in
            if let result = result {
                let transcribedString = result.bestTranscription.formattedString
                self.textLabel.text = transcribedString
            } else if let error = error {
                print(error)
            }
        })
    }
}

在连接的iPhone或iPad上运行该项目,点击“Start Recognizing Speech”按钮,说出简短句子,即可在UILabel中看到转录的文本。完成后点击“Stop Recording”按钮。

2.2 识别语音命令

除了将语音转录为文本,语音框架还能识别预先指定的特定语音命令。在识别语音命令时,要注意同音不同义的单词。例如,在英语中“red”和“read”发音相同,“too”、“to”和“two”也发音相似。

创建一个名为“checkSpokenCommand”的函数来检测特定单词或短语:

func checkSpokenCommand (commandString: String) {
    switch commandString {
    case "Purple":
        textLabel.backgroundColor = UIColor.purple
    case "Green":
        textLabel.backgroundColor = UIColor.green
    case "Yellow":
        textLabel.backgroundColor = UIColor.yellow
    default:
        textLabel.backgroundColor = UIColor.white
    }
}

在“recognizeSpeech”函数中调用该函数:

func recognizeSpeech() {
    // 前面的代码保持不变
    recognitionTask = speechRecognizer?.recognitionTask(with: request!, resultHandler: {result, error in
        if let result = result {
            let transcribedString = result.bestTranscription.formattedString
            self.textLabel.text = transcribedString
            // 检查语音命令
            self.checkSpokenCommand(commandString: transcribedString)
        } else if let error = error {
            print(error)
        }
    })
}

在连接的iOS设备上运行项目,说出“purple”、“green”或“yellow”,UILabel的背景颜色将相应改变。

2.3 文字转语音

使用AVFoundation框架可以实现文字转语音功能。创建一个名为“Text2Speech”的Single View App iOS项目,在Main.storyboard文件中拖放一个UITextView、一个UISlider和一个UIButton,将按钮标题改为“Read Text Out Loud”,并选择“Editor ➤ Resolve Auto Layout Issues ➤ Reset to Suggested Constraints”为所有项目定义约束。

import UIKit
import AVFoundation

class ViewController: UIViewController {
    @IBOutlet var textView: UITextView!
    @IBOutlet var rateSlider: UISlider!
    let audio = AVSpeechSynthesizer()
    var convertText = AVSpeechUtterance(string: "")

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func readText(_ sender: UIButton) {
        convertText = AVSpeechUtterance(string: textView.text)
        convertText.rate = rateSlider.value
        audio.speak(convertText)
    }
}

在模拟器或实际iOS设备上运行该项目,在UITextView中输入和编辑文本,拖动UISlider调整语速,点击“Read Text Out Loud”按钮,即可听到语音合成器朗读文本。

3. SiriKit增强语音交互

为了帮助应用识别更复杂的语音命令,可以通过SiriKit框架将Siri的功能集成到应用中。

3.1 SiriKit工作原理

SiriKit通过两种类型的扩展文件与应用协作:
- Intents App扩展 :包含Swift代码,用于在Siri解释用户语音命令后进行响应。
- Intents UI App扩展 :允许应用自定义Siri中显示的数据外观,使应用看起来更专业,但不是必需的。

3.2 添加SiriKit扩展

创建一个名为“SiriTest”的Single View App iOS项目,选择“File ➤ New ➤ Target”,点击iOS类别中的“Intents Extensions”图标,点击“Next”。输入扩展的产品名称“MessageExtension”,选中“Include UI Extension”复选框,点击“Finish”。

创建完成后,会出现两个新文件夹“MessageExtension”和“MessageExtensionUI”。“MessageExtension”文件夹中的IntentHandler.swift文件用于编写处理Siri捕获命令的代码;“MessageExtensionUI”文件夹中的MainInterface.storyboard文件和IntentViewController.swift文件用于自定义Siri中的显示界面。

连接iPhone或iPad到Mac,运行项目,选择Siri运行应用。说出“Send a message using SiriTest”,Siri会要求提供更多信息,如收件人姓名和消息内容。确认发送后,虽然Siri会提示已发送消息,但实际上并未真正发送。

以下是SiriKit集成的流程:

graph LR
    A[创建SiriTest项目] --> B[添加Intents扩展]
    B --> C[输入扩展名称和配置]
    C --> D[创建扩展文件夹]
    D --> E[编写IntentHandler代码]
    D --> F[自定义UI扩展(可选)]
    E & F --> G[连接设备运行项目]
    G --> H[与Siri交互测试]

通过以上技术,开发者可以为iOS应用增添丰富的交互方式,提升用户体验。无论是3D Touch带来的全新触摸感受,还是语音识别与合成技术实现的自然交互,以及SiriKit增强的复杂语音命令处理能力,都为应用开发带来了更多的可能性。

探索iOS开发中的交互技术:3D Touch、语音识别与SiriKit

4. 技术对比与应用场景分析

为了更好地理解这些交互技术的特点和适用场景,下面对3D Touch、语音识别与合成以及SiriKit进行对比分析。

技术名称 特点 适用场景
3D Touch 提供全新的触摸交互方式,通过不同的按压力度触发不同操作 适用于需要快速访问特定功能或信息的场景,如预览菜单、快捷操作等
语音识别与合成 允许用户通过语音与应用交互,将语音转换为文字或文字转换为语音 适用于用户无法使用触摸屏幕的场景,如驾驶、双手忙碌时;也适用于为视力障碍用户提供服务
SiriKit 借助Siri的强大语音识别能力,处理复杂的语音命令,集成到应用中 适用于需要处理复杂语音指令的应用,如消息发送、支付、预约等场景
5. 技术实践中的注意事项

在实际应用这些技术时,还需要注意以下几点:

5.1 3D Touch注意事项
  • 兼容性 :由于并非所有iPhone机型都支持3D Touch,因此在开发应用时要考虑兼容性,确保应用在不支持3D Touch的设备上也能正常使用。
  • 用户引导 :对于不熟悉3D Touch的用户,需要提供适当的引导,帮助他们了解如何使用这一功能。
5.2 语音识别与合成注意事项
  • 权限问题 :使用语音识别功能时,必须获得用户的授权,同时要向用户说明语音数据的使用情况,保护用户隐私。
  • 准确性 :语音识别可能会受到口音、环境噪音等因素的影响,导致识别不准确。在设计应用时,要考虑如何处理识别错误的情况。
5.3 SiriKit注意事项
  • Intent域限制 :SiriKit限制应用只能在特定的Intent域内工作,开发时需要根据应用的功能选择合适的Intent域。
  • 命名规范 :应用的名称要容易发音,避免与其他词语混淆,以便Siri能够准确识别。
6. 未来发展趋势

随着技术的不断发展,这些交互技术也将不断演进和完善。以下是一些可能的发展趋势:

6.1 多模态交互融合

未来的应用可能会将3D Touch、语音识别与合成以及其他交互方式(如手势识别、面部识别等)进行融合,提供更加自然、便捷的交互体验。例如,用户可以通过语音和手势的组合来完成复杂的操作。

6.2 个性化语音交互

语音识别技术将更加智能化,能够根据用户的习惯和偏好提供个性化的语音交互服务。例如,根据用户的口音、语速等特点进行自适应调整,提高识别准确性。

6.3 SiriKit功能扩展

SiriKit可能会支持更多的Intent域和功能,为应用开发者提供更多的可能性。例如,支持更多类型的支付、预订服务等。

以下是这些技术未来发展趋势的流程图:

graph LR
    A[多模态交互融合]
    B[个性化语音交互]
    C[SiriKit功能扩展]
    D[未来交互技术发展]
    A --> D
    B --> D
    C --> D
7. 总结

通过对3D Touch、语音识别与合成以及SiriKit等交互技术的介绍和分析,我们可以看到这些技术为iOS应用开发带来了丰富的可能性。开发者可以根据应用的需求和目标用户,选择合适的交互技术,为用户提供更加优质的体验。

在实际开发过程中,要注意技术的兼容性、用户体验和隐私保护等问题。同时,关注技术的发展趋势,及时将新的技术应用到应用开发中,使应用始终保持竞争力。

无论是3D Touch带来的创新触摸体验,还是语音识别与合成技术实现的自然交互,以及SiriKit增强的复杂语音处理能力,都将在未来的iOS应用开发中发挥重要作用。开发者应该不断探索和实践,将这些技术的优势充分发挥出来,为用户带来更加出色的应用。

【博士论文复现】【阻抗建模、验证扫频法】光伏并网逆变器扫频稳定性分析(包含锁相环电流环)(Simulink仿真实现)内容概要:本文档是一份关于“光伏并网逆变器扫频稳定性分析”的Simulink仿真实现资源,重点复现博士论文中的阻抗建模扫频法验证过程,涵盖锁相环和电流环等关键控制环节。通过构建详细的逆变器模型,采用小信号扰动方法进行频域扫描,获取系统输出阻抗特性,并结合奈奎斯特稳定判据分析并网系统的稳定性,帮助深入理解光伏发电系统在弱电网条件下的动态行为失稳机理。; 适合人群:具备电力电子、自动控制理论基础,熟悉Simulink仿真环境,从事新能源发电、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握光伏并网逆变器的阻抗建模方法;②学习基于扫频法的系统稳定性分析流程;③复现高水平学术论文中的关键技术环节,支撑科研项目或学位论文工作;④为实际工程中并网逆变器的稳定性问题提供仿真分析手段。; 阅读建议:建议读者结合相关理论教材原始论文,逐步运行并调试提供的Simulink模型,重点关注锁相环电流控制器参数对系统阻抗特性的影响,通过改变电网强度等条件观察系统稳定性变化,深化对阻抗分析法的理解应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值