基础前端框架:react-native 语音交互服务:华为云
华为云支持的音频编码格式如下表: 一共有六种,但是一般用下表的前两种,即不压缩的裸音频格式
audio_format取值说明pcm16k16bit16k16bit单通道录音数据。pcm8k16bit8k16bit单通道录音数据。 audioPath = AudioUtils.DownloadsDirectoryPath + '/luyin.aac'; //路径下的文件名 AudioRecorder.prepareRecordingAtPath(audioPath, { SampleRate: 16000, //采样率 Channels: 1, //通道 AudioQuality: "High", //音质(Low, Medium, High) AudioEncoding: "aac", //音频编码(aac编码iOS和Android均支持) AudioEncodingBitRate: 256000, //音频编码比特率 IncludeBase64: true, //是否是base64格式 });最后发现react-native-audio录出来的音频编码不符合,需要在服务端再转一次音频编码。
计算方式: 16000采样率: 1s音频 16000采样点 16bits: 一个采样点 16bits = 2 bytes 1s : = 1000ms 即 100ms * 16000 * 2bytes / 1000ms = 3200bytes
ITEM_SIZE = 3200; RNFS.read(audioPath, ITEM_SIZE, ITEM_SIZE*itemIndex, "base64") .then() .catch()举例:华为云-实时语音转写连续模式-websocket握手
握手成功——发出开始指令——传输二进制数据——接收文本数据——…——发出结束指令——握手结束
实时语音识别api WebSocket协议: 0.0s: 【连接】发起WebSocket请求 0.1s: 【连接】连接建立 0.1s: 【发送开始参数帧】发送鉴权及识别参数 0.1s-0.2s: 【本地】录制100ms的录音 0.2s: 【发送音频数据帧】发送上面100ms的录音数据到服务器 0.2s-0.3s: 【本地】录制100ms的录音 0.3s: 【发送音频数据帧】发送上面100ms的录音数据到服务器 … 1.2s-1.3s: 【本地】录制100ms的录音 1.3s: 【发送音频数据帧】发送上面100ms的录音数据到服务器 1.31s:【接收结果】收到0s-1s这段语音的一句话临时识别结果 … 4.2-4.3s: 【本地】录制100ms的录音 4.3s: 【发送音频数据帧】发送上面100ms的录音数据到服务器 4.39s:【接收结果】收到0s-4.1s这段语音的一句话最终识别结果 … 9.9s-10.0s: 【本地】录制100ms的录音 10.0s: 【发送音频数据帧】发送上面100ms的录音数据到服务器 10.0s: 【发送结束帧】 告知服务端音频结束 10.3s:【接收结果】收到7.1-10.0 这段语音的一句话最终识别结果