实时语音识别使用文件流提示3001
1140212774 发布于2020-12 浏览:1752 回复:4
0
收藏

我们使用的场景是一边录音一边进行语音识别:因为如果使用SDK传回的语音数据结果,网络不好的话,SDK会退出;我们的诉求是语音录制一定可以,转文字可以失败

1. 使用AudioRecord进行录音,将数据写入文件(录音不停止)

2. 在开始录音后50毫秒,将录音文件以流的方式持续传给SDK进行语音识别转为文字。

也就是说一边产生录音文件一边进行识别

但在部分手机上会报3001的错误。查看文档发现3001是录音机打开失败。

语音识别参数如下:

Map params = new LinkedHashMap<>();

 //是否需要语音音量数据回调
 params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
//本地语义
 params.put(SpeechConstant.NLU, "enable");
 // 长语音
 params.put(SpeechConstant.VAD_ENDPOINT_TIMEOUT, 0);
 //语音活动检测, 根据静音时长自动断句
 params.put(SpeechConstant.VAD, SpeechConstant.VAD_DNN);
 // 中文输入法模型,有逗号
 params.put(SpeechConstant.PID, 1537);
 //目前必须开启此回掉才能保存音频
 params.put(SpeechConstant.ACCEPT_AUDIO_DATA, false);
 //使用录音文件作为输入源,参考百度语音识别demo
 params.put(SpeechConstant.IN_FILE, "#me.chunyu.chunyudoctorclient.home.record.InFileStream.create16kStream()");
SDK版本:bdasr_V3_20191210_81acdf5

疑问是:

1. 只使用了文件进行识别,为啥SDK还是会使用录音机?

2. 是不是说就算开发者使用的是语音文件进行识别,SDK也一定会使用录音机?

3. 如果是,那为什么只是偶尔会有这个提示?录音机是一直在被我自己写的功能占用,SDK肯定得不到录音的机会,如果这样的话,为什么3001的错误不是必现的?

收藏
点赞
0
个赞
共4条回复 最后由qq928243596回复于2022-09
#6138*****574回复于2021-08

原因:
百度SDK错误使用了localserversocket
录音 -> 通过localserversocket上传服务器 -> localserversocket 异常 -> java.ioi.IOExceptiion: Address already in use

priivate fiinal static String SOCKET_ADDRESS = UUID.randomUUID().toString();
......
int address = new Random().nextIInt(1000);
mServerSocket = new LocalServerSocket(SOCKET_ADDRESS + address);

千分之一的概率出现占用问题, 而不是期望的UUID的概率

0
#4用户已被禁言回复于2020-12
#3 1140212774回复
但是为什么使用文件流进行识别的时候,会提示3001(录音机打开失败)呢? 使用文件流进行语音识别的时候,SDK也会使用录音机么? 但只是偶尔会提示3001,并不是必现的。
展开

没有文件流识别的功能,导入音频识别不使用麦克风资源。

0
#31140212774回复于2020-12

但是为什么使用文件流进行识别的时候,会提示3001(录音机打开失败)呢?

使用文件流进行语音识别的时候,SDK也会使用录音机么? 但只是偶尔会提示3001,并不是必现的。

0
#2用户已被禁言回复于2020-12

导入外部音频识别是不支持一边传输音频流一遍出结果的,而是一次性上传整个音频,一次性返回所有结果。网络条件严重不好的情况无法支持实时语音识别。

0
TOP
切换版块