Swift 录音转文字教程:使用 Speech Framework 实现语音识别
Swift 录音转文字教程:使用 Speech Framework 实现语音识别
想要将录音转换为文字,你可以使用苹果的 Speech Framework 来实现。下面是一个简单的示例代码:
首先,导入 Speech 框架:
import Speech
然后,在你的 ViewController 中添加以下代码:
class ViewController: UIViewController, SFSpeechRecognizerDelegate {
// 创建一个语音识别器
private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: 'zh-CN'))!
// 创建一个语音识别请求
private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
// 创建一个语音识别任务
private var recognitionTask: SFSpeechRecognitionTask?
// 创建一个音频引擎
private let audioEngine = AVAudioEngine()
override func viewDidLoad() {
super.viewDidLoad()
speechRecognizer.delegate = self
// 请求用户授权使用语音识别功能
SFSpeechRecognizer.requestAuthorization { authStatus in
OperationQueue.main.addOperation {
if authStatus == .authorized {
// 用户授权成功,可以开始录音
self.startRecording()
}
}
}
}
// 开始录音
func startRecording() {
if recognitionTask != nil {
// 取消之前的语音识别任务
recognitionTask?.cancel()
recognitionTask = nil
}
// 创建一个新的语音识别请求
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
guard let inputNode = audioEngine.inputNode else {
fatalError("Audio engine has no input node")
}
guard let recognitionRequest = recognitionRequest else {
fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object")
}
// 将输入节点添加到音频引擎
let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
self.recognitionRequest?.append(buffer)
}
audioEngine.prepare()
do {
// 启动音频引擎
try audioEngine.start()
} catch {
print("audioEngine couldn't start because of an error: \(error)")
}
// 开始语音识别任务
recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest) { result, error in
if let result = result {
// 将语音识别结果打印出来
let transcription = result.bestTranscription.formattedString
print(transcription)
} else if let error = error {
print("Recognition task error: \(error)")
}
}
}
// 停止录音
func stopRecording() {
audioEngine.stop()
recognitionRequest?.endAudio()
}
// MARK: - SFSpeechRecognizerDelegate
func speechRecognizer(_ speechRecognizer: SFSpeechRecognizer, availabilityDidChange available: Bool) {
if available {
// 语音识别可用
startRecording()
} else {
// 语音识别不可用
stopRecording()
}
}
}
在viewDidLoad方法中,我们请求用户授权使用语音识别功能。授权成功后,我们调用startRecording方法开始录音,并在授权状态发生变化时调用speechRecognizer(_:availabilityDidChange:)方法。
startRecording方法中,我们创建一个新的语音识别请求,并将输入节点添加到音频引擎。然后,我们启动音频引擎,并开始语音识别任务。在识别任务的回调中,我们可以获取到识别的结果,并将其打印出来。
最后,我们还需要在适当的时候调用stopRecording方法来停止录音。
请注意,使用语音识别功能需要在项目的Info.plist文件中添加相关的隐私权限描述,具体的操作可以参考苹果的文档。此外,你还需要在项目的 Target 的Signing & Capabilities选项卡中开启Speech功能。
原文地址: https://www.cveoy.top/t/topic/qmY6 著作权归作者所有。请勿转载和采集!