Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
S
ShorthandMaster
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lmj
ShorthandMaster
Commits
cbe2f15d
Commit
cbe2f15d
authored
Sep 28, 2020
by
lmj_521aiau@163.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
1d38dd26
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
78 additions
and
59 deletions
+78
-59
SHAVAudioManager.swift
ShorthandMaster/Record/SHAVAudioManager.swift
+57
-38
SHRecordListViewController.swift
ShorthandMaster/Record/SHRecordListViewController.swift
+1
-1
SHRecordViewController.swift
ShorthandMaster/Record/SHRecordViewController.swift
+20
-20
No files found.
ShorthandMaster/Record/SHAVAudioManager.swift
View file @
cbe2f15d
...
@@ -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
)
}
}
}
}
ShorthandMaster/Record/SHRecordListViewController.swift
View file @
cbe2f15d
...
@@ -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
)
...
...
ShorthandMaster/Record/SHRecordViewController.swift
View file @
cbe2f15d
...
@@ -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
]
=
[]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment