self.play_new_voice_flag =0 #播放文字留言flag
EventMesh.subscribe("play_tts",self.play_tts)
EventMesh.subscribe("play_new_voice",self.play_new_voice)
+ EventMesh.subscribe("play_single_voice",self.play_single_voice)#不带tts的播放(闹钟)
EventMesh.subscribe("play_music",self.play_music)#播放音乐
EventMesh.subscribe("play_trans_tts",self.play_trans_tts)#接收翻译tts
EventMesh.subscribe("set_vad_silence",self.set_vad_silence)
self.voice_cnt = 0 #留言定时器计数
self.voicerupt_flag = 0#留言选择按键接听标志位
self.recv_voice = 0 #是否收到留言
+ self.voice_notice = 0 #收到留言并播放则置为1,接下来要播放提示词
self.voice_choose_flag = 0#当tts和语音留言冲突时,为了防止语音地址被误清,做标志位在close做判断
+ self.revoice_timer = osTimer()#语音留言10S按下按键确定是否回复的判断定时器
+ self.revoice_cnt = 0 #回复留言定时器计数
+ self.revoicerupt_flag = 0#留言选择按键接听标志位
+
self.music_timer = osTimer()#音乐播放定时器,等待tts播完才放音乐
self.music_cnt = 0 #留言定时器计数
self.VC_record_state_flag = 0
self.AI_key_long_press_flag = 0
self.websocket_error_count = 0
- self.AI_new_voice_url = "" #未读语音地址/音乐播放地址
+ self.AI_new_voice_url = "" #未读语音地址/音乐播放地址/闹钟播放标志
self.music_play_flag = 0 #音乐播放标志
+ self.alarm_play_flag = 0 #闹钟播放标志
self.tts_in_data_len = 0
self.tts_out_data_len = 0
self.VC_satrt_flag = 0
return self.audio_play_state
def come_meet_mode(self, event=None, msg = None):
- if self.meet_flag == 0: #还是为0就提示进入语音留言模式
+ if self.meet_flag == 0: #还是为0就提示进入会议纪要模式
EventMesh.publish("send_meet_open_flag_to_iot")#创建会议
self.meet_flag=1
exit_tts ="开启会议纪要,正在录音"
if EventMesh.publish("GET_USB_STATE") == 0:
EventMesh.publish("close_led")
EventMesh.publish("stop_voice_record")#停止静默录音
+ tts_play_str = "留言已发送"
+ EventMesh.publish("play_tts",[tts_play_str,1])
return
if self.AI_key_long_press_flag == 1 :#有长按
#self.AI_client_VC_end_speech()
print("VC:Started!!!!!!!!\r\n")
print("TTS音频为:{},语音下发地址为:{}".format(self.AI_TTS_str,self.AI_new_voice_url))
- if self.AI_TTS_str == "" and self.AI_new_voice_url != "" and self.music_play_flag == 0:
+ if self.AI_new_voice_url != "" and self.alarm_play_flag == 1 :#有闹钟,先响闹钟
+ self.AI_VC_start()
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_new_voice})#播放铃声
+ self.alarm_play_flag = 0
+ self.voice_choose_flag = 1
+ elif self.AI_TTS_str == "" and self.AI_new_voice_url != "" and self.music_play_flag == 0:
self.voice_cnt = 0
+ print("定时器开启222222222")
self.voice_timer.start(1000,1,self.voice_judge)
elif self.AI_TTS_str != "" and self.AI_new_voice_url == "":
EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_synthesis})
+
elif self.AI_TTS_str != "" and self.AI_new_voice_url != "" and self.music_play_flag == 0:#遇到tts和语音留言冲突时(并且没有音乐播放)
EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_synthesis})
self.voice_cnt = 0
+ print("定时器开启111111111")
self.voice_timer.start(1000,1,self.voice_judge)
self.voice_choose_flag = 1
# self.AI_TTS_str = ""
- elif self.AI_TTS_str != "" and self.AI_new_voice_url != "" and self.music_play_flag == 1:#遇到tts和语音留言冲突时(并且有音乐播放)
+ elif self.AI_TTS_str != "" and self.AI_new_voice_url != "" and self.music_play_flag == 1 :#遇到tts和语音留言冲突时(并且有音乐播放)
self.music_play_flag = 0
EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_synthesis})
self.music_timer.start(1000,1,self.music_play)
self.Close_flag = 1
self.LocalRespondingEnded_timerout = 8
# EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ if self.voice_notice == 1:#已收到留言,进行该留言回复逻辑处理
+ tts_play_str = "如需回复,长按确认键开始录制,松开发送。十秒内无操作自动退出"
+ EventMesh.publish("play_tts",[tts_play_str,1])
+ self.voice_notice = 0#标志位清空
+ self.voice_timer.stop()
+ self.revoice_cnt = 0
+ self.voice_flag = 1
+ print("语音留言回复停止")
+ self.revoice_timer.start(1000,1,self.revoice_judge)
if EventMesh.publish("get_play_new_voice_state")== 1:
EventMesh.publish("set_play_new_voice_state",1)
EventMesh.publish("update_play_new_voice_info")
print("语音留言定时器cnt = {}".format(self.voice_cnt))
if self.voicerupt_flag == 1:#按键被按下
self.AI_VC_start()
+ self.voice_notice = 1
EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_new_voice})#播放留言
self.voicerupt_flag = 0 #标志位置0
self.voice_cnt = 0
self.recv_voice = 0#进入留言定时器,留言清空
print("进入留言定时器1,留言清空!!!!!")
self.voice_timer.stop()
- if self.voice_cnt > 15:#10S后退出播放,4S是为了给语音提示留时间
+ if self.voice_cnt > 15:#10S后退出播放,5S是为了给语音提示留时间
self.voice_cnt = 0
self.recv_voice = 0#进入留言定时器,留言清空
if self.voice_choose_flag == 1:#播放完语音后,有冲突的时候关闭
self.voice_choose_flag = 0
print("进入留言定时器2,留言清空!!!!!")
self.voice_timer.stop()
+ #语音留言回复定时器
+ def revoice_judge(self, *args, **kwargs):
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.revoice_judger_cb})
+ def revoice_judger_cb(self):
+ self.revoice_cnt += 1
+ print("语音留言回复定时器cnt = {}".format(self.revoice_cnt))
+ if self.revoice_cnt > 20:#10S后退出播放,10S是为了给语音提示留时间
+ self.revoice_cnt = 0
+ self.voice_flag=0
+ print("语音留言回复停止")
+ self.revoice_timer.stop()
#音乐播放定时器
def music_play(self, *args, **kwargs):
EventMesh.publish("publish_AI_btnInfo",{"func":self.music_play_cb})
EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
tts_play_str = "声音改为{}".format(voice)
EventMesh.publish("play_tts",[tts_play_str,0])
-
+
+ #闹钟的url播放接口
+ def play_single_voice(self,event = None,msg= None):
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.play_single_voice_cb,"data":msg})
+ def play_single_voice_cb(self,data):
+ try:
+ new_voice_url = data[0] #音频地址
+ is_close_VC = data[1]
+ if new_voice_url != "":
+ self.AI_new_voice_url = new_voice_url
+ self.alarm_play_flag = 1
+ if is_close_VC != None:
+ self.Close_flag = is_close_VC
+ if self.AI_VC_send_data_queue.empty()!=True:
+ self.AI_VC_send_data_queue.clear()
+ if self.AI_ASR_send_data_queue.empty()!=True:
+ self.AI_ASR_send_data_queue.clear()
+ EventMesh.publish("open_led_all")
+ self.AI_ASR_send_buf_len = 0
+ self.VC_Speech_End()
+ self.websocket_deconnect_VC()
+ self.AI_VC_start()
+ self.play_new_voice_flag = 1
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC})
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ except Exception as e:
+ usys.print_exception(e)
+ pass
#语音留言
def play_new_voice(self,event = None,msg= None):
EventMesh.publish("publish_AI_btnInfo",{"func":self.play_new_voice_cb,"data":msg})
ringUrl = alarm_TTS_str["ringUrl"]
print("{} {} {}".format(AringTimes,alarmMode,shakeType))
if alarmMode == "ring": #只响铃
- if ringUrl != None:
- EventMesh.publish("play_new_voice",[ringUrl,1])
if ringUrl == None:
- base_sentence = "{}".format(name)
- if AringTimes == 0:
- AringTimes = 1
- repeat_sentence = (base_sentence + ",") * AringTimes # 重复5次并加逗号分隔
- final_sentence = repeat_sentence.rstrip(",")
+ ringUrl = "http://qipaiai-oss1.tos-cn-beijing.volces.com/qi_pai_ringtone/2025_11_07/774578468192129024default_ring.pcm"
+ if ringUrl != None:
+ EventMesh.publish("play_single_voice",[ringUrl,1])
+ # if ringUrl == None:
+ # base_sentence = "{}".format(name)
+ # if AringTimes == 0:
+ # AringTimes = 1
+ # repeat_sentence = (base_sentence + ",") * AringTimes # 重复5次并加逗号分隔
+ # final_sentence = repeat_sentence.rstrip(",")
- EventMesh.publish("play_tts",[final_sentence,1]) #播放tts闹钟文本内容
+ # EventMesh.publish("play_tts",[final_sentence,1]) #播放tts闹钟文本内容
elif alarmMode == "shake": #只振动
if shakeType == "short":
EventMesh.publish("set_motor_time",[1,1,5,8,4])#设置马达参数
EventMesh.publish("play_tts",[final_sentence,1]) #播放tts闹钟文本内容
elif alarmMode == "both": #响铃加振动
+ if ringUrl == None:
+ ringUrl = "http://qipaiai-oss1.tos-cn-beijing.volces.com/qi_pai_ringtone/2025_11_07/774578468192129024default_ring.pcm"
if ringUrl != None:
- EventMesh.publish("play_new_voice",[ringUrl,1])
+ EventMesh.publish("play_single_voice",[ringUrl,1])
pass
if shakeType == "short":
EventMesh.publish("set_motor_time",[1,1,5,8,4])#设置马达参数
elif shakeType == "long":
EventMesh.publish("set_motor_time",[1,1,5*2,8,4])#设置马达参数
- if ringUrl == None:
- base_sentence = "{}".format(name)
- if AringTimes == 0:
- AringTimes = 1
- repeat_sentence = (base_sentence + ",") * AringTimes # 重复5次并加逗号分隔
- final_sentence = repeat_sentence.rstrip(",")
+ # if ringUrl == None:
+ # base_sentence = "{}".format(name)
+ # if AringTimes == 0:
+ # AringTimes = 1
+ # repeat_sentence = (base_sentence + ",") * AringTimes # 重复5次并加逗号分隔
+ # final_sentence = repeat_sentence.rstrip(",")
- EventMesh.publish("play_tts",[final_sentence,1]) #播放tts闹钟文本内容
+ # EventMesh.publish("play_tts",[final_sentence,1]) #播放tts闹钟文本内容
except Exception as e:
usys.print_exception(e)