电子学生证·播放MP3

时间:2025-03-29 20:38:29
  • static char topic[128] = {0};
  • static char imei[16] = {0};
  • int chat_audio_play_callback(char *p_data, int len, enum_aud_player_state state)
  • {
  • if (state == AUD_PLAYER_START)
  • {
  • sw_usb_debug_trace("chat_audio_play_callback play start\r\n");
  • }
  • else if (state == AUD_PLAYER_MOREDATA)
  • {
  • sw_usb_debug_trace("chat_audio_play_callback play stream\r\n");
  • }
  • else if (state == AUD_PLAYER_FINISHED)
  • {
  • sw_usb_debug_trace("chat_audio_play_callback play stop\r\n");
  • if (sw_fs_check(QUESTION_FILE) == 0)
  • {
  • sw_fs_remove(QUESTION_FILE);
  • }
  • }
  • else
  • {
  • sw_usb_debug_trace("chat_audio_play_callback state = %d, len=%d\r\n", state, len);
  • }
  • return 0;
  • }
  • static s32 chat_download_audio(char *buffer, int size, int nitems)
  • {
  • static int audio = 0;
  • static int length = 0;
  • if (audio == 0 || length == 0)
  • {
  • length = 0;
  • if (sw_fs_check(QUESTION_FILE) == 0)
  • {
  • sw_fs_remove(QUESTION_FILE);
  • }
  • if (sw_fs_check(ANSWER_FILE) == 0)
  • sw_fs_remove(ANSWER_FILE);
  • // sw_sleep(100);
  • audio = sw_fopen(ANSWER_FILE, "wb+");
  • }
  • sw_fwrite(buffer, 1, size, audio);
  • length += size;
  • sw_usb_debug_trace("buffer size=%d, nitems=%d, length=%d\r\n", size, nitems, length);
  • if (length >= nitems)
  • {
  • sw_fclose(audio);
  • sw_sleep(30);
  • audio = 0;
  • length = 0;
  • sw_set_volume(10);
  • if (sw_fs_check(ANSWER_FILE) == 0)
  • {
  • // if (getFileSize(ANSWER_FILE) > 0)
  • // {
  • // sw_play_file_stop();
  • sw_play_file_init(chat_audio_play_callback);
  • sw_play_file_start(0, ANSWER_FILE);
  • // }
  • }
  • }
  • return 0;
  • }
  • void aigc_download(char *url, response_cb callback)
  • {
  • httpCertT cert = {0};
  • int ret = sw_http(SW_HTTP_CLIENT_REQUEST_GET, url, cert, NULL, NULL, 30, NULL, callback);
  • sw_usb_debug_trace("download: %s, code=%d\r\n", url, ret);
  • }
  • static void mqtt_chat_subscribe_callback(MQTTMsgDataT *msg)
  • {
  • sw_usb_debug_trace("****** audio ******\n");
  • sw_usb_debug_trace("MQTT ID:%d, len:%d,msg:%s\n", msg->message->id, msg->message->payloadlen, msg->message->payload);
  • char *key = strtok(msg->message->payload, "|");
  • char *value = strtok(NULL, "|");
  • sw_usb_debug_trace("key: %s, value: %s\n", key, value);
  • if (sw_strcmp(key, "question") == 0)
  • {
  • lv_label_set_text_fmt(guider_ui.chat_question_label, "%s: %s", "Q", value);
  • // sw_usb_debug_trace("key: %s, value: %s\n", value);
  • }
  • if (sw_strcmp(key, "answer") == 0)
  • {
  • lv_label_set_text_fmt(guider_ui.chat_answer_label, "%s: %s", "A", value);
  • }
  • if (sw_strcmp(key, "audio") == 0)
  • {
  • aigc_download(value, (response_cb)chat_download_audio);
  • }
  • if (sw_strcmp(key, "warning") == 0)
  • {
  • lv_label_set_text(guider_ui.chat_question_label, "Warning");
  • aigc_download(value, (response_cb)chat_download_audio);
  • }
  • if (sw_strcmp(key, "exception") == 0)
  • {
  • lv_label_set_text(guider_ui.chat_question_label, "Exception");
  • lv_label_set_text(guider_ui.chat_answer_label, value);
  • }
  • }
  • void mqtt_chat_subscribe_session(char *session)
  • {
  • int ret;
  • /*imei read from nvm*/
  • // km_sdk_device_get_imei(clientID);
  • km_sdk_device_get_imei(imei);
  • // if (sw_mqtt_is_connect())
  • // {
  • // sw_mqtt_disconnect();
  • // }
  • if (!sw_mqtt_is_connect())
  • {
  • ret = sw_mqtt_client_init(4, imei, MQTT_USERNAME, MQTT_PASSWORD, 60, 0, NULL, 10000); // init
  • // sw_usb_debug_trace("sw_mqtt_client_init ret:%d\n", ret);
  • ret = sw_mqtt_connect_server(NULL, MQTT_HOSTNAME, MQTT_PORT); // connect server
  • sw_usb_debug_trace("sw_mqtt_connect_server ret:%d\n", ret);
  • sw_sleep(10); // get mqtt thread
  • }
  • if (sw_mqtt_is_connect())
  • {
  • sw_sprintf(topic, "%s/%s/%s", APP_ID, imei, session);
  • ret = sw_mqtt_subscribe(topic, 2, mqtt_chat_subscribe_callback); // subscribe1
  • sw_usb_debug_trace("topic subscribe:%s - %s\n", topic, ret);
  • }
  • }