iOS Swift 长按按钮录音并转文字:实现多次点击和转换

本教程将教你如何在 iOS Swift 中实现长按按钮录音,放开按钮后将录音转换为文字的功能,并支持多次点击和转换。

1. 准备工作

首先,确保你的项目中已经添加了录音和语音识别的权限。在 Info.plist 文件中添加以下两个键值对:

'Privacy - Microphone Usage Description': '用于录音功能'
'NSSpeechRecognitionUsageDescription': '用于语音识别功能'

2. 创建录音管理类

创建一个名为 AudioRecorderManager 的录音管理类。在该类中添加以下属性和方法:

import AVFoundation
import Speech

class AudioRecorderManager: NSObject, AVAudioRecorderDelegate {
    var audioRecorder: AVAudioRecorder?
    var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
    var recognitionTask: SFSpeechRecognitionTask?
    let audioEngine = AVAudioEngine()
    
    func startRecording() {
        // 设置音频会话
        let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setCategory(.record, mode: .default)
            try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
        } catch {
            print("音频会话设置失败: (error.localizedDescription)")
            return
        }
        
        // 创建音频录制器
        let audioFilename = getDocumentsDirectory().appendingPathComponent("recording.wav")
        let settings = [
            AVFormatIDKey: Int(kAudioFormatLinearPCM),
            AVSampleRateKey: 44100.0,
            AVNumberOfChannelsKey: 1,
            AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
        ]
        do {
            audioRecorder = try AVAudioRecorder(url: audioFilename, settings: settings)
            audioRecorder?.delegate = self
            audioRecorder?.record()
        } catch {
            print("音频录制器创建失败: (error.localizedDescription)")
        }
        
        // 创建语音识别请求
        let recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
        self.recognitionRequest = recognitionRequest
        
        // 判断语音识别是否可用
        guard let recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
            if let result = result {
                // 处理语音识别结果
                let bestString = result.bestTranscription.formattedString
                print("语音识别结果: (bestString)")
            } else if let error = error {
                print("语音识别错误: (error.localizedDescription)")
            }
        }) else {
            print("语音识别不可用")
            return
        }
        
        self.recognitionTask = recognitionTask
        
        // 开始音频引擎
        audioEngine.inputNode.installTap(onBus: 0, bufferSize: 1024, format: audioEngine.inputNode.outputFormat(forBus: 0)) { (buffer, time) in
            self.recognitionRequest?.append(buffer)
        }
        audioEngine.prepare()
        do {
            try audioEngine.start()
        } catch {
            print("音频引擎启动失败: (error.localizedDescription)")
        }
    }
    
    func stopRecording() {
        audioRecorder?.stop()
        audioRecorder = nil
        recognitionRequest?.endAudio()
        recognitionRequest = nil
        recognitionTask?.cancel()
        recognitionTask = nil
        audioEngine.stop()
        audioEngine.inputNode.removeTap(onBus: 0)
    }
    
    func getDocumentsDirectory() -> URL {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        return paths[0]
    }
}

3. 在 ViewController 中使用录音管理类

在你的 ViewController 中创建一个 AudioRecorderManager 实例,并在按钮的长按手势事件中调用相应方法:

import UIKit

class ViewController: UIViewController {
    let audioRecorderManager = AudioRecorderManager()
    
    @IBOutlet weak var recordButton: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 添加按钮长按手势
        let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(recordButtonLongPressed(_:))) 
        recordButton.addGestureRecognizer(longPressGesture)
    }
    
    @objc func recordButtonLongPressed(_ gesture: UILongPressGestureRecognizer) {
        if gesture.state == .began {
            // 开始录音
            audioRecorderManager.startRecording()
        } else if gesture.state == .ended {
            // 结束录音
            audioRecorderManager.stopRecording()
        }
    }
}

4. 运行测试

运行你的应用程序,长按按钮开始录音,放开按钮结束录音。你可以在控制台看到语音识别的结果。

5. 进一步处理语音识别结果

你可以根据自己的需求进一步处理语音识别的结果,例如将其显示在界面上或者进行其他操作。

总结

通过以上步骤,你就可以在 iOS Swift 中实现长按按钮录音,放开按钮后将录音转换为文字的功能,并支持多次点击和转换。这可以为你的应用程序添加强大的语音识别功能。

iOS Swift 长按按钮录音并转文字:实现多次点击和转换

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

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