17. 录音功能
开始录音可由设备端发起,也可由App端发起。结束录音可由设备端发起,也可由App端发起。
示例代码
/**
* @ClassName: RecordDemo
* @Description: 录音功能示例
* @Author: ZhangHuanMing
* @CreateDate: 2023/12/28 15:52
*/
public class RecordDemo {
private RecordOpImpl mRecordOp;
private OnRecordStateCallback mOnRecordStateCallback = (bluetoothDevice, recordState) -> {
switch (recordState.getState()) {
case RecordState.RECORD_STATE_START: /* 录音状态 -- 开始状态*/
//录音参数,音频类型 采样率 断句方
RecordParam recordParam = recordState.getRecordParam();
recordParam.getSampleRate();//采样率
recordParam.getVoiceType();//音频编码格式
recordParam.getVadWay();//断句方
break;
case RecordState.RECORD_STATE_WORKING: //录音数据回传
recordState.getVoiceDataBlock();//录音分包数据
break;
case RecordState.RECORD_STATE_IDLE: /* 录音状态 -- 空闲(结束)状态*/
if (recordState.getReason() >= 0) {//结束原因,大于0则是正常
//非AI云服务功能,不需要处理以下状态
recordState.isPlayTTS();//是否需要播放TTS
recordState.isSyncIatText();//是否需要传输语音识别文本
recordState.isSyncNlpText();//是否需要传输语义识别文本
}
recordState.getVoiceData();//录音总包数据
break;
}
};
/**
* 初始化
*/
@Test
public void init(){
mRecordOp = new RecordOpImpl(WatchManager.getInstance());
mRecordOp.addOnRecordStateCallback(mOnRecordStateCallback);
}
/**
* 释放
*/
@Test
public void release(){
if (mRecordOp != null) {
mRecordOp.removeOnRecordStateCallback(mOnRecordStateCallback);
mRecordOp.release();
mRecordOp = null;
}
}
/**
* 获取录音状态
*/
@Test
public RecordState getRecordState(){
return mRecordOp.getRecordState();
}
/**
* App端开始录音
*/
@Test
public void startRecord(BluetoothDevice device){
int voiceType = RecordParam.VOICE_TYPE_OPUS;//录音格式-opus
int sampleRate = RecordParam.SAMPLE_RATE_8K;//采样率-8k
int vadWay = RecordParam.VAD_WAY_DEVICE;//断句方-设备
RecordParam param = new RecordParam(voiceType,sampleRate,vadWay);
OnOperationCallback<Boolean> callback = new OnOperationCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
if (result){
//开始成功
}
}
@Override
public void onFailed(BaseError error) {
}
};
mRecordOp.startRecord(device,param,callback);
}
/**
* App端结束录音
*/
@Test
public void stopRecord(BluetoothDevice device){
int reason = REASON_NORMAL;//0:正常结束,1取消
boolean isSyncIatText= true;//是否同步语音识别文本(会同步更新设置)
boolean isSyncNlpText= true;//是否同步AI语义识别文本(会同步更新设置)
boolean isPlayTTS= true;//是否播放AI语义识别的TTS(会同步更新设置)
OnOperationCallback<Boolean> callback = new OnOperationCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
if (result){
//停止成功
}
}
@Override
public void onFailed(BaseError error) {
}
};
mRecordOp.stopRecord(device,reason,isSyncIatText,isSyncNlpText,isPlayTTS,callback);
}
}