Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
项目统一框架
amos-boot-biz
Commits
f17dbfbf
Commit
f17dbfbf
authored
Dec 02, 2021
by
helinlin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加阿里云音频识别接口
parent
f628f8db
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
59 additions
and
23 deletions
+59
-23
AudioToText.java
...oin/amos/boot/module/jcs/biz/audioToText/AudioToText.java
+4
-4
SocketClient.java
...in/amos/boot/module/jcs/biz/audioToText/SocketClient.java
+3
-1
SpeechTranscriberListener.java
...module/jcs/biz/audioToText/SpeechTranscriberListener.java
+14
-12
Audio2TextController.java
.../boot/module/jcs/biz/controller/Audio2TextController.java
+22
-1
AppSpeechTranscriber.java
...in/java/com/yeejoin/amos/speech/AppSpeechTranscriber.java
+16
-5
No files found.
amos-boot-module/amos-boot-module-biz/amos-boot-module-jcs-biz/src/main/java/com/yeejoin/amos/boot/module/jcs/biz/audioToText/AudioToText.java
View file @
f17dbfbf
...
...
@@ -32,16 +32,16 @@ public class AudioToText {
//启动两个监听端口监听推送进来的2路语音流
ServerSocket
serverSocket1
=
initServerSocketPort
();
ServerSocket
serverSocket2
=
initServerSocketPort
();
//识别的关键字
AudioKeyWord
audioKeyWord
=
new
AudioKeyWord
();
logger
.
warn
(
"myNumber监听的端口为:"
+
serverSocket1
.
getLocalPort
()
+
" callerNumber监听的端口为:"
+
serverSocket2
.
getLocalPort
());
//我的语音流
Thread
thread1
=
new
Thread
(()
->
{
AppSpeechTranscriber
transcriber
=
new
AppSpeechTranscriber
(
new
SpeechTranscriberListener
(
myNumber
,
emqKeeper
),
serverSocket1
);
transcriber
.
process
();
new
AppSpeechTranscriber
(
new
SpeechTranscriberListener
(
myNumber
,
myNumber
,
emqKeeper
,
audioKeyWord
),
serverSocket1
).
process
();
});
//呼入的语音流
Thread
thread2
=
new
Thread
(()
->
{
AppSpeechTranscriber
transcriber
=
new
AppSpeechTranscriber
(
new
SpeechTranscriberListener
(
callerNumber
,
emqKeeper
),
serverSocket2
);
transcriber
.
process
();
new
AppSpeechTranscriber
(
new
SpeechTranscriberListener
(
callerNumber
,
myNumber
,
emqKeeper
,
audioKeyWord
),
serverSocket2
).
process
();
});
thread1
.
setUncaughtExceptionHandler
(
new
SubUncaughtExceptionHandler
(
serverSocket1
));
thread2
.
setUncaughtExceptionHandler
(
new
SubUncaughtExceptionHandler
(
serverSocket2
));
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-jcs-biz/src/main/java/com/yeejoin/amos/boot/module/jcs/biz/audioToText/SocketClient.java
View file @
f17dbfbf
...
...
@@ -19,7 +19,9 @@ import java.util.concurrent.TimeUnit;
public
class
SocketClient
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
SocketClient
.
class
);
private
static
final
String
[]
testFilePath
=
{
"D:\\ffmpeg-4.4-full_build-shared\\bin\\out.pcm"
,
"D:\\ffmpeg-4.4-full_build-shared\\bin\\out2.pcm"
,
"D:\\ffmpeg-4.4-full_build-shared\\bin\\out3.pcm"
,
"D:\\ffmpeg-4.4-full_build-shared\\bin\\out4.pcm"
,
};
public
static
void
main
(
String
[]
args
)
{
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-jcs-biz/src/main/java/com/yeejoin/amos/boot/module/jcs/biz/audioToText/SpeechTranscriberListener.java
View file @
f17dbfbf
...
...
@@ -19,16 +19,17 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
public
static
final
int
RESULT_SUCCESS_CODE
=
20000000
;
//识别的记录
List
<
AudioRecord
>
audioRecords
=
new
ArrayList
<>();
//识别的关键字
AudioKeyWord
audioKeyWord
=
new
AudioKeyWord
();
//当前识别的音频来源
private
final
String
number
;
private
final
String
recordSendNumber
;
private
final
String
keywordSendNumber
;
//mqtt客户端
private
final
EmqKeeper
emqKeeper
;
private
final
AudioKeyWord
audioKeyWord
;
public
SpeechTranscriberListener
(
String
number
,
EmqKeeper
emqKeeper
)
{
this
.
number
=
number
;
public
SpeechTranscriberListener
(
String
recordSendNumber
,
String
keywordSendNumber
,
EmqKeeper
emqKeeper
,
AudioKeyWord
audioKeyWord
)
{
this
.
recordSendNumber
=
recordSendNumber
;
this
.
keywordSendNumber
=
keywordSendNumber
;
this
.
emqKeeper
=
emqKeeper
;
this
.
audioKeyWord
=
audioKeyWord
;
}
/**
...
...
@@ -48,8 +49,8 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
//当前已处理的音频时长,单位为毫秒。
", time: "
+
response
.
getTransSentenceTime
());
if
(
response
.
getStatus
()
==
RESULT_SUCCESS_CODE
)
{
sendToMqtt
(
response
,
audioRecords
,
number
);
extractKeyWord
(
response
,
audioKeyWord
,
number
);
sendToMqtt
(
response
,
audioRecords
);
extractKeyWord
(
response
,
audioKeyWord
);
}
else
{
logger
.
error
(
"异常的相应结果,响应码:"
+
response
.
getStatus
());
}
...
...
@@ -131,7 +132,7 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
* @param audioRecords 历史识别记录
*/
@Async
public
void
sendToMqtt
(
SpeechTranscriberResponse
response
,
List
<
AudioRecord
>
audioRecords
,
String
number
)
{
public
void
sendToMqtt
(
SpeechTranscriberResponse
response
,
List
<
AudioRecord
>
audioRecords
)
{
AudioRecord
audioRecord
=
new
AudioRecord
.
AudioRecordBuilder
()
.
type
(
response
.
getTransSentenceIndex
()
%
2
)
// TODO 区别说话角色
.
taskId
(
response
.
getTaskId
())
...
...
@@ -151,7 +152,7 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
try
{
ObjectMapper
objectMapper
=
new
ObjectMapper
();
emqKeeper
.
getMqttClient
().
publish
(
MessageType
.
RECORD
.
getName
()
+
"
_"
+
n
umber
,
MessageType
.
RECORD
.
getName
()
+
"
/"
+
recordSendN
umber
,
objectMapper
.
writeValueAsString
(
audioRecord
).
getBytes
(),
RuleConfig
.
DEFAULT_QOS
,
true
);
}
catch
(
Exception
e
)
{
...
...
@@ -167,7 +168,7 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
* @param audioKeyWord //关键字结果集
*/
@Async
public
void
extractKeyWord
(
SpeechTranscriberResponse
response
,
AudioKeyWord
audioKeyWord
,
String
number
)
{
public
void
extractKeyWord
(
SpeechTranscriberResponse
response
,
AudioKeyWord
audioKeyWord
)
{
try
{
String
result
=
response
.
getTransSentenceText
();
//寻找关键字
...
...
@@ -184,7 +185,7 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
ObjectMapper
objectMapper
=
new
ObjectMapper
();
byte
[]
bytes
=
objectMapper
.
writeValueAsString
(
audioKeyWord
.
getValues
()).
getBytes
();
emqKeeper
.
getMqttClient
().
publish
(
MessageType
.
KEYWORD
.
getName
()
+
"
_"
+
n
umber
,
MessageType
.
KEYWORD
.
getName
()
+
"
/"
+
keywordSendN
umber
,
bytes
,
RuleConfig
.
DEFAULT_QOS
,
true
);
}
catch
(
Exception
e
)
{
...
...
@@ -193,3 +194,4 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
}
}
}
amos-boot-module/amos-boot-module-biz/amos-boot-module-jcs-biz/src/main/java/com/yeejoin/amos/boot/module/jcs/biz/controller/Audio2TextController.java
View file @
f17dbfbf
...
...
@@ -13,6 +13,7 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType;
import
org.typroject.tyboot.core.restful.doc.TycloudOperation
;
import
java.util.HashMap
;
import
java.util.concurrent.TimeUnit
;
@RestController
@Api
(
tags
=
"语音转文字Api"
)
...
...
@@ -44,12 +45,32 @@ public class Audio2TextController {
@GetMapping
(
"/startSendAudio"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"测试语音转文字第二步"
,
notes
=
"测试语音转文字第二步"
)
public
String
startSendAudio
(
@RequestParam
int
port
,
Integer
type
)
{
if
(
type
==
null
)
type
=
0
;
if
(
type
==
null
)
type
=
0
;
socketClient
.
process
(
port
,
type
);
return
"success"
;
}
/**
* 测试语音转文字融合接口
*
* @param myNumber 我的手机号
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@GetMapping
(
"/startConvertAndSendAudio"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"测试语音转文字融合接口"
,
notes
=
"测试语音转文字融合接口"
)
public
HashMap
<
String
,
Integer
>
startConvertAndSendAudio
(
@RequestParam
String
myNumber
,
@RequestParam
String
callerNumber
)
{
HashMap
<
String
,
Integer
>
convert
=
audioToText
.
convert
(
myNumber
,
callerNumber
);
try
{
TimeUnit
.
SECONDS
.
sleep
(
1
);
socketClient
.
process
(
convert
.
get
(
myNumber
),
0
);
socketClient
.
process
(
convert
.
get
(
callerNumber
),
1
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
convert
;
}
/**
* 第一步收到转换请求后,启动两个serverSocket,监听不同端口
* 第一步调用语音融合系统的API并传递两个监听的端口号和本机IP地址
* 第三步serverSocket收到数据请求,开始将数据推至阿里云语音识别系统进行识别
...
...
amos-boot-utils/amos-boot-utils-speech/src/main/java/com/yeejoin/amos/speech/AppSpeechTranscriber.java
View file @
f17dbfbf
...
...
@@ -12,6 +12,7 @@ import java.io.InputStream;
import
java.net.ServerSocket
;
import
java.net.Socket
;
import
java.util.Timer
;
import
java.util.TimerTask
;
/**
...
...
@@ -25,11 +26,22 @@ public class AppSpeechTranscriber {
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
AppSpeechTranscriber
.
class
);
private
final
SpeechTranscriberListener
listener
;
private
final
ServerSocket
serverSocket
;
//private Timer serverSocketTimeoutTimer;
private
final
Timer
serverSocketTimeoutTimer
;
private
final
TimerTask
timerTask
;
public
AppSpeechTranscriber
(
SpeechTranscriberListener
listener
,
ServerSocket
serverSocket
)
{
this
.
listener
=
listener
;
this
.
serverSocket
=
serverSocket
;
serverSocketTimeoutTimer
=
new
Timer
();
//60s未收到任何请求,直接关闭监听
timerTask
=
new
TimerTask
()
{
@Override
public
void
run
()
{
logger
.
warn
(
"serverSocket,port:"
+
serverSocket
.
getLocalPort
()
+
" 等待60s无应答即将自动关闭!"
);
closeServerSocket
();
}
};
serverSocketTimeoutTimer
.
schedule
(
timerTask
,
1000
*
60
);
}
/**
...
...
@@ -41,15 +53,15 @@ public class AppSpeechTranscriber {
//启动ServerSocket等待接收音频数据,只接受一次请求
logger
.
warn
(
"serverSocket已启动,地址:"
+
serverSocket
.
getInetAddress
().
getHostAddress
()
+
"监听端口:"
+
serverSocket
.
getLocalPort
()
+
" 等待语音融合系统推送数据..."
);
Socket
socket
=
serverSocket
.
accept
();
timerTask
.
cancel
();
serverSocketTimeoutTimer
.
cancel
();
logger
.
warn
(
"收到用户连接请求,开始读取数据"
);
//创建实例、建立连接。
transcriber
=
new
SpeechTranscriber
(
AppNslClient
.
instance
(),
listener
);
//设置识别参数
setParam
(
transcriber
);
//开始任务
transcriber
.
start
();
InputStream
inputStream
=
socket
.
getInputStream
();
byte
[]
b
=
new
byte
[
4096
];
...
...
@@ -59,7 +71,6 @@ public class AppSpeechTranscriber {
transcriber
.
send
(
b
,
len
);
}
socket
.
close
();
//结束任务
transcriber
.
stop
();
logger
.
warn
(
"语音转文字已结束"
);
}
catch
(
Exception
e
)
{
...
...
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