This commit is contained in:
wangcongtao
2020-01-08 18:08:42 +08:00
parent 2b2e998421
commit d5c87148a5
17 changed files with 408 additions and 114 deletions

View File

@@ -33,7 +33,7 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
}
private final VoiceClient mVoiceClient;
private Map< String, IMogoVoiceCmdCallBack > mUnWakeupCmdMap = new HashMap<>();
private Map< String, IMogoVoiceCmdCallBack > mCmdMap = new HashMap<>();
private AIAssist( Context context ) {
// private constructor
@@ -43,7 +43,7 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
@Override
public void onCmdSelected( String cmd ) {
final IMogoVoiceCmdCallBack cmdCallBack = mUnWakeupCmdMap.get( cmd );
final IMogoVoiceCmdCallBack cmdCallBack = mCmdMap.get( cmd );
if ( cmdCallBack != null ) {
cmdCallBack.onCmdSelected( cmd );
}
@@ -51,17 +51,23 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
@Override
public void onCmdAction( String speakText ) {
IMogoVoiceCmdCallBack cmdCallBack = mCmdMap.remove( speakText );
if ( cmdCallBack != null ) {
cmdCallBack.onCmdAction( speakText );
}
}
@Override
public void onCmdCancel( String speakText ) {
IMogoVoiceCmdCallBack cmdCallBack = mCmdMap.remove( speakText );
if ( cmdCallBack != null ) {
cmdCallBack.onCmdCancel( speakText );
}
}
@Override
public void onSpeakEnd( String speakText ) {
IMogoVoiceCmdCallBack callBack = mUnWakeupCmdMap.get( speakText );
IMogoVoiceCmdCallBack callBack = mCmdMap.remove( speakText );
if ( callBack != null ) {
callBack.onSpeakEnd( speakText );
}
@@ -69,34 +75,81 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
@Override
public void onSpeakSelectTimeOut( String speakText ) {
IMogoVoiceCmdCallBack callBack = mUnWakeupCmdMap.get( speakText );
IMogoVoiceCmdCallBack callBack = mCmdMap.remove( speakText );
if ( callBack != null ) {
callBack.onSpeakSelectTimeOut( speakText );
}
}
public void speakTTSVoice( String text ) {
/**
* 语音播报
*
* @param text
*/
public void speakTTSVoice( String text, IMogoVoiceCmdCallBack callBack ) {
try {
mCmdMap.put( text, callBack );
mVoiceClient.speakDefault( text );
} catch ( Exception e ) {
}
}
/**
* 语音播报
*
* @param text 播报内容
* @param type 播报策略
*/
public void speakTTSVoice( String text, VoicePreemptType type, IMogoVoiceCmdCallBack callBack ) {
try {
mCmdMap.put( text, callBack );
mVoiceClient.speakTypeText( text, type.getPreemptType() );
} catch ( Exception e ) {
}
}
/**
* 问答类型语音注册:默认确认和取消
*
* @param tts 播报内容
*/
public void speakQAndACmd( String tts, IMogoVoiceCmdCallBack callBack ) {
mCmdMap.put( tts, callBack );
mVoiceClient.speakTtsAndRegistCmd( tts );
}
/**
* 问答类型语音注册
*
* @param tts 播报内容
* @param okCmds 确认命令唤醒词
* @param cancelCmds 取消命令唤醒词
*/
public void speakQAndACmd( String tts, String[] okCmds, String[] cancelCmds, IMogoVoiceCmdCallBack callBack ) {
mCmdMap.put( tts, callBack );
mVoiceClient.speakTtsAndRegistCmd( tts, okCmds, cancelCmds );
}
/**
* 注册免唤醒命令
*
* @param cmd
* @param cmdWords
* @param callBack
*/
public void registerUnWakeupCommand( String cmd, String[] cmdWords, IMogoVoiceCmdCallBack callBack ) {
mUnWakeupCmdMap.put( cmd, callBack );
mCmdMap.put( cmd, callBack );
mVoiceClient.registerCustomWakeupCmd( cmd, cmdWords );
}
/**
* 注销免唤醒命令
*
* @param cmd
*/
public void unregisterUnWakeupCommand( String cmd ) {
mUnWakeupCmdMap.remove( cmd );
mCmdMap.remove( cmd );
mVoiceClient.unRegisterCustomWakeupCmd( cmd );
}
public void registerTTSCallback( String tts, IMogoVoiceCmdCallBack cmdCallBack ) {
mUnWakeupCmdMap.put( tts, cmdCallBack );
}
public void unregisterTTSCallback( String tts ) {
mUnWakeupCmdMap.remove( tts );
}
}

View File

@@ -0,0 +1,23 @@
package com.mogo.commons.voice;
import com.zhidao.auto.platform.voice.VoiceClient;
public enum VoicePreemptType {
PREEMPT_TYPE_NONE( VoiceClient.PreemptType.PREEMPT_TYPE_NONE ), //不打断
PREEMPT_TYPE_IMMEADIATELY( VoiceClient.PreemptType.PREEMPT_TYPE_IMMEADIATELY ), //立即打断取消当前的tts插队播放
PREEMPT_TYPE_NEXT( VoiceClient.PreemptType.PREEMPT_TYPE_NEXT ), //下一个插入不取消当前的tts插队下一个播放
PREEMPT_TYPE_FLUSH( VoiceClient.PreemptType.PREEMPT_TYPE_FLUSH ), //清空队列
PREEMPT_TYPE_IMMEADIATELY_WITHOUT_CANCLE( VoiceClient.PreemptType.PREEMPT_TYPE_IMMEADIATELY_WITHOUT_CANCLE ); //立即打断不取消当前tts
public VoiceClient.PreemptType preemptType;
VoicePreemptType( VoiceClient.PreemptType preemptType ) {
this.preemptType = preemptType;
}
public VoiceClient.PreemptType getPreemptType() {
return preemptType;
}
}