| | |
| | | |
| | | #define MOUNT_POINT "/sdcard" |
| | | #define SDCARD_PATH_MAX_LEN 256 |
| | | #define SDCARD_MP3_PLAYLIST_MAX 16 |
| | | |
| | | typedef struct { |
| | | char path[SDCARD_PATH_MAX_LEN]; |
| | | float speed; |
| | | int repeat; |
| | | bool power_off_after; |
| | | } sdcard_mp3_playlist_item_t; |
| | | |
| | | #define SCREEN_MIRROR_X false |
| | | #define SCREEN_MIRROR_Y false |
| | |
| | | #define BOARD_CUSTOM_WAKE_WORD_THRESHOLD_PERCENT 20 |
| | | |
| | | /** |
| | | * @brief 板级 MultiNet 离线命令词配置。 |
| | | * |
| | | * @brief 板级 MultiNet 离线命令词。只留没网也必须能用的入口: |
| | | * 「切换模式」「模式切换」「复读机」「开始复读」「退出复读」「退出跟读」「我们聊天吧」「我们来聊天吧」。 |
| | | * 复读/跟读播音频时不上行 ASR,退出口令必须能离线识别。其它 App 的进入词仍只在 Server apps.json。 |
| | | */ |
| | | #define OFFLINE_COMMAND_WORD "切换模式" |
| | | #define OFFLINE_COMMAND_WORD_PINYIN "qie huan mo shi" |
| | | #define OFFLINE_COMMAND_WORD_ALT "模式切换" |
| | | #define OFFLINE_COMMAND_WORD_ALT_PINYIN "mo shi qie huan" |
| | | #define OFFLINE_REPEATER_WORD "复读机" |
| | | #define OFFLINE_REPEATER_WORD_PINYIN "fu du ji" |
| | | #define OFFLINE_START_REPEATER_WORD "开始复读" |
| | | #define OFFLINE_START_REPEATER_WORD_PINYIN "kai shi fu du" |
| | | #define OFFLINE_EXIT_REPEATER_WORD "退出复读" |
| | | #define OFFLINE_EXIT_REPEATER_WORD_PINYIN "tui chu fu du" |
| | | #define OFFLINE_EXIT_SHADOWING_WORD "退出跟读" |
| | | #define OFFLINE_EXIT_SHADOWING_WORD_PINYIN "tui chu gen du" |
| | | #define OFFLINE_CHAT_WORD "我们聊天吧" |
| | | #define OFFLINE_CHAT_WORD_PINYIN "wo men liao tian ba" |
| | | #define OFFLINE_CHAT_WORD_FULL "我们来聊天吧" |
| | | #define OFFLINE_CHAT_WORD_FULL_PINYIN "wo men lai liao tian ba" |
| | | |
| | | void Board_Offline_Command_Callback(void); |
| | | bool Board_Handle_Offline_Command(const char *command); |
| | | bool Board_Is_Mode_Switch_Command(const char *command); |
| | | bool Board_Is_Chat_Return_Command(const char *command); |
| | | bool Board_Is_App_Launch_Command(const char *command); |
| | | |
| | | /** |
| | | * @brief 使用 SNTP 网络时间同步 DS3231 RTC。 |
| | |
| | | */ |
| | | esp_err_t SDCard_Play_MP3(char *mp3_name); |
| | | |
| | | #define SDCARD_MP3_SPEED_MIN 0.5f |
| | | #define SDCARD_MP3_SPEED_MAX 2.0f |
| | | #define SDCARD_MP3_SPEED_DEFAULT 1.0f |
| | | |
| | | /** |
| | | * @brief 将播放倍率夹紧到 [0.5, 2.0];NaN/非法则回退 1.0。 |
| | | * |
| | | * 实现是先按 speed 做线性时域拉伸,再用文件原始采样率转到喇叭采样率。 |
| | | * 0.5~2.0 内任意浮点均可;非 1.0 会改变音调。不要把 sample_rate*speed 交给 AE 变采样。 |
| | | */ |
| | | float SDCard_Clamp_MP3_Speed(float speed); |
| | | |
| | | /** |
| | | * @brief 按文件名和速度启动 SD 卡 MP3 播放。 |
| | | * |
| | | * speed 仅支持 0.5、0.75、1.0、1.25、1.5、2.0。非 1.0 速度通过重采样实现,会改变音调。 |
| | | * speed 取值 [0.5, 2.0],缺省 1.0;超出范围会被夹紧。非 1.0 通过重采样实现,会改变音调。 |
| | | * |
| | | * @param mp3_name MP3 文件名或匹配关键字,不能为空。 |
| | | * @param speed 播放速度倍率。 |
| | | * @return ESP_OK 表示播放任务已成功启动;ESP_ERR_INVALID_ARG 表示速度或文件名非法。 |
| | | * @return ESP_OK 表示播放任务已成功启动;ESP_ERR_INVALID_ARG 表示文件名非法。 |
| | | */ |
| | | esp_err_t SDCard_Play_MP3_With_Speed(char *mp3_name, float speed); |
| | | esp_err_t SDCard_Play_MP3_With_Speed_Repeat(char *mp3_name, float speed, int repeat, bool power_off_after); |
| | |
| | | /** |
| | | * @brief 按完整路径和速度启动 MP3 文件播放。 |
| | | * |
| | | * speed 仅支持 0.5、0.75、1.0、1.25、1.5、2.0。非 1.0 速度通过重采样实现,会改变音调。 |
| | | * speed 取值 [0.5, 2.0],缺省 1.0;超出范围会被夹紧。非 1.0 通过重采样实现,会改变音调。 |
| | | * |
| | | * @param path MP3 文件完整路径,不能为空。 |
| | | * @param speed 播放速度倍率。 |
| | | * @return ESP_OK 表示播放任务已成功启动;ESP_ERR_INVALID_ARG 表示路径或速度非法。 |
| | | * @return ESP_OK 表示播放任务已成功启动;ESP_ERR_INVALID_ARG 表示路径非法。 |
| | | */ |
| | | esp_err_t SDCard_Play_MP3_File_With_Speed(const char *path, float speed); |
| | | esp_err_t SDCard_Play_MP3_File_With_Speed_Repeat(const char *path, float speed, int repeat, bool power_off_after); |
| | | bool SDCard_Resolve_MP3_Path(const char *mp3_name, char *path, size_t path_size); |
| | | esp_err_t SDCard_Play_MP3_File_Playlist(const sdcard_mp3_playlist_item_t *items, int count); |
| | | int SDCard_Get_Repeat_Left(void); |
| | | esp_err_t SDCard_Map_Business_Path(const char *business_path, char *sd_path, size_t sd_path_size); |
| | | esp_err_t SDCard_Ensure_Business_Dir(const char *business_path); |
| | | esp_err_t SDCard_Prepare_Business_File(const char *business_path, |
| | | char *final_path, |
| | | size_t final_path_size, |
| | |
| | | void Board_Acquire_Sleep_Inhibit(void); |
| | | void Board_Release_Sleep_Inhibit(void); |
| | | bool Board_Is_Voice_Session_Active(void); |
| | | bool Board_Is_Audio_Busy(void); |
| | | void Board_Show_JPG(const char *jpg_name); |
| | | void Board_Show_Black_Screen(void); |
| | | void Board_Show_Alert(const char *status, const char *message, const char *emotion); |