iOS Swift 长按按钮录音并转文字:实现多次点击和转换
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 中实现长按按钮录音,放开按钮后将录音转换为文字的功能,并支持多次点击和转换。这可以为你的应用程序添加强大的语音识别功能。
原文地址: https://www.cveoy.top/t/topic/qm0N 著作权归作者所有。请勿转载和采集!