Commit cbe2f15d authored by lmj_521aiau@163.com's avatar lmj_521aiau@163.com

no message

parent 1d38dd26
...@@ -72,6 +72,9 @@ class SHAVAudioManager: NSObject, SFSpeechRecognizerDelegate { ...@@ -72,6 +72,9 @@ class SHAVAudioManager: NSObject, SFSpeechRecognizerDelegate {
private var recorderTimer: SHTimer? private var recorderTimer: SHTimer?
var resultTxts: [String] = [] var resultTxts: [String] = []
var bestRestlt: String = ""
var startTime: CFTimeInterval = CACurrentMediaTime()
var recoderResiltCallBack:((String)->Void)?
private func configRecorder(){ private func configRecorder(){
...@@ -104,21 +107,24 @@ class SHAVAudioManager: NSObject, SFSpeechRecognizerDelegate { ...@@ -104,21 +107,24 @@ class SHAVAudioManager: NSObject, SFSpeechRecognizerDelegate {
// 用于检查识别是否结束 // 用于检查识别是否结束
var isFinal = false var isFinal = false
// 如果 result 不是 nil, // 如果 result 不是 nil,
var ss = ""
if result != nil {
ss = result?.bestTranscription.formattedString ?? "" if result != nil {
print("result?.bestTranscription.formattedString ==== \(ss)")
self.bestRestlt = result?.bestTranscription.formattedString ?? ""
// print("result?.bestTranscription.formattedString ==== \(self.bestRestlt)")
self.resultRecoderTxt(self.resultTxts, self.bestRestlt)
// 如果 result 是最终,将 isFinal 设置为 true // 如果 result 是最终,将 isFinal 设置为 true
isFinal = (result?.isFinal)! isFinal = (result?.isFinal)!
} }
// 如果没有错误发生,或者 result 已经结束,停止audioEngine 录音,终止 recognitionRequest 和 recognitionTask // 如果没有错误发生,或者 result 已经结束,停止audioEngine 录音,终止 recognitionRequest 和 recognitionTask
if error != nil || isFinal { if error != nil || isFinal {
if ss.length > 0 { if self.bestRestlt.length > 0 {
self.resultTxts.append(ss) self.resultTxts.append(self.bestRestlt)
print("self.resultTxts ==== \(self.resultTxts)") self.bestRestlt = ""
// print("self.resultTxts ==== \(self.resultTxts)")
self.resultRecoderTxt(self.resultTxts)
self.configSpeechTask()
} }
} }
}) })
...@@ -143,51 +149,64 @@ class SHAVAudioManager: NSObject, SFSpeechRecognizerDelegate { ...@@ -143,51 +149,64 @@ class SHAVAudioManager: NSObject, SFSpeechRecognizerDelegate {
self.monitor?.updateMeters() self.monitor?.updateMeters()
// 获得0声道的音量,完全没有声音-160.0,0是最大音量 // 获得0声道的音量,完全没有声音-160.0,0是最大音量
let decibels = (self.monitor?.peakPower(forChannel: 0))! let decibels = (self.monitor?.peakPower(forChannel: 0))!
print("decibels == \(decibels)") // print("decibels == \(decibels)")
if decibels > -24 { if decibels > -44 {
if recognitionTask?.isCancelled == true {
start()
}
}else{ }else{
// recorderTimer?.invalidate() let endTime: CFTimeInterval = CACurrentMediaTime()
if endTime - startTime > 3 {
// audioEngine.stop() pause()
// recognitionRequest = nil go_on()
recognitionTask = nil
recorderDataSourceHandler()
} }
} }
func recorderDataSourceHandler(){
// start()
// recorderTimer?.invalidate()
// monitor?.stop()
// monitor?.deleteRecording()
// recorder?.stop()
// recorder?.deleteRecording()
} }
func start(){ func start(){
// if recognitionTask?.state{
//
// }
self.configRecorder() self.configRecorder()
self.configSpeechTask() self.configSpeechTask()
// self.recorder?.record()
self.monitor?.record() self.monitor?.record()
startTime = CACurrentMediaTime()
recorderTimer = SHTimer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateMeters), userInfo: nil, repeats: true)
}
func go_on(){
startTime = CACurrentMediaTime()
recorderTimer = SHTimer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateMeters), userInfo: nil, repeats: true) recorderTimer = SHTimer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateMeters), userInfo: nil, repeats: true)
} }
func pause(){ private func pause(){
// monitor?.stop() recorderTimer?.invalidate()
// monitor?.deleteRecording() recognitionTask?.cancel()
// recorder?.stop() }
// recorder?.deleteRecording()
func manualPause(){
recorderTimer?.invalidate()
recognitionTask?.cancel()
self.resultTxts.append("\n")
} }
func stop(){ func stop(){
// monitor?.stop() pause()
// monitor?.deleteRecording() monitor?.stop()
// recorder?.stop() recognitionTask = nil
// recorder?.deleteRecording() audioEngine.stop()
}
recorderTimer?.invalidate() func resultRecoderTxt(_ results:[String], _ processStr:String = ""){
let recorderResult = results.reduce("", {
if $0.length == 0{
return $0 + $1
}else{
return $0 + " " + $1
}}) + " " + processStr
print("recorderResult ===== \(recorderResult)")
recoderResiltCallBack?(recorderResult)
} }
} }
...@@ -56,7 +56,7 @@ class SHRecordListViewController: SHBaseViewController { ...@@ -56,7 +56,7 @@ class SHRecordListViewController: SHBaseViewController {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
// SHAVAudioManager.shared.start() SHAVAudioManager.shared.start()
let url = FileManager.default.url(forUbiquityContainerIdentifier: nil) let url = FileManager.default.url(forUbiquityContainerIdentifier: nil)
print(url as Any) print(url as Any)
......
...@@ -53,29 +53,29 @@ class SHRecordViewController: SHBaseViewController{ ...@@ -53,29 +53,29 @@ class SHRecordViewController: SHBaseViewController{
var image_file_paths: [String] = [] var image_file_paths: [String] = []
var image_indexs: [NSInteger] = [] var image_indexs: [NSInteger] = []
var session: AVAudioSession { // var session: AVAudioSession {
let session:AVAudioSession = AVAudioSession.sharedInstance() // let session:AVAudioSession = AVAudioSession.sharedInstance()
do { // do {
try session.setCategory(AVAudioSession.Category.playAndRecord, options: .defaultToSpeaker) // try session.setCategory(AVAudioSession.Category.playAndRecord, options: .defaultToSpeaker)
}catch{ // }catch{
print("session config failed") // print("session config failed")
} // }
return session // return session
} // }
lazy var recorder: AVAudioRecorder? = self.getRecorder() // lazy var recorder: AVAudioRecorder? = self.getRecorder()
var recorder_mp3: SHMp3RecordManager = SHMp3RecordManager.shared() var recorder_mp3: SHMp3RecordManager = SHMp3RecordManager.shared()
// 创建语音识别器,指定语音识别的语言环境 locale ,将来会转化为什么语言,这里是使用的当前区域,那肯定就是简体汉语啦 // // 创建语音识别器,指定语音识别的语言环境 locale ,将来会转化为什么语言,这里是使用的当前区域,那肯定就是简体汉语啦
// private let speechRecognizer = SFSpeechRecognizer(locale: Locale.autoupdatingCurrent) //// private let speechRecognizer = SFSpeechRecognizer(locale: Locale.autoupdatingCurrent)
private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "zh-CN")) // private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "zh-CN"))
//
// 发起语音识别请求,为语音识别器指定一个音频输入源,这里是在音频缓冲器中提供的识别语音。 // // 发起语音识别请求,为语音识别器指定一个音频输入源,这里是在音频缓冲器中提供的识别语音。
private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest? // private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
// 语音识别任务,可监控识别进度。通过他可以取消或终止当前的语音识别任务 // // 语音识别任务,可监控识别进度。通过他可以取消或终止当前的语音识别任务
private var recognitionTask: SFSpeechRecognitionTask? // private var recognitionTask: SFSpeechRecognitionTask?
// 语音引擎,负责提供录音输入 // // 语音引擎,负责提供录音输入
private var audioEngine = AVAudioEngine() // private var audioEngine = AVAudioEngine()
// 文本数据 // 文本数据
private var recognitionTaskText: [String] = [] private var recognitionTaskText: [String] = []
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment