那我們要在檔案怎麼操作才能實現麥克風呢?
import Speech
import AVFoundation
在 MainUIViewController 類中,我們首先初始化了一些必要的變量。
private let speechRecognizer = SFSpeechRecognizer(locale: Locale.init(identifier: "zh-TW")) // 使用中文
private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
private var recognitionTask: SFSpeechRecognitionTask?
private let audioEngine = AVAudioEngine()
當用戶點擊麥克風按鈕時,會觸發 microphoneButtonTapped 方法。
@IBAction func microphoneButtonTapped(_ sender: UIButton) {
if audioEngine.isRunning {
audioEngine.stop()
recognitionRequest?.endAudio()
microphoneButton.isEnabled = false
microphoneButton.tintColor = .systemBlue
} else {
startRecording()
microphoneButton.isEnabled = true
microphoneButton.tintColor = .systemGray
}
}
startRecording 函數負責開始錄音並進行語音識別。
func startRecording() {
recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
var isFinal = false
if result != nil {
self.messageText.text = result?.bestTranscription.formattedString
isFinal = (result?.isFinal)!
}
if error != nil || isFinal {
// ...(加入安全機制)
}
})
}
這裡使用的是
SFSpeechRecognizer
類,它會將錄到的聲音轉換為文字,並將其顯示在 messageText 文本框中。
speechRecognizer(_:availabilityDidChange:)
方法用於更新麥克風按鈕的可用狀態。
func speechRecognizer(_ speechRecognizer: SFSpeechRecognizer, availabilityDidChange available: Bool) {
if available {
microphoneButton.isEnabled = true
} else {
microphoneButton.isEnabled = false
}
}
這樣,每當語音識別功能可用或不可用時,麥克風按鈕的狀態都會相應地更新。
這就是在iOS應用中添加麥克風訪問和語音識別的基本步驟。你可以在這基礎上進一步擴展,例如添加更多的用戶交互和視覺效果。