From: azao <821478748@qq.com> Date: Fri, 7 Nov 2025 10:23:31 +0000 (+0800) Subject: 添加默认铃声 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=5e448f1be543432541a773c12c28f9904a16f174;p=mirrors%2FASR1603_G5.git 添加默认铃声 语音留言回复功能添加 日程提醒按模板修改 --- diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py index 0bf8e01c..bc85cba6 100644 --- a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py +++ b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py @@ -2511,6 +2511,7 @@ class AI_VC(Abstract): 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) @@ -2523,8 +2524,13 @@ class AI_VC(Abstract): 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 #留言定时器计数 @@ -2889,8 +2895,9 @@ class AI_VC(Abstract): 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 @@ -3161,7 +3168,7 @@ class AI_VC(Abstract): 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 ="开启会议纪要,正在录音" @@ -3357,6 +3364,8 @@ class AI_VC(Abstract): 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() @@ -4053,18 +4062,26 @@ class AI_VC(Abstract): 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) @@ -4213,6 +4230,15 @@ class AI_VC(Abstract): 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") @@ -4293,19 +4319,31 @@ class AI_VC(Abstract): 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}) @@ -5562,7 +5600,35 @@ class AI_VC(Abstract): 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}) diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_alarm.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_alarm.py index 84b28d6a..e888e78b 100644 --- a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_alarm.py +++ b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_alarm.py @@ -306,16 +306,18 @@ class AI_alarm(Abstract): 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])#设置马达参数 @@ -332,8 +334,10 @@ class AI_alarm(Abstract): 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])#设置马达参数 @@ -341,14 +345,14 @@ class AI_alarm(Abstract): 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) diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/voice_record.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/voice_record.py index c0a5ddda..dc4ff2f9 100644 --- a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/voice_record.py +++ b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/voice_record.py @@ -211,7 +211,7 @@ class VOICE_RECORD(Abstract): #静默录音 EventMesh.publish("SEND_MEETAUDIO_TO_IOT",[read_buf,self.msgid_int,0]) break EventMesh.publish("SEND_MEETAUDIO_TO_IOT",[read_buf,self.msgid_int,self.start_voice_record_flag]) - elif self.voice_mode == 4: #会议纪要开始 + elif self.voice_mode == 4: #AI翻译开始 get_sos_flag = EventMesh.publish("get_sos_flag") if get_sos_flag != 0: print("打电话退出AI翻译")