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功能。

Swift 录音转文字教程:使用 Speech Framework 实现语音识别

原文地址: https://www.cveoy.top/t/topic/qmY6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录