语音接入

考虑到pc与ios、android三端的混服情况,所有录音的格式均存储为mp3格式,也是unity推荐的音频文件方式

前提:目前比较成熟的语音模块由科大讯飞平台提供的,目前我们需要的功能是把语音转化成文字,因此我们只需要下载相应的语音识别模块就可以了。

1)进入科大讯飞官网下载相应平台的sdk,目前我们只需要免费的语音识别就可以了,要创建相应的应用才能下载,里面的demo提供边录音边翻译的功能。

2)pc端的没有提供边录边能,要想在pc版进行录音可引入第三方库进行录音或者使用unity提供的microphone进行录音也可以的

 

1 pc端录音以及识别

1.1 录音:

方法一:unity本身有microphone录制功能,存储在AudioClip,这是原生态数据比较大,我们需要保存成相应的wav文件,再转成mp3发给服务器.

要根据服务器的协议发送大小,随时更改录制的参数, 主要录制功能代码 Microphone.Start(),一般移动端都适合录制10s,sample_rate(采样率) = 8000

的设置即可. mp3录制的参数的bitRate尽量设置为 16位(影响mp3文件大小的主要参数),不懂这些参数可参考以下链接,代码里面会有设置。

方法二:利用NAudio 录制,是利用.net里面的录音功能,同时压缩mp3也需要利用这里的库文件进行解析wav格式等等。

1.2 注意的问题:

1.2.1 NAudio 主要录制的功能waveIn,录制的时候往往需要获取声音的大小,以便录音者调整音量大小. waveIn有个事件回调,根据刷新频率传回相应的文件数据,此时只需要只能通过相应的数据来获取音量大小,可在一下源码进行获取观看。

1.2.1 NAudio waveOut是可用来播放mp3,但是没有源码播放、暂停、停止均不会设置回来状态。

 

2、 android录音以及存储、语音识别

2.1 目前没有和pc,ios混服 因此采用科大讯飞进行边录边翻译功能,暂时采用的存储方式是.amr,如果需要混服我们需要把它压缩成mp3格式,科大讯飞支持录制两种方式wav

和pcm,我们只需要在unity利用和pc端一样的压缩原理把它压缩成mp3即可.

步骤: 需要到科大讯飞开发者网站 创建应用下载相应的sdk,源码主要是在IatDemo里面

原理: 讯飞支持把语音数据分段发送进行识别,主要是边录边把数据进行发送识别,录音是采用android本身的录音。主要类是IatDemo

问题:讯飞提供的SpeechRecognizer主要是普遍反映录的声音较小,改变手机的音量会导致游戏的声音同时改变,解决办法:在录音提高系统音量,录完再回复原来音量

2.2  pcm或者wav转成mp3

同样是使用lame mp3库,主要采用 java与 C之间的交互生成相应的so文件(主要是调用lame mp3库方法),录音成pcm采用该so文件进行压缩即可,这个方法把安全容易造成某些机型闪退,不建议采用,尽量采用和pc端一样的压缩方式.

3 ios的原理和android差不多,只不过他有.a库,我们尽量不在XCode工程里面做压缩,ios、pc、android尽量采用统一方式在Unity层进行压缩即可。