mirror of
https://github.com/espressif/esp-sr.git
synced 2025-09-15 15:28:44 +08:00
feat(esp32): Update ESP32 lib and APIs
This commit is contained in:
parent
a6074009a2
commit
af859c9012
@ -1,8 +1,9 @@
|
||||
//Generated by mkmodel
|
||||
//Generated by mkmodel_py
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
#include "dl_lib_matrixq8.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_customized_word_wn5;
|
||||
extern const model_coeff_getter_t get_coeff_customized_word_wn5;
|
||||
@ -246,6 +246,28 @@ void dl_dilation_layerq8_mc_steps(dl_convq8_queue_t **in, dl_convq8_queue_t **ou
|
||||
|
||||
void dl_convq8_queue_mc_bzero(dl_convq8_queue_t **cqm, int nch);
|
||||
|
||||
|
||||
|
||||
dl_convq8_queue_t *dl_convq8_queue_alloc_from_psram(int n, int c);
|
||||
|
||||
qtp_t *dl_dilation_layerq16_8(dl_convq_queue_t *in, dl_convq8_queue_t *out, int rate, int size,
|
||||
dl_matrix2dq_t* filter_kernel, dl_matrix2dq_t* filter_bias,
|
||||
dl_matrix2dq_t* gate_kernel, dl_matrix2dq_t* gate_bias, int prenum);
|
||||
|
||||
|
||||
qtp_t *dl_dilation_layerq8(dl_convq8_queue_t *in, dl_convq8_queue_t *out, int rate, int size,
|
||||
dl_matrix2dq8_t* filter_kernel, dl_matrix2dq_t* filter_bias,
|
||||
dl_matrix2dq8_t* gate_kernel, dl_matrix2dq_t* gate_bias, int prenum);
|
||||
|
||||
dl_matrix2dq8_t *dl_convq8_lstm_layer(const dl_convq8_queue_t *in, dl_convq8_queue_t *out, dl_matrix2dq8_t *state_c,
|
||||
dl_matrix2dq8_t *state_h, const dl_matrix2dq8_t *in_weight, const dl_matrix2dq8_t *h_weight,
|
||||
const dl_matrix2dq_t *bias, int prenum);
|
||||
|
||||
qtp_t *dl_atrous_conv1dq8_16_s3(dl_convq8_queue_t *in, dl_convq_queue_t *out, int rate, int size,
|
||||
dl_matrix2dq8_t* kernel, dl_matrix2dq_t* bias, int prenum);
|
||||
|
||||
void print_convq8(dl_convq8_queue_t *cq, int offset);
|
||||
void print_convq(dl_convq_queue_t *cq, int offset);
|
||||
|
||||
void lstmq8_free(void);
|
||||
#endif
|
||||
101
include/esp32/esp_afe_config.h
Normal file
101
include/esp32/esp_afe_config.h
Normal file
@ -0,0 +1,101 @@
|
||||
#pragma once
|
||||
#include "stdint.h"
|
||||
#include "esp_wn_iface.h"
|
||||
#include "esp_wn_models.h"
|
||||
#include "esp_vad.h"
|
||||
|
||||
//AFE: Audio Front-End
|
||||
//SR: Speech Recognition
|
||||
//afe_sr/AFE_SR: the audio front-end for speech recognition
|
||||
|
||||
//Set AFE_SR mode
|
||||
typedef enum {
|
||||
SR_MODE_LOW_COST = 0,
|
||||
SR_MODE_HIGH_PERF = 1
|
||||
} afe_sr_mode_t;
|
||||
|
||||
typedef enum {
|
||||
AFE_MEMORY_ALLOC_MORE_INTERNAL = 1, // malloc with more internal ram
|
||||
AFE_MEMORY_ALLOC_INTERNAL_PSRAM_BALANCE = 2, // malloc with internal ram and psram in balance
|
||||
AFE_MEMORY_ALLOC_MORE_PSRAM = 3 // malloc with more psram
|
||||
} afe_memory_alloc_mode_t;
|
||||
|
||||
typedef enum {
|
||||
AFE_MN_PEAK_AGC_MODE_1 = -5, // The peak amplitude of audio fed to multinet is -5dB
|
||||
AFE_MN_PEAK_AGC_MODE_2 = -4, // The peak amplitude of audio fed to multinet is -4dB
|
||||
AFE_MN_PEAK_AGC_MODE_3 = -3, // The peak amplitude of audio fed to multinet is -3dB
|
||||
AFE_MN_PEAK_NO_AGC = 0, // There is no agc gain
|
||||
} afe_mn_peak_agc_mode_t;
|
||||
|
||||
typedef struct {
|
||||
int total_ch_num; // total channel num. It must be: total_ch_num = mic_num + ref_num
|
||||
int mic_num; // mic channel num
|
||||
int ref_num; // reference channel num
|
||||
} afe_pcm_config_t;
|
||||
|
||||
typedef struct {
|
||||
bool aec_init;
|
||||
bool se_init;
|
||||
bool vad_init;
|
||||
bool wakenet_init;
|
||||
bool voice_communication_init;
|
||||
bool voip_agc_init; // AGC swich for voice communication
|
||||
int voip_agc_gain; // AGC gain(dB) for voice communication
|
||||
vad_mode_t vad_mode; // The value can be: VAD_MODE_0, VAD_MODE_1, VAD_MODE_2, VAD_MODE_3, VAD_MODE_4
|
||||
char *wakenet_model_name; // The model name of wakenet
|
||||
det_mode_t wakenet_mode;
|
||||
afe_sr_mode_t afe_mode;
|
||||
int afe_perferred_core;
|
||||
int afe_perferred_priority;
|
||||
int afe_ringbuf_size;
|
||||
afe_memory_alloc_mode_t memory_alloc_mode;
|
||||
afe_mn_peak_agc_mode_t agc_mode; // The agc mode for ASR
|
||||
afe_pcm_config_t pcm_config; // Config the channel num of original data which is fed to the afe feed function.
|
||||
} afe_config_t;
|
||||
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32
|
||||
#define AFE_CONFIG_DEFAULT() { \
|
||||
.aec_init = true, \
|
||||
.se_init = true, \
|
||||
.vad_init = true, \
|
||||
.wakenet_init = true, \
|
||||
.voice_communication_init = false, \
|
||||
.voip_agc_init = false, \
|
||||
.voip_agc_gain = 15, \
|
||||
.vad_mode = VAD_MODE_3, \
|
||||
.wakenet_model_name = NULL, \
|
||||
.wakenet_mode = DET_MODE_90, \
|
||||
.afe_mode = SR_MODE_HIGH_PERF, \
|
||||
.afe_perferred_core = 0, \
|
||||
.afe_perferred_priority = 5, \
|
||||
.afe_ringbuf_size = 50, \
|
||||
.memory_alloc_mode = AFE_MEMORY_ALLOC_INTERNAL_PSRAM_BALANCE, \
|
||||
.agc_mode = AFE_MN_PEAK_AGC_MODE_2, \
|
||||
.pcm_config.total_ch_num = 2, \
|
||||
.pcm_config.mic_num = 1, \
|
||||
.pcm_config.ref_num = 1, \
|
||||
}
|
||||
#elif CONFIG_IDF_TARGET_ESP32S3
|
||||
#define AFE_CONFIG_DEFAULT() { \
|
||||
.aec_init = true, \
|
||||
.se_init = true, \
|
||||
.vad_init = true, \
|
||||
.wakenet_init = true, \
|
||||
.voice_communication_init = false, \
|
||||
.voip_agc_init = false, \
|
||||
.voip_agc_gain = 15, \
|
||||
.vad_mode = VAD_MODE_3, \
|
||||
.wakenet_model_name = NULL, \
|
||||
.wakenet_mode = DET_MODE_2CH_90, \
|
||||
.afe_mode = SR_MODE_LOW_COST, \
|
||||
.afe_perferred_core = 0, \
|
||||
.afe_perferred_priority = 5, \
|
||||
.afe_ringbuf_size = 50, \
|
||||
.memory_alloc_mode = AFE_MEMORY_ALLOC_MORE_PSRAM, \
|
||||
.agc_mode = AFE_MN_PEAK_AGC_MODE_2, \
|
||||
.pcm_config.total_ch_num = 3, \
|
||||
.pcm_config.mic_num = 2, \
|
||||
.pcm_config.ref_num = 1, \
|
||||
}
|
||||
#endif
|
||||
@ -1,7 +1,6 @@
|
||||
#pragma once
|
||||
#include "stdint.h"
|
||||
#include "esp_wn_iface.h"
|
||||
#include "esp_wn_models.h"
|
||||
#include "esp_afe_config.h"
|
||||
|
||||
//AFE: Audio Front-End
|
||||
//SR: Speech Recognition
|
||||
@ -10,88 +9,30 @@
|
||||
//Opaque AFE_SR data container
|
||||
typedef struct esp_afe_sr_data_t esp_afe_sr_data_t;
|
||||
|
||||
//Set AFE_SR mode
|
||||
typedef enum {
|
||||
SR_MODE_LOW_COST = 0,
|
||||
SR_MODE_HIGH_PERF = 1
|
||||
} afe_sr_mode_t;
|
||||
|
||||
// the output state of fetch function
|
||||
typedef enum {
|
||||
AFE_FETCH_CHANNEL_VERIFIED = -2, // wwe state: output channel is verified
|
||||
AFE_FETCH_NOISE = -1, // vad state: noise or silence
|
||||
AFE_FETCH_SPEECH = 0, // vad state: speech
|
||||
AFE_FETCH_WWE_DETECTED = 1 // wwe state: wake word is detected
|
||||
} afe_fetch_mode_t;
|
||||
|
||||
typedef enum {
|
||||
AFE_PSRAM_LOW_COST = 1,
|
||||
AFE_PSRAM_MEDIA_COST = 2,
|
||||
AFE_PSRAM_HIGH_COST = 3
|
||||
} afe_use_psram_mode_t;
|
||||
|
||||
typedef struct {
|
||||
bool aec_init;
|
||||
bool se_init;
|
||||
bool vad_init;
|
||||
bool wakenet_init;
|
||||
int vad_mode;
|
||||
const esp_wn_iface_t *wakenet_model;
|
||||
const model_coeff_getter_t *wakenet_coeff;
|
||||
det_mode_t wakenet_mode;
|
||||
afe_sr_mode_t afe_mode;
|
||||
int afe_perferred_core;
|
||||
int afe_perferred_priority;
|
||||
int afe_ringbuf_size;
|
||||
int alloc_from_psram;
|
||||
int agc_mode;
|
||||
} afe_config_t;
|
||||
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32
|
||||
#define AFE_CONFIG_DEFAULT() { \
|
||||
.aec_init = true, \
|
||||
.se_init = true, \
|
||||
.vad_init = true, \
|
||||
.wakenet_init = true, \
|
||||
.vad_mode = 3, \
|
||||
.wakenet_model = &WAKENET_MODEL, \
|
||||
.wakenet_coeff = &WAKENET_COEFF, \
|
||||
.wakenet_mode = DET_MODE_90, \
|
||||
.afe_mode = SR_MODE_HIGH_PERF, \
|
||||
.afe_perferred_core = 0, \
|
||||
.afe_perferred_priority = 5, \
|
||||
.afe_ringbuf_size = 50, \
|
||||
.alloc_from_psram = 1, \
|
||||
.agc_mode = 2, \
|
||||
}
|
||||
#elif CONFIG_IDF_TARGET_ESP32S3
|
||||
#define AFE_CONFIG_DEFAULT() { \
|
||||
.aec_init = true, \
|
||||
.se_init = true, \
|
||||
.vad_init = true, \
|
||||
.wakenet_init = true, \
|
||||
.vad_mode = 3, \
|
||||
.wakenet_model = &WAKENET_MODEL, \
|
||||
.wakenet_coeff = &WAKENET_COEFF, \
|
||||
.wakenet_mode = DET_MODE_2CH_90, \
|
||||
.afe_mode = SR_MODE_LOW_COST, \
|
||||
.afe_perferred_core = 0, \
|
||||
.afe_perferred_priority = 5, \
|
||||
.afe_ringbuf_size = 50, \
|
||||
.alloc_from_psram = AFE_PSRAM_MEDIA_COST, \
|
||||
.agc_mode = 2, \
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* @brief Function to initialze a AFE_SR instance with a specified mode
|
||||
*
|
||||
* @param mode The mode of AFE_SR
|
||||
* @param perferred_core The perferred core to be pinned.
|
||||
* If all task in AFE_SR can not run in real time by only one core, the another core would be used.
|
||||
* @returns Handle to the AFE_SR data
|
||||
* @brief The state of vad
|
||||
*/
|
||||
typedef esp_afe_sr_data_t* (*esp_afe_sr_iface_op_create_t)(afe_sr_mode_t mode, int perferred_cor);
|
||||
typedef enum
|
||||
{
|
||||
AFE_VAD_SILENCE = 0, // noise or silence
|
||||
AFE_VAD_SPEECH // speech
|
||||
} afe_vad_state_t;
|
||||
|
||||
/**
|
||||
* @brief The result of fetch function
|
||||
*/
|
||||
typedef struct afe_fetch_result_t
|
||||
{
|
||||
int16_t *data; // the data of audio.
|
||||
int data_size; // the size of data. The unit is byte.
|
||||
int wakeup_state; // the value is afe_wakeup_state_t
|
||||
int wake_word_index; // if the wake word is detected. It will store the wake word index which start from 1.
|
||||
int vad_state; // the value is afe_vad_state_t
|
||||
int trigger_channel_id; // the channel index of output
|
||||
int wake_word_length; // the length of wake word. It's unit is the number of samples.
|
||||
int ret_value; // the return state of fetch function
|
||||
void* reserved; // reserved for future use
|
||||
} afe_fetch_result_t;
|
||||
|
||||
/**
|
||||
* @brief Function to initialze a AFE_SR instance
|
||||
@ -113,31 +54,39 @@ typedef esp_afe_sr_data_t* (*esp_afe_sr_iface_op_create_from_config_t)(afe_confi
|
||||
typedef int (*esp_afe_sr_iface_op_get_samp_chunksize_t)(esp_afe_sr_data_t *afe);
|
||||
|
||||
/**
|
||||
* @brief Get the channel number of samples that need to be passed to the fetch function
|
||||
* @brief Get the total channel number which be config
|
||||
*
|
||||
* @param afe The AFE_SR object to query
|
||||
* @return The amount of samples to feed the fetch function
|
||||
* @param afe The AFE_SR object to query
|
||||
* @return The amount of total channels
|
||||
*/
|
||||
typedef int (*esp_afe_sr_iface_op_get_total_channel_num_t)(esp_afe_sr_data_t *afe);
|
||||
|
||||
/**
|
||||
* @brief Get the mic channel number which be config
|
||||
*
|
||||
* @param afe The AFE_SR object to query
|
||||
* @return The amount of mic channels
|
||||
*/
|
||||
typedef int (*esp_afe_sr_iface_op_get_channel_num_t)(esp_afe_sr_data_t *afe);
|
||||
|
||||
/**
|
||||
* @brief Get the sample rate of the samples to feed to the function
|
||||
*
|
||||
* @param afe The AFE_SR object to query
|
||||
* @return The sample rate, in hz
|
||||
* @param afe The AFE_SR object to query
|
||||
* @return The sample rate, in hz
|
||||
*/
|
||||
typedef int (*esp_afe_sr_iface_op_get_samp_rate_t)(esp_afe_sr_data_t *afe);
|
||||
|
||||
/**
|
||||
* @brief Feed samples of an audio stream to the AFE_SR
|
||||
*
|
||||
* @Warning The input data should be arranged in the format of [CH0_0, CH1_0, ..., CHN_0, CH0_1, CH1_1, ..., CHN_1, ...].
|
||||
* The last channel is reference signal or far-end signal.
|
||||
* @Warning The input data should be arranged in the format of channel interleaving.
|
||||
* The last channel is reference signal if it has reference data.
|
||||
*
|
||||
* @param afe The AFE_SR object to queryq
|
||||
* @param afe The AFE_SR object to query
|
||||
*
|
||||
* @param in The input microphone signal, only support signed 16-bit @ 16 KHZ. The frame size can be queried by the
|
||||
* `get_samp_chunksize`. The channel number can be queried `get_channel_num`.
|
||||
* `get_feed_chunksize`.
|
||||
* @return The size of input
|
||||
*/
|
||||
typedef int (*esp_afe_sr_iface_op_feed_t)(esp_afe_sr_data_t *afe, const int16_t* in);
|
||||
@ -148,23 +97,19 @@ typedef int (*esp_afe_sr_iface_op_feed_t)(esp_afe_sr_data_t *afe, const int16_t*
|
||||
* @Warning The output is single channel data, no matter how many channels the input is.
|
||||
*
|
||||
* @param afe The AFE_SR object to query
|
||||
* @param out The output enhanced signal. The frame size can be queried by the `get_samp_chunksize`.
|
||||
* @return The state of output, please refer to the definition of `afe_fetch_mode_t`
|
||||
* @return The result of output, please refer to the definition of `afe_fetch_result_t`. (The frame size of output audio can be queried by the `get_fetch_chunksize`.)
|
||||
*/
|
||||
typedef afe_fetch_mode_t (*esp_afe_sr_iface_op_fetch_t)(esp_afe_sr_data_t *afe, int16_t* out);
|
||||
typedef afe_fetch_result_t* (*esp_afe_sr_iface_op_fetch_t)(esp_afe_sr_data_t *afe);
|
||||
|
||||
/**
|
||||
* @brief Initial wakenet and wake words coefficient, or reset wakenet and wake words coefficient
|
||||
* when wakenet has been initialized.
|
||||
*
|
||||
* @param afe The AFE_SR object to query
|
||||
* @param wakenet The pointer of wakenet
|
||||
* @param model_coeff The coefficient of wake word model
|
||||
* @param afe The AFE_SR object to query
|
||||
* @param wakenet_word The wakenet word, should be DEFAULT_WAKE_WORD or EXTRA_WAKE_WORD
|
||||
* @return 0: fail, 1: success
|
||||
*/
|
||||
typedef int (*esp_afe_sr_iface_op_set_wakenet_t)(esp_afe_sr_data_t *afe,
|
||||
esp_wn_iface_t *wakenet,
|
||||
const model_coeff_getter_t *model_coeff);
|
||||
typedef int (*esp_afe_sr_iface_op_set_wakenet_t)(esp_afe_sr_data_t *afe, char* model_name);
|
||||
|
||||
/**
|
||||
* @brief Disable wakenet model.
|
||||
@ -226,12 +171,12 @@ typedef void (*esp_afe_sr_iface_op_destroy_t)(esp_afe_sr_data_t *afe);
|
||||
* This structure contains the functions used to do operations on a AFE_SR.
|
||||
*/
|
||||
typedef struct {
|
||||
esp_afe_sr_iface_op_create_t create;
|
||||
esp_afe_sr_iface_op_create_from_config_t create_from_config;
|
||||
esp_afe_sr_iface_op_feed_t feed;
|
||||
esp_afe_sr_iface_op_fetch_t fetch;
|
||||
esp_afe_sr_iface_op_get_samp_chunksize_t get_feed_chunksize;
|
||||
esp_afe_sr_iface_op_get_samp_chunksize_t get_fetch_chunksize;
|
||||
esp_afe_sr_iface_op_get_total_channel_num_t get_total_channel_num;
|
||||
esp_afe_sr_iface_op_get_channel_num_t get_channel_num;
|
||||
esp_afe_sr_iface_op_get_samp_rate_t get_samp_rate;
|
||||
esp_afe_sr_iface_op_set_wakenet_t set_wakenet;
|
||||
|
||||
@ -1,6 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#if defined CONFIG_USE_AFE
|
||||
#include "esp_afe_sr_iface.h"
|
||||
|
||||
extern const esp_afe_sr_iface_t esp_afe_sr_2mic;
|
||||
extern const esp_afe_sr_iface_t esp_afe_sr_1mic;
|
||||
|
||||
#if CONFIG_AFE_INTERFACE_V1
|
||||
extern const esp_afe_sr_iface_t esp_afe_sr_v1;
|
||||
extern const esp_afe_sr_iface_t esp_afe_voip_v1;
|
||||
#define ESP_AFE_SR_HANDLE esp_afe_sr_v1
|
||||
#define ESP_AFE_VOIP_HANDLE esp_afe_voip_v1
|
||||
|
||||
#else
|
||||
#error No valid afe selected.
|
||||
#endif
|
||||
|
||||
|
||||
#else
|
||||
|
||||
|
||||
#include "esp_afe_sr_iface.h"
|
||||
extern const esp_afe_sr_iface_t esp_afe_sr_v1;
|
||||
extern const esp_afe_sr_iface_t esp_afe_voip_v1;
|
||||
#define ESP_AFE_SR_HANDLE esp_afe_sr_v1
|
||||
#define ESP_AFE_VOIP_HANDLE esp_afe_voip_v1
|
||||
|
||||
#endif
|
||||
@ -14,10 +14,6 @@
|
||||
#ifndef _ESP_AGC_H_
|
||||
#define _ESP_AGC_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
////all positive value is valid, negective is error
|
||||
typedef enum {
|
||||
ESP_AGC_SUCCESS = 0, ////success
|
||||
@ -32,8 +28,4 @@ void set_agc_config(void *agc_handle, int gain_dB, int limiter_enable, int targe
|
||||
int esp_agc_process(void *agc_handle, short *in_pcm, short *out_pcm, int frame_size, int sample_rate);
|
||||
void esp_agc_close(void *agc_handle);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _ESP_AGC_H_
|
||||
|
||||
@ -1,90 +0,0 @@
|
||||
// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License
|
||||
#ifndef _ESP_MAP_H_
|
||||
#define _ESP_MAP_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define MAP_SAMPLE_RATE 16000 // Supports 16kHz only
|
||||
#define MAP_FRAME_SIZE 16 // Supports 16ms only
|
||||
#define MAP_MIC_DISTANCE 50 // According to physical design of mic-array
|
||||
#define MAP_AEC_ON true
|
||||
#define MAP_AEC_OFF false
|
||||
#define MAP_AEC_FILTER_LENGTH 1200 // Number of samples of echo to cancel
|
||||
|
||||
/**
|
||||
* @brief Sets mic-array type, currently 2-mic line array and 3-mic circular array
|
||||
* are supported.
|
||||
*/
|
||||
typedef enum {
|
||||
TWO_MIC_LINE = 0,
|
||||
THREE_MIC_CIRCLE = 1
|
||||
} map_mic_array_type_t;
|
||||
|
||||
typedef void* mic_array_processor_t;
|
||||
|
||||
/**
|
||||
* @brief Creates an instance to the MAP structure.
|
||||
*
|
||||
* @param sample_rate The sampling frequency (Hz) must be 16000.
|
||||
*
|
||||
* @param frame_size The length of the audio processing must be 16ms.
|
||||
*
|
||||
* @param array_type '0' for 2-mic line array and '1' for 3-mic circular array.
|
||||
*
|
||||
* @param mic_distance The distance between neiboring microphones in mm.
|
||||
*
|
||||
* @param aec_on Decides whether to turn on AEC.
|
||||
*
|
||||
* @param filter_length Number of samples of echo to cancel, effective when AEC is on.
|
||||
*
|
||||
* @return
|
||||
* - NULL: Create failed
|
||||
* - Others: An instance of MAP
|
||||
*/
|
||||
mic_array_processor_t map_create(int fs, int frame_size, int array_type, float mic_distance, bool aec_on, int filter_length);
|
||||
|
||||
/**
|
||||
* @brief Performs mic array processing for one frame.
|
||||
*
|
||||
* @param inst The instance of MAP.
|
||||
*
|
||||
* @param in An array of 16-bit signed audio samples from mic.
|
||||
*
|
||||
* @param far_end An array of 16-bit signed audio samples sent to the speaker, can be none when AEC is turned off.
|
||||
*
|
||||
* @param dsp_out Returns enhanced signal.
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*/
|
||||
void map_process(mic_array_processor_t st, int16_t *in, int16_t *far_end, int16_t *dsp_out);
|
||||
|
||||
/**
|
||||
* @brief Free the MAP instance
|
||||
*
|
||||
* @param inst The instance of MAP.
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*/
|
||||
void map_destory(mic_array_processor_t st);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@ -12,13 +12,6 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License
|
||||
|
||||
#ifndef _ESP_MASE_H_
|
||||
#define _ESP_MASE_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define MASE_SAMPLE_RATE 16000 // Supports 16kHz only
|
||||
#define MASE_FRAME_SIZE 16 // Supports 16ms only
|
||||
#define MASE_MIC_DISTANCE 65 // According to physical design of mic-array
|
||||
@ -85,10 +78,4 @@ void mase_process(mase_handle_t st, int16_t *in, int16_t *dsp_out);
|
||||
* @return None
|
||||
*
|
||||
*/
|
||||
void mase_destory(mase_handle_t st);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
void mase_destory(mase_handle_t st);
|
||||
@ -1,21 +1,53 @@
|
||||
#pragma once
|
||||
#include "stdint.h"
|
||||
// #include "esp_err.h"
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "esp_wn_iface.h"
|
||||
// //Opaque model data container
|
||||
// typedef struct model_iface_data_t model_iface_data_t;
|
||||
|
||||
#define ESP_MN_RESULT_MAX_NUM 5
|
||||
#define ESP_MN_MAX_PHRASE_NUM 200
|
||||
#define ESP_MN_MAX_PHRASE_LEN 63
|
||||
#define ESP_MN_MIN_PHRASE_LEN 2
|
||||
|
||||
typedef enum {
|
||||
ESP_MN_STATE_DETECTING = 0, // detecting
|
||||
ESP_MN_STATE_DETECTED = 1, // detected
|
||||
ESP_MN_STATE_TIMEOUT = 2, // time out
|
||||
} esp_mn_state_t;
|
||||
|
||||
// Return all possible recognition results
|
||||
typedef struct{
|
||||
esp_mn_state_t state;
|
||||
int num; // The number of phrase in list, num<=5. When num=0, no phrase is recognized.
|
||||
int command_id[ESP_MN_RESULT_MAX_NUM]; // The list of command id.
|
||||
int phrase_id[ESP_MN_RESULT_MAX_NUM]; // The list of phrase id.
|
||||
float prob[ESP_MN_RESULT_MAX_NUM]; // The list of probability.
|
||||
} esp_mn_results_t;
|
||||
|
||||
typedef struct{
|
||||
int16_t num; // The number of error phrases, which can not added into model
|
||||
int16_t phrase_idx[ESP_MN_MAX_PHRASE_NUM]; // The error phrase index in singly linked list.
|
||||
} esp_mn_error_t;
|
||||
|
||||
typedef struct {
|
||||
char phoneme_string[ESP_MN_MAX_PHRASE_LEN + 1]; // phoneme string
|
||||
int16_t command_id; // the command id
|
||||
float threshold; // trigger threshold, default: 0
|
||||
int16_t *wave; // prompt wave data of the phrase
|
||||
} esp_mn_phrase_t;
|
||||
|
||||
typedef struct _mn_node_ {
|
||||
esp_mn_phrase_t *phrase;
|
||||
struct _mn_node_ *next;
|
||||
} esp_mn_node_t;
|
||||
|
||||
/**
|
||||
* @brief Initialze a model instance with specified model coefficient.
|
||||
* @brief Initialze a model instance with specified model name.
|
||||
*
|
||||
* @param model_name The wakenet model name.
|
||||
* @param duration The duration (ms) to trigger the timeout
|
||||
*
|
||||
* @param coeff The wakenet model coefficient.
|
||||
* @param coeff The wakenet model coefficient.
|
||||
* @parm sample_length Audio length for speech recognition, in ms.
|
||||
* @returns Handle to the model data.
|
||||
*/
|
||||
typedef model_iface_data_t* (*esp_mn_iface_op_create_t)(const model_coeff_getter_t *coeff, int sample_length);
|
||||
|
||||
typedef model_iface_data_t* (*esp_mn_iface_op_create_t)(const char *model_name, int duration);
|
||||
|
||||
/**
|
||||
* @brief Callback function type to fetch the amount of samples that need to be passed to the detect function
|
||||
@ -43,24 +75,6 @@ typedef int (*esp_mn_iface_op_get_samp_chunknum_t)(model_iface_data_t *model);
|
||||
* @param det_treshold The threshold to trigger speech commands, the range of det_threshold is 0.0~0.9999
|
||||
*/
|
||||
typedef int (*esp_mn_iface_op_set_det_threshold_t)(model_iface_data_t *model, float det_threshold);
|
||||
/**
|
||||
* @brief Set the detection threshold to manually abjust the probability
|
||||
*
|
||||
* @param model The model object to query
|
||||
* @param phrase_id The ID of speech command phrase
|
||||
* @param det_treshold The threshold to trigger speech command phrases
|
||||
*/
|
||||
typedef void (*esp_mn_iface_op_set_command_det_threshold_t)(model_iface_data_t *model, int phrase_id, float det_threshold);
|
||||
|
||||
/**
|
||||
* @brief Get the detection threshold by phrase ID
|
||||
*
|
||||
* @param model The model object to query
|
||||
* @param phrase_id The ID of speech command phrase
|
||||
*
|
||||
* @return The threshold of speech command phrases
|
||||
*/
|
||||
typedef float (*esp_mn_iface_op_get_command_det_threshold_t)(model_iface_data_t *model, int phrase_id);
|
||||
|
||||
/**
|
||||
* @brief Get the sample rate of the samples to feed to the detect function
|
||||
@ -76,10 +90,9 @@ typedef int (*esp_mn_iface_op_get_samp_rate_t)(model_iface_data_t *model);
|
||||
* @param model The model object to query.
|
||||
* @param samples An array of 16-bit signed audio samples. The array size used can be queried by the
|
||||
* get_samp_chunksize function.
|
||||
* @return The command id, return 0 if no command word is detected,
|
||||
* @return The state of multinet
|
||||
*/
|
||||
typedef int (*esp_mn_iface_op_detect_t)(model_iface_data_t *model, int16_t *samples);
|
||||
|
||||
typedef esp_mn_state_t (*esp_mn_iface_op_detect_t)(model_iface_data_t *model, int16_t *samples);
|
||||
|
||||
/**
|
||||
* @brief Destroy a speech commands recognition model
|
||||
@ -89,11 +102,30 @@ typedef int (*esp_mn_iface_op_detect_t)(model_iface_data_t *model, int16_t *samp
|
||||
typedef void (*esp_mn_iface_op_destroy_t)(model_iface_data_t *model);
|
||||
|
||||
/**
|
||||
* @brief Reset the speech commands recognition model
|
||||
* @brief Get recognition results
|
||||
*
|
||||
* @param model The Model object to query
|
||||
*
|
||||
* @return The current results.
|
||||
*/
|
||||
typedef esp_mn_results_t* (*esp_mn_iface_op_get_results_t)(model_iface_data_t *model);
|
||||
|
||||
/**
|
||||
* @brief Open the log print
|
||||
*
|
||||
* @param model_data The model object to query.
|
||||
*
|
||||
*/
|
||||
typedef void (*esp_mn_iface_op_reset_t)(model_iface_data_t *model_data, char *command_str, char *err_phrase_id);
|
||||
typedef void (*esp_mn_iface_op_open_log_t)(model_iface_data_t *model_data);
|
||||
|
||||
/**
|
||||
* @brief Set the speech commands by mn_command_root
|
||||
*
|
||||
* @param model_data The model object to query.
|
||||
* @param mn_command_root The speech commands link.
|
||||
* @return The error phrase id info.
|
||||
*/
|
||||
typedef esp_mn_error_t* (*esp_wn_iface_op_set_speech_commands)(model_iface_data_t *model_data, esp_mn_node_t *mn_command_root);
|
||||
|
||||
typedef struct {
|
||||
esp_mn_iface_op_create_t create;
|
||||
@ -101,9 +133,9 @@ typedef struct {
|
||||
esp_mn_iface_op_get_samp_chunksize_t get_samp_chunksize;
|
||||
esp_mn_iface_op_get_samp_chunknum_t get_samp_chunknum;
|
||||
esp_mn_iface_op_set_det_threshold_t set_det_threshold;
|
||||
esp_mn_iface_op_set_command_det_threshold_t set_command_det_threshold;
|
||||
esp_mn_iface_op_get_command_det_threshold_t get_command_det_threshold;
|
||||
esp_mn_iface_op_detect_t detect;
|
||||
esp_mn_iface_op_destroy_t destroy;
|
||||
esp_mn_iface_op_reset_t reset;
|
||||
esp_mn_iface_op_get_results_t get_results;
|
||||
esp_mn_iface_op_open_log_t open_log;
|
||||
esp_wn_iface_op_set_speech_commands set_speech_commands;
|
||||
} esp_mn_iface_t;
|
||||
|
||||
@ -3,55 +3,49 @@
|
||||
|
||||
//Contains declarations of all available speech recognion models. Pair this up with the right coefficients and you have a model that can recognize
|
||||
//a specific phrase or word.
|
||||
extern const esp_mn_iface_t esp_sr_multinet1_single_quantized_en;
|
||||
extern const esp_mn_iface_t esp_sr_multinet3_single_quantized_en;
|
||||
extern const esp_mn_iface_t esp_sr_multinet2_single_quantized_cn;
|
||||
extern const esp_mn_iface_t esp_sr_multinet3_single_quantized_cn;
|
||||
extern const esp_mn_iface_t esp_sr_multinet4_single_quantized_cn;
|
||||
extern const esp_mn_iface_t esp_sr_multinet3_continuous_quantized_cn;
|
||||
extern const esp_mn_iface_t esp_sr_multinet5_quantized;
|
||||
extern const esp_mn_iface_t esp_sr_multinet5_quantized8;
|
||||
|
||||
|
||||
|
||||
#define ESP_MN_PREFIX "mn"
|
||||
#define ESP_MN_ENGLISH "en"
|
||||
#define ESP_MN_CHINESE "cn"
|
||||
|
||||
/**
|
||||
* @brief Get the multinet handle from model name
|
||||
*
|
||||
* @param model_name The name of model
|
||||
* @returns The handle of multinet
|
||||
*/
|
||||
esp_mn_iface_t *esp_mn_handle_from_name(char *model_name);
|
||||
|
||||
/**
|
||||
* @brief Get the multinet language from model name
|
||||
*
|
||||
* @param model_name The name of model
|
||||
* @returns The language of multinet
|
||||
*/
|
||||
char *esp_mn_language_from_name(char *model_name);
|
||||
|
||||
/*
|
||||
Configure wake word to use based on what's selected in menuconfig.
|
||||
*/
|
||||
#if defined CONFIG_USE_MULTINET
|
||||
#ifdef CONFIG_SR_MN_EN_MULTINET1_SINGLE_RECOGNITION
|
||||
#include "multinet1_en.h"
|
||||
#define MULTINET_MODEL esp_sr_multinet1_single_quantized_en
|
||||
#define MULTINET_COEFF get_coeff_multinet1_en
|
||||
#elif CONFIG_SR_MN_EN_MULTINET3_SINGLE_RECOGNITION
|
||||
#include "multinet3_en.h"
|
||||
#define MULTINET_MODEL esp_sr_multinet3_single_quantized_en
|
||||
#define MULTINET_COEFF get_coeff_multinet3_en
|
||||
#elif CONFIG_SR_MN_CN_MULTINET2_SINGLE_RECOGNITION
|
||||
#include "multinet2_ch.h"
|
||||
#define MULTINET_MODEL esp_sr_multinet2_single_quantized_cn
|
||||
#define MULTINET_COEFF get_coeff_multinet2_ch
|
||||
#elif CONFIG_SR_MN_CN_MULTINET2_CONTINUOUS_RECOGNITION
|
||||
|
||||
#elif CONFIG_SR_MN_CN_MULTINET3_SINGLE_RECOGNITION
|
||||
#define MULTINET_MODEL esp_sr_multinet3_single_quantized_cn
|
||||
#define MULTINET_COEFF "mn3cn"
|
||||
#elif CONFIG_SR_MN_CN_MULTINET4_SINGLE_RECOGNITION
|
||||
#define MULTINET_MODEL esp_sr_multinet4_single_quantized_cn
|
||||
#define MULTINET_COEFF "mn4cn"
|
||||
#elif CONFIG_SR_MN_CN_MULTINET3_CONTINUOUS_RECOGNITION
|
||||
#define MULTINET_MODEL esp_sr_multinet3_continuous_quantized_cn
|
||||
#define MULTINET_COEFF "mn3cn"
|
||||
#elif CONFIG_SR_MN_EN_MULTINET5_SINGLE_RECOGNITION
|
||||
#define MULTINET_MODEL esp_sr_multinet5_quantized
|
||||
#define MULTINET_COEFF "mn5en"
|
||||
#elif CONFIG_SR_MN_EN_MULTINET5_SINGLE_RECOGNITION_QUANT8
|
||||
#define MULTINET_MODEL esp_sr_multinet5_quantized8
|
||||
#define MULTINET_COEFF "mn5q8en"
|
||||
#if CONFIG_SR_MN_CN_MULTINET2_SINGLE_RECOGNITION
|
||||
#include "multinet2_ch.h"
|
||||
#define MULTINET_COEFF get_coeff_multinet2_ch
|
||||
#define MULTINET_MODEL_NAME "mn2_cn"
|
||||
|
||||
#else
|
||||
#error No valid wake word selected.
|
||||
#define MULTINET_COEFF "COEFF_NULL"
|
||||
#define MULTINET_MODEL_NAME "NULL"
|
||||
#endif
|
||||
|
||||
#else
|
||||
#define MULTINET_MODEL "NULL"
|
||||
#define MULTINET_COEFF "NULL"
|
||||
#define MULTINET_COEFF "COEFF_NULL"
|
||||
#define MULTINET_MODEL_NAME "NULL"
|
||||
#endif
|
||||
|
||||
/* example
|
||||
|
||||
static const esp_mn_iface_t *multinet = &MULTINET_MODEL;
|
||||
|
||||
158
include/esp32/esp_mn_speech_commands.h
Normal file
158
include/esp32/esp_mn_speech_commands.h
Normal file
@ -0,0 +1,158 @@
|
||||
// Copyright 2015-2022 Espressif Systems (Shanghai) PTE LTD
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#pragma once
|
||||
#include "esp_err.h"
|
||||
#include "esp_mn_iface.h"
|
||||
|
||||
/*
|
||||
esp_mn_node_t is a singly linked list which is used to manage speech commands.
|
||||
It is easy to add one speech command into linked list and remove one speech command from linked list.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief Initialze the speech commands singly linked list.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK Success
|
||||
* - ESP_ERR_NO_MEM No memory
|
||||
* - ESP_ERR_INVALID_STATE The Speech Commands link has been initialized
|
||||
*/
|
||||
esp_err_t esp_mn_commands_alloc(void);
|
||||
|
||||
/**
|
||||
* @brief Clear the speech commands linked list and free root node.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK Success
|
||||
* - ESP_ERR_INVALID_STATE The Speech Commands link has not been initialized
|
||||
*/
|
||||
esp_err_t esp_mn_commands_free(void);
|
||||
|
||||
/**
|
||||
* @brief Add one speech commands with phoneme string and command ID
|
||||
*
|
||||
* @param command_id The command ID
|
||||
* @param phoneme_string The phoneme string of the speech commands
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK Success
|
||||
* - ESP_ERR_INVALID_STATE Fail
|
||||
*/
|
||||
esp_err_t esp_mn_commands_add(int command_id, char *phoneme_string);
|
||||
|
||||
/**
|
||||
* @brief Modify one speech commands with new phoneme string
|
||||
*
|
||||
* @param old_phoneme_string The old phoneme string of the speech commands
|
||||
* @param new_phoneme_string The new phoneme string of the speech commands
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK Success
|
||||
* - ESP_ERR_INVALID_STATE Fail
|
||||
*/
|
||||
esp_err_t esp_mn_commands_modify(char *old_phoneme_string, char *new_phoneme_string);
|
||||
|
||||
/**
|
||||
* @brief Remove one speech commands by phoneme string
|
||||
*
|
||||
* @param phoneme_string The phoneme string of the speech commands
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK Success
|
||||
* - ESP_ERR_INVALID_STATE Fail
|
||||
*/
|
||||
esp_err_t esp_mn_commands_remove(char *phoneme_string);
|
||||
|
||||
/**
|
||||
* @brief Clear all speech commands in linked list
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK Success
|
||||
* - ESP_ERR_INVALID_STATE Fail
|
||||
*/
|
||||
esp_err_t esp_mn_commands_clear(void);
|
||||
|
||||
/**
|
||||
* @brief Get phrase from index, which is the depth from the phrase node to root node
|
||||
*
|
||||
* @Warning: The first phrase index is 0, the second phrase index is 1, and so on.
|
||||
*
|
||||
* @return
|
||||
* - esp_mn_phrase_t* Success
|
||||
* - NULL Fail
|
||||
*/
|
||||
esp_mn_phrase_t *esp_mn_commands_get_from_index(int index);
|
||||
|
||||
/**
|
||||
* @brief Get phrase from phoneme string
|
||||
*
|
||||
* @return
|
||||
* - esp_mn_phrase_t* Success
|
||||
* - NULL Fail
|
||||
*/
|
||||
esp_mn_phrase_t *esp_mn_commands_get_from_string(const char *phoneme_string);
|
||||
|
||||
/**
|
||||
* @brief Update the speech commands of MultiNet
|
||||
*
|
||||
* @Warning: Must be used after [add/remove/modify/clear] function,
|
||||
* otherwise the language model of multinet can not be updated.
|
||||
*
|
||||
* @param multinet The multinet handle
|
||||
* @param model_data The model object to query
|
||||
*
|
||||
* @return
|
||||
* - NULL Success
|
||||
* - others The list of error phrase which can not be parsed by multinet.
|
||||
*/
|
||||
esp_mn_error_t *esp_mn_commands_update(const esp_mn_iface_t *multinet, const model_iface_data_t *model_data);
|
||||
|
||||
/**
|
||||
* @brief Print the MultiNet Speech Commands.
|
||||
*/
|
||||
void esp_mn_print_commands(void);
|
||||
|
||||
/**
|
||||
* @brief Initialze the esp_mn_phrase_t struct by command id and phoneme string .
|
||||
*
|
||||
* @return the pointer of esp_mn_phrase_t
|
||||
*/
|
||||
esp_mn_phrase_t *esp_mn_phrase_alloc(int command_id, char *phoneme_string);
|
||||
|
||||
/**
|
||||
* @brief Free esp_mn_phrase_t pointer.
|
||||
*
|
||||
* @param phrase The esp_mn_phrase_t pointer
|
||||
*/
|
||||
void esp_mn_phrase_free(esp_mn_phrase_t *phrase);
|
||||
|
||||
/**
|
||||
* @brief Initialze the esp_mn_node_t struct by esp_mn_phrase_t pointer.
|
||||
*
|
||||
* @return the pointer of esp_mn_node_t
|
||||
*/
|
||||
esp_mn_node_t *esp_mn_node_alloc(esp_mn_phrase_t *phrase);
|
||||
|
||||
/**
|
||||
* @brief Free esp_mn_node_t pointer.
|
||||
*
|
||||
* @param node The esp_mn_node_free pointer
|
||||
*/
|
||||
void esp_mn_node_free(esp_mn_node_t *node);
|
||||
|
||||
/**
|
||||
* @brief Print phrase linked list.
|
||||
*/
|
||||
void esp_mn_commands_print(void);
|
||||
23
include/esp32/esp_process_sdkconfig.h
Normal file
23
include/esp32/esp_process_sdkconfig.h
Normal file
@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
#include "esp_err.h"
|
||||
#include "esp_mn_iface.h"
|
||||
|
||||
/**
|
||||
* @brief Check chip config to ensure optimum performance
|
||||
*/
|
||||
void check_chip_config(void);
|
||||
|
||||
/**
|
||||
* @brief Update the speech commands of MultiNet by menuconfig
|
||||
*
|
||||
* @param multinet The multinet handle
|
||||
*
|
||||
* @param model_data The model object to query
|
||||
*
|
||||
* @param langugae The language of MultiNet
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK Success
|
||||
* - ESP_ERR_INVALID_STATE Fail
|
||||
*/
|
||||
esp_err_t esp_mn_commands_update_from_sdkconfig(esp_mn_iface_t *multinet, const model_iface_data_t *model_data);
|
||||
@ -47,15 +47,11 @@ typedef void* vad_handle_t;
|
||||
*
|
||||
* @param vad_mode Sets the VAD operating mode.
|
||||
*
|
||||
* @param sample_rate_hz The Sampling frequency (Hz) can be 32000, 16000, 8000, default: 16000.
|
||||
*
|
||||
* @param one_frame_ms The length of the audio processing can be 10ms, 20ms, 30ms, default: 30.
|
||||
*
|
||||
* @return
|
||||
* - NULL: Create failed
|
||||
* - Others: The instance of VAD
|
||||
*/
|
||||
vad_handle_t vad_create(vad_mode_t vad_mode, int sample_rate_hz, int one_frame_ms);
|
||||
vad_handle_t vad_create(vad_mode_t vad_mode);
|
||||
|
||||
/**
|
||||
* @brief Feed samples of an audio stream to the VAD and check if there is someone speaking.
|
||||
@ -64,12 +60,16 @@ vad_handle_t vad_create(vad_mode_t vad_mode, int sample_rate_hz, int one_frame_m
|
||||
*
|
||||
* @param data An array of 16-bit signed audio samples.
|
||||
*
|
||||
* @param sample_rate_hz The Sampling frequency (Hz) can be 32000, 16000, 8000, default: 16000.
|
||||
*
|
||||
* @param one_frame_ms The length of the audio processing can be 10ms, 20ms, 30ms, default: 30.
|
||||
*
|
||||
* @return
|
||||
* - VAD_SILENCE if no voice
|
||||
* - VAD_SPEECH if voice is detected
|
||||
*
|
||||
*/
|
||||
vad_state_t vad_process(vad_handle_t inst, int16_t *data);
|
||||
vad_state_t vad_process(vad_handle_t inst, int16_t *data, int sample_rate_hz, int one_frame_ms);
|
||||
|
||||
/**
|
||||
* @brief Free the VAD instance
|
||||
|
||||
@ -1,10 +1,19 @@
|
||||
#pragma once
|
||||
#include "stdint.h"
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
|
||||
//Opaque model data container
|
||||
typedef struct model_iface_data_t model_iface_data_t;
|
||||
|
||||
/**
|
||||
* @brief The state of wakeup
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
WAKENET_NO_DETECT = 0, // wake word is not detected
|
||||
WAKENET_CHANNEL_VERIFIED = -1, // output channel is verified
|
||||
WAKENET_DETECTED = 1 // wake word is detected
|
||||
} wakenet_state_t;
|
||||
|
||||
//Set wake words recognition operating mode
|
||||
//The probability of being wake words is increased with increasing mode,
|
||||
//As a consequence also the false alarm rate goes up
|
||||
@ -25,14 +34,14 @@ typedef struct {
|
||||
/**
|
||||
* @brief Easy function type to initialze a model instance with a detection mode and specified wake word coefficient
|
||||
*
|
||||
* @param model_name The specified wake word model coefficient
|
||||
* @param det_mode The wake words detection mode to trigger wake words, DET_MODE_90 or DET_MODE_95
|
||||
* @param model_coeff The specified wake word model coefficient
|
||||
* @returns Handle to the model data
|
||||
*/
|
||||
typedef model_iface_data_t* (*esp_wn_iface_op_create_t)(const model_coeff_getter_t *model_coeff, det_mode_t det_mode);
|
||||
typedef model_iface_data_t* (*esp_wn_iface_op_create_t)(const void *model_name, det_mode_t det_mode);
|
||||
|
||||
/**
|
||||
* @brief Callback function type to fetch the amount of samples that need to be passed to the detect function
|
||||
* @brief Get the amount of samples that need to be passed to the detect function
|
||||
*
|
||||
* Every speech recognition model processes a certain number of samples at the same time. This function
|
||||
* can be used to query that amount. Note that the returned amount is in 16-bit samples, not in bytes.
|
||||
@ -43,7 +52,7 @@ typedef model_iface_data_t* (*esp_wn_iface_op_create_t)(const model_coeff_getter
|
||||
typedef int (*esp_wn_iface_op_get_samp_chunksize_t)(model_iface_data_t *model);
|
||||
|
||||
/**
|
||||
* @brief Callback function type to fetch the channel number of samples that need to be passed to the detect function
|
||||
* @brief Get the channel number of samples that need to be passed to the detect function
|
||||
*
|
||||
* Every speech recognition model processes a certain number of samples at the same time. This function
|
||||
* can be used to query that amount. Note that the returned amount is in 16-bit samples, not in bytes.
|
||||
@ -53,6 +62,17 @@ typedef int (*esp_wn_iface_op_get_samp_chunksize_t)(model_iface_data_t *model);
|
||||
*/
|
||||
typedef int (*esp_wn_iface_op_get_channel_num_t)(model_iface_data_t *model);
|
||||
|
||||
/**
|
||||
* @brief Get the start point of wake word when one wake word is detected.
|
||||
*
|
||||
* @Warning: This function should be called when the channel index is verified.
|
||||
* The returned value is the number of samples from start point of wake word to detected point.
|
||||
*
|
||||
* @param model The model object to query
|
||||
* @return The number of samples from start point to detected point (end point)
|
||||
*/
|
||||
typedef int (*esp_wn_iface_op_get_start_point_t)(model_iface_data_t *model);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get the sample rate of the samples to feed to the detect function
|
||||
@ -110,7 +130,7 @@ typedef float (*esp_wn_iface_op_get_det_threshold_t)(model_iface_data_t *model,
|
||||
* get_samp_chunksize function.
|
||||
* @return The index of wake words, return 0 if no wake word is detected, else the index of the wake words.
|
||||
*/
|
||||
typedef int (*esp_wn_iface_op_detect_t)(model_iface_data_t *model, int16_t *samples);
|
||||
typedef wakenet_state_t (*esp_wn_iface_op_detect_t)(model_iface_data_t *model, int16_t *samples);
|
||||
|
||||
/**
|
||||
* @brief Get the volume gain
|
||||
@ -149,6 +169,7 @@ typedef void (*esp_wn_iface_op_destroy_t)(model_iface_data_t *model);
|
||||
*/
|
||||
typedef struct {
|
||||
esp_wn_iface_op_create_t create;
|
||||
esp_wn_iface_op_get_start_point_t get_start_point;
|
||||
esp_wn_iface_op_get_samp_chunksize_t get_samp_chunksize;
|
||||
esp_wn_iface_op_get_channel_num_t get_channel_num;
|
||||
esp_wn_iface_op_get_samp_rate_t get_samp_rate;
|
||||
|
||||
@ -1,114 +1,109 @@
|
||||
#pragma once
|
||||
#include "esp_wn_iface.h"
|
||||
|
||||
//Contains declarations of all available speech recognion models. Pair this up with the right coefficients and you have a model that can recognize
|
||||
//a specific phrase or word.
|
||||
|
||||
extern const esp_wn_iface_t esp_sr_wakenet5_quantized;
|
||||
extern const esp_wn_iface_t esp_sr_wakenet7_quantized;
|
||||
extern const esp_wn_iface_t esp_sr_wakenet7_quantized8;
|
||||
extern const esp_wn_iface_t esp_sr_wakenet8_quantized;
|
||||
extern const esp_wn_iface_t esp_sr_wakenet8_quantized8;
|
||||
/*
|
||||
Configure network to use based on what's selected in menuconfig.
|
||||
*/
|
||||
// The prefix of wakenet model name is used to filter all wakenet from availabel models.
|
||||
#define ESP_WN_PREFIX "wn"
|
||||
|
||||
/**
|
||||
* @brief Get the wakenet handle from model name
|
||||
*
|
||||
* @param model_name The name of model
|
||||
* @returns The handle of wakenet
|
||||
*/
|
||||
const esp_wn_iface_t *esp_wn_handle_from_name(const char *model_name);
|
||||
|
||||
/**
|
||||
* @brief Get the wake word name from model name
|
||||
*
|
||||
* @param model_name The name of model
|
||||
* @returns The wake word name, like "alexa","hilexin","xiaoaitongxue"
|
||||
*/
|
||||
char* esp_wn_wakeword_from_name(const char *model_name);
|
||||
|
||||
// /**
|
||||
// * @brief Get the model coeff from model name
|
||||
// *
|
||||
// * @Warning: retuen model_coeff_getter_t, when chip is ESP32,
|
||||
// * return string for other chips
|
||||
// *
|
||||
// * @param model_name The name of model
|
||||
// * @returns The handle of wakenet
|
||||
// */
|
||||
// void *esp_wn_coeff_from_name(char *model_name);
|
||||
|
||||
|
||||
#if defined CONFIG_USE_WAKENET
|
||||
#if CONFIG_SR_WN_MODEL_WN5_QUANT
|
||||
#define WAKENET_MODEL esp_sr_wakenet5_quantized
|
||||
#elif CONFIG_SR_WN_MODEL_WN7_QUANT
|
||||
#define WAKENET_MODEL esp_sr_wakenet7_quantized
|
||||
#elif CONFIG_SR_WN_MODEL_WN7_QUANT8
|
||||
#define WAKENET_MODEL esp_sr_wakenet7_quantized8
|
||||
#elif CONFIG_SR_WN_MODEL_WN8_QUANT
|
||||
#define WAKENET_MODEL esp_sr_wakenet8_quantized
|
||||
#elif CONFIG_SR_WN_MODEL_WN8_QUANT8
|
||||
#define WAKENET_MODEL esp_sr_wakenet8_quantized8
|
||||
#else
|
||||
#error No valid neural network model selected.
|
||||
#endif
|
||||
|
||||
/*
|
||||
Configure wake word to use based on what's selected in menuconfig.
|
||||
*/
|
||||
#if CONFIG_SR_WN_WN5_HILEXIN & CONFIG_SR_WN_MODEL_WN5_QUANT
|
||||
#if CONFIG_SR_WN_WN5_HILEXIN
|
||||
#include "hilexin_wn5.h"
|
||||
#define WAKENET_MODEL_NAME "wn5_hilexin"
|
||||
#define WAKENET_COEFF get_coeff_hilexin_wn5
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X2_HILEXIN & CONFIG_SR_WN_MODEL_WN5_QUANT
|
||||
#elif CONFIG_SR_WN_WN5X2_HILEXIN
|
||||
#include "hilexin_wn5X2.h"
|
||||
#define WAKENET_MODEL_NAME "wn5_hilexinX2"
|
||||
#define WAKENET_COEFF get_coeff_hilexin_wn5X2
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X3_HILEXIN & CONFIG_SR_WN_MODEL_WN5_QUANT
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X3_HILEXIN
|
||||
#include "hilexin_wn5X3.h"
|
||||
#define WAKENET_MODEL_NAME "wn5_hilexinX3"
|
||||
#define WAKENET_COEFF get_coeff_hilexin_wn5X3
|
||||
|
||||
#elif CONFIG_SR_WN_WN5_NIHAOXIAOZHI & CONFIG_SR_WN_MODEL_WN5_QUANT
|
||||
|
||||
#elif CONFIG_SR_WN_WN5_NIHAOXIAOZHI
|
||||
#include "nihaoxiaozhi_wn5.h"
|
||||
#define WAKENET_MODEL_NAME "wn5_nihaoxiaozhi"
|
||||
#define WAKENET_COEFF get_coeff_nihaoxiaozhi_wn5
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X2_NIHAOXIAOZHI & CONFIG_SR_WN_MODEL_WN5_QUANT
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X2_NIHAOXIAOZHI
|
||||
#include "nihaoxiaozhi_wn5X2.h"
|
||||
#define WAKENET_MODEL_NAME "wn5_nihaoxiaozhiX2"
|
||||
#define WAKENET_COEFF get_coeff_nihaoxiaozhi_wn5X2
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X3_NIHAOXIAOZHI & CONFIG_SR_WN_MODEL_WN5_QUANT
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X3_NIHAOXIAOZHI
|
||||
#include "nihaoxiaozhi_wn5X3.h"
|
||||
#define WAKENET_MODEL_NAME "wn5_nihaoxiaozhiX3"
|
||||
#define WAKENET_COEFF get_coeff_nihaoxiaozhi_wn5X3
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X3_NIHAOXIAOXIN & CONFIG_SR_WN_MODEL_WN5_QUANT
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X3_NIHAOXIAOXIN
|
||||
#include "nihaoxiaoxin_wn5X3.h"
|
||||
#define WAKENET_MODEL_NAME "wn5_nihaoxiaoxinX3"
|
||||
#define WAKENET_COEFF get_coeff_nihaoxiaoxin_wn5X3
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X3_HIJESON & CONFIG_SR_WN_MODEL_WN5_QUANT
|
||||
|
||||
#elif CONFIG_SR_WN_WN5X3_HIJESON
|
||||
#include "hijeson_wn5X3.h"
|
||||
#define WAKENET_MODEL_NAME "wn5_hijesonX3"
|
||||
#define WAKENET_COEFF get_coeff_hijeson_wn5X3
|
||||
|
||||
#elif CONFIG_SR_WN_WN5_CUSTOMIZED_WORD
|
||||
#include "customized_word_wn5.h"
|
||||
#define WAKENET_COEFF get_coeff_customized_word_wn5
|
||||
|
||||
#elif CONFIG_SR_WN_WN7_CUSTOMIZED_WORD
|
||||
#define WAKENET_COEFF "custom7"
|
||||
|
||||
#elif CONFIG_SR_WN_WN7_XIAOAITONGXUE & CONFIG_SR_WN_MODEL_WN7_QUANT
|
||||
#define WAKENET_COEFF "xiaoaitongxue7"
|
||||
|
||||
#elif CONFIG_SR_WN_WN7_XIAOAITONGXUE & CONFIG_SR_WN_MODEL_WN7_QUANT8
|
||||
#define WAKENET_COEFF "xiaoaitongxue7q8"
|
||||
|
||||
#elif CONFIG_SR_WN_WN7_HILEXIN & CONFIG_SR_WN_MODEL_WN7_QUANT
|
||||
#define WAKENET_COEFF "hilexin7"
|
||||
|
||||
#elif CONFIG_SR_WN_WN7_HILEXIN & CONFIG_SR_WN_MODEL_WN7_QUANT8
|
||||
#define WAKENET_COEFF "hilexin7q8"
|
||||
|
||||
#elif CONFIG_SR_WN_WN7_ALEXA & CONFIG_SR_WN_MODEL_WN7_QUANT
|
||||
#define WAKENET_COEFF "alexa7"
|
||||
|
||||
#elif CONFIG_SR_WN_WN8_ALEXA & CONFIG_SR_WN_MODEL_WN8_QUANT
|
||||
#define WAKENET_COEFF "alexa8"
|
||||
|
||||
#elif CONFIG_SR_WN_WN7_ALEXA & CONFIG_SR_WN_MODEL_WN7_QUANT8
|
||||
#define WAKENET_COEFF "alexa7q8"
|
||||
|
||||
#elif CONFIG_SR_WN_WN8_HIESP & CONFIG_SR_WN_MODEL_WN8_QUANT
|
||||
#define WAKENET_COEFF "hiesp8"
|
||||
|
||||
#elif CONFIG_SR_WN_WN8_HIESP & CONFIG_SR_WN_MODEL_WN8_QUANT8
|
||||
#define WAKENET_COEFF "hiesp8q8"
|
||||
#define WAKENET_MODEL_NAME "wn5_customizedword"
|
||||
#define WAKENET_COEFF get_coeff_customizedword_wn5
|
||||
|
||||
#else
|
||||
#error No valid wake word selected.
|
||||
#define WAKENET_MODEL_NAME "NULL"
|
||||
#define WAKENET_COEFF "COEFF_NULL"
|
||||
#endif
|
||||
#else
|
||||
#define WAKENET_MODEL "NULL"
|
||||
#define WAKENET_COEFF "NULL"
|
||||
#endif
|
||||
/* example
|
||||
|
||||
static const sr_model_iface_t *model = &WAKENET_MODEL;
|
||||
#else
|
||||
#define WAKENET_MODEL_NAME "NULL"
|
||||
#define WAKENET_COEFF "COEFF_NULL"
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
static const sr_model_iface_t *model = esp_wn_handle_from_name(model_name);
|
||||
|
||||
//Initialize wakeNet model data
|
||||
static model_iface_data_t *model_data=model->create(DET_MODE_90);
|
||||
static model_iface_data_t *model_data=model->create(model_name, DET_MODE_90);
|
||||
|
||||
//Set parameters of buffer
|
||||
int audio_chunksize=model->get_samp_chunksize(model_data);
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
//Generated by mkmodel
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_hijeson_wn5X3;
|
||||
@ -1,8 +1,9 @@
|
||||
//Generated by mkmodel
|
||||
//Generated by mkmodel_py
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
#include "dl_lib_matrixq8.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_hilexin_wn5;
|
||||
extern const model_coeff_getter_t get_coeff_hilexin_wn5;
|
||||
@ -1,8 +1,9 @@
|
||||
//Generated by mkmodel
|
||||
//Generated by mkmodel_py
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
#include "dl_lib_matrixq8.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_hilexin_wn5X2;
|
||||
extern const model_coeff_getter_t get_coeff_hilexin_wn5X2;
|
||||
@ -1,8 +1,9 @@
|
||||
//Generated by mkmodel
|
||||
//Generated by mkmodel_py
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
#include "dl_lib_matrixq8.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_hilexin_wn5X3;
|
||||
extern const model_coeff_getter_t get_coeff_hilexin_wn5X3;
|
||||
@ -1,408 +0,0 @@
|
||||
#pragma once
|
||||
#include "esp_mn_iface.h"
|
||||
#define SPEECH_COMMANDS_NUM 99
|
||||
#if CONFIG_SR_MN_CHINESE
|
||||
#define MN_SPEECH_COMMAND_ID0 CONFIG_CN_SPEECH_COMMAND_ID0
|
||||
#define MN_SPEECH_COMMAND_ID1 CONFIG_CN_SPEECH_COMMAND_ID1
|
||||
#define MN_SPEECH_COMMAND_ID2 CONFIG_CN_SPEECH_COMMAND_ID2
|
||||
#define MN_SPEECH_COMMAND_ID3 CONFIG_CN_SPEECH_COMMAND_ID3
|
||||
#define MN_SPEECH_COMMAND_ID4 CONFIG_CN_SPEECH_COMMAND_ID4
|
||||
#define MN_SPEECH_COMMAND_ID5 CONFIG_CN_SPEECH_COMMAND_ID5
|
||||
#define MN_SPEECH_COMMAND_ID6 CONFIG_CN_SPEECH_COMMAND_ID6
|
||||
#define MN_SPEECH_COMMAND_ID7 CONFIG_CN_SPEECH_COMMAND_ID7
|
||||
#define MN_SPEECH_COMMAND_ID8 CONFIG_CN_SPEECH_COMMAND_ID8
|
||||
#define MN_SPEECH_COMMAND_ID9 CONFIG_CN_SPEECH_COMMAND_ID9
|
||||
#define MN_SPEECH_COMMAND_ID10 CONFIG_CN_SPEECH_COMMAND_ID10
|
||||
#define MN_SPEECH_COMMAND_ID11 CONFIG_CN_SPEECH_COMMAND_ID11
|
||||
#define MN_SPEECH_COMMAND_ID12 CONFIG_CN_SPEECH_COMMAND_ID12
|
||||
#define MN_SPEECH_COMMAND_ID13 CONFIG_CN_SPEECH_COMMAND_ID13
|
||||
#define MN_SPEECH_COMMAND_ID14 CONFIG_CN_SPEECH_COMMAND_ID14
|
||||
#define MN_SPEECH_COMMAND_ID15 CONFIG_CN_SPEECH_COMMAND_ID15
|
||||
#define MN_SPEECH_COMMAND_ID16 CONFIG_CN_SPEECH_COMMAND_ID16
|
||||
#define MN_SPEECH_COMMAND_ID17 CONFIG_CN_SPEECH_COMMAND_ID17
|
||||
#define MN_SPEECH_COMMAND_ID18 CONFIG_CN_SPEECH_COMMAND_ID18
|
||||
#define MN_SPEECH_COMMAND_ID19 CONFIG_CN_SPEECH_COMMAND_ID19
|
||||
#define MN_SPEECH_COMMAND_ID20 CONFIG_CN_SPEECH_COMMAND_ID20
|
||||
#define MN_SPEECH_COMMAND_ID21 CONFIG_CN_SPEECH_COMMAND_ID21
|
||||
#define MN_SPEECH_COMMAND_ID22 CONFIG_CN_SPEECH_COMMAND_ID22
|
||||
#define MN_SPEECH_COMMAND_ID23 CONFIG_CN_SPEECH_COMMAND_ID23
|
||||
#define MN_SPEECH_COMMAND_ID24 CONFIG_CN_SPEECH_COMMAND_ID24
|
||||
#define MN_SPEECH_COMMAND_ID25 CONFIG_CN_SPEECH_COMMAND_ID25
|
||||
#define MN_SPEECH_COMMAND_ID26 CONFIG_CN_SPEECH_COMMAND_ID26
|
||||
#define MN_SPEECH_COMMAND_ID27 CONFIG_CN_SPEECH_COMMAND_ID27
|
||||
#define MN_SPEECH_COMMAND_ID28 CONFIG_CN_SPEECH_COMMAND_ID28
|
||||
#define MN_SPEECH_COMMAND_ID29 CONFIG_CN_SPEECH_COMMAND_ID29
|
||||
#define MN_SPEECH_COMMAND_ID30 CONFIG_CN_SPEECH_COMMAND_ID30
|
||||
#define MN_SPEECH_COMMAND_ID31 CONFIG_CN_SPEECH_COMMAND_ID31
|
||||
#define MN_SPEECH_COMMAND_ID32 CONFIG_CN_SPEECH_COMMAND_ID32
|
||||
#define MN_SPEECH_COMMAND_ID33 CONFIG_CN_SPEECH_COMMAND_ID33
|
||||
#define MN_SPEECH_COMMAND_ID34 CONFIG_CN_SPEECH_COMMAND_ID34
|
||||
#define MN_SPEECH_COMMAND_ID35 CONFIG_CN_SPEECH_COMMAND_ID35
|
||||
#define MN_SPEECH_COMMAND_ID36 CONFIG_CN_SPEECH_COMMAND_ID36
|
||||
#define MN_SPEECH_COMMAND_ID37 CONFIG_CN_SPEECH_COMMAND_ID37
|
||||
#define MN_SPEECH_COMMAND_ID38 CONFIG_CN_SPEECH_COMMAND_ID38
|
||||
#define MN_SPEECH_COMMAND_ID39 CONFIG_CN_SPEECH_COMMAND_ID39
|
||||
#define MN_SPEECH_COMMAND_ID40 CONFIG_CN_SPEECH_COMMAND_ID40
|
||||
#define MN_SPEECH_COMMAND_ID41 CONFIG_CN_SPEECH_COMMAND_ID41
|
||||
#define MN_SPEECH_COMMAND_ID42 CONFIG_CN_SPEECH_COMMAND_ID42
|
||||
#define MN_SPEECH_COMMAND_ID43 CONFIG_CN_SPEECH_COMMAND_ID43
|
||||
#define MN_SPEECH_COMMAND_ID44 CONFIG_CN_SPEECH_COMMAND_ID44
|
||||
#define MN_SPEECH_COMMAND_ID45 CONFIG_CN_SPEECH_COMMAND_ID45
|
||||
#define MN_SPEECH_COMMAND_ID46 CONFIG_CN_SPEECH_COMMAND_ID46
|
||||
#define MN_SPEECH_COMMAND_ID47 CONFIG_CN_SPEECH_COMMAND_ID47
|
||||
#define MN_SPEECH_COMMAND_ID48 CONFIG_CN_SPEECH_COMMAND_ID48
|
||||
#define MN_SPEECH_COMMAND_ID49 CONFIG_CN_SPEECH_COMMAND_ID49
|
||||
#define MN_SPEECH_COMMAND_ID50 CONFIG_CN_SPEECH_COMMAND_ID50
|
||||
#define MN_SPEECH_COMMAND_ID51 CONFIG_CN_SPEECH_COMMAND_ID51
|
||||
#define MN_SPEECH_COMMAND_ID52 CONFIG_CN_SPEECH_COMMAND_ID52
|
||||
#define MN_SPEECH_COMMAND_ID53 CONFIG_CN_SPEECH_COMMAND_ID53
|
||||
#define MN_SPEECH_COMMAND_ID54 CONFIG_CN_SPEECH_COMMAND_ID54
|
||||
#define MN_SPEECH_COMMAND_ID55 CONFIG_CN_SPEECH_COMMAND_ID55
|
||||
#define MN_SPEECH_COMMAND_ID56 CONFIG_CN_SPEECH_COMMAND_ID56
|
||||
#define MN_SPEECH_COMMAND_ID57 CONFIG_CN_SPEECH_COMMAND_ID57
|
||||
#define MN_SPEECH_COMMAND_ID58 CONFIG_CN_SPEECH_COMMAND_ID58
|
||||
#define MN_SPEECH_COMMAND_ID59 CONFIG_CN_SPEECH_COMMAND_ID59
|
||||
#define MN_SPEECH_COMMAND_ID60 CONFIG_CN_SPEECH_COMMAND_ID60
|
||||
#define MN_SPEECH_COMMAND_ID61 CONFIG_CN_SPEECH_COMMAND_ID61
|
||||
#define MN_SPEECH_COMMAND_ID62 CONFIG_CN_SPEECH_COMMAND_ID62
|
||||
#define MN_SPEECH_COMMAND_ID63 CONFIG_CN_SPEECH_COMMAND_ID63
|
||||
#define MN_SPEECH_COMMAND_ID64 CONFIG_CN_SPEECH_COMMAND_ID64
|
||||
#define MN_SPEECH_COMMAND_ID65 CONFIG_CN_SPEECH_COMMAND_ID65
|
||||
#define MN_SPEECH_COMMAND_ID66 CONFIG_CN_SPEECH_COMMAND_ID66
|
||||
#define MN_SPEECH_COMMAND_ID67 CONFIG_CN_SPEECH_COMMAND_ID67
|
||||
#define MN_SPEECH_COMMAND_ID68 CONFIG_CN_SPEECH_COMMAND_ID68
|
||||
#define MN_SPEECH_COMMAND_ID69 CONFIG_CN_SPEECH_COMMAND_ID69
|
||||
#define MN_SPEECH_COMMAND_ID70 CONFIG_CN_SPEECH_COMMAND_ID70
|
||||
#define MN_SPEECH_COMMAND_ID71 CONFIG_CN_SPEECH_COMMAND_ID71
|
||||
#define MN_SPEECH_COMMAND_ID72 CONFIG_CN_SPEECH_COMMAND_ID72
|
||||
#define MN_SPEECH_COMMAND_ID73 CONFIG_CN_SPEECH_COMMAND_ID73
|
||||
#define MN_SPEECH_COMMAND_ID74 CONFIG_CN_SPEECH_COMMAND_ID74
|
||||
#define MN_SPEECH_COMMAND_ID75 CONFIG_CN_SPEECH_COMMAND_ID75
|
||||
#define MN_SPEECH_COMMAND_ID76 CONFIG_CN_SPEECH_COMMAND_ID76
|
||||
#define MN_SPEECH_COMMAND_ID77 CONFIG_CN_SPEECH_COMMAND_ID77
|
||||
#define MN_SPEECH_COMMAND_ID78 CONFIG_CN_SPEECH_COMMAND_ID78
|
||||
#define MN_SPEECH_COMMAND_ID79 CONFIG_CN_SPEECH_COMMAND_ID79
|
||||
#define MN_SPEECH_COMMAND_ID80 CONFIG_CN_SPEECH_COMMAND_ID80
|
||||
#define MN_SPEECH_COMMAND_ID81 CONFIG_CN_SPEECH_COMMAND_ID81
|
||||
#define MN_SPEECH_COMMAND_ID82 CONFIG_CN_SPEECH_COMMAND_ID82
|
||||
#define MN_SPEECH_COMMAND_ID83 CONFIG_CN_SPEECH_COMMAND_ID83
|
||||
#define MN_SPEECH_COMMAND_ID84 CONFIG_CN_SPEECH_COMMAND_ID84
|
||||
#define MN_SPEECH_COMMAND_ID85 CONFIG_CN_SPEECH_COMMAND_ID85
|
||||
#define MN_SPEECH_COMMAND_ID86 CONFIG_CN_SPEECH_COMMAND_ID86
|
||||
#define MN_SPEECH_COMMAND_ID87 CONFIG_CN_SPEECH_COMMAND_ID87
|
||||
#define MN_SPEECH_COMMAND_ID88 CONFIG_CN_SPEECH_COMMAND_ID88
|
||||
#define MN_SPEECH_COMMAND_ID89 CONFIG_CN_SPEECH_COMMAND_ID89
|
||||
#define MN_SPEECH_COMMAND_ID90 CONFIG_CN_SPEECH_COMMAND_ID90
|
||||
#define MN_SPEECH_COMMAND_ID91 CONFIG_CN_SPEECH_COMMAND_ID91
|
||||
#define MN_SPEECH_COMMAND_ID92 CONFIG_CN_SPEECH_COMMAND_ID92
|
||||
#define MN_SPEECH_COMMAND_ID93 CONFIG_CN_SPEECH_COMMAND_ID93
|
||||
#define MN_SPEECH_COMMAND_ID94 CONFIG_CN_SPEECH_COMMAND_ID94
|
||||
#define MN_SPEECH_COMMAND_ID95 CONFIG_CN_SPEECH_COMMAND_ID95
|
||||
#define MN_SPEECH_COMMAND_ID96 CONFIG_CN_SPEECH_COMMAND_ID96
|
||||
#define MN_SPEECH_COMMAND_ID97 CONFIG_CN_SPEECH_COMMAND_ID97
|
||||
#define MN_SPEECH_COMMAND_ID98 CONFIG_CN_SPEECH_COMMAND_ID98
|
||||
#define MN_SPEECH_COMMAND_ID99 CONFIG_CN_SPEECH_COMMAND_ID99
|
||||
#define MN_SPEECH_COMMAND_ID100 CONFIG_CN_SPEECH_COMMAND_ID100
|
||||
#define MN_SPEECH_COMMAND_ID101 CONFIG_CN_SPEECH_COMMAND_ID101
|
||||
#define MN_SPEECH_COMMAND_ID102 CONFIG_CN_SPEECH_COMMAND_ID102
|
||||
#define MN_SPEECH_COMMAND_ID103 CONFIG_CN_SPEECH_COMMAND_ID103
|
||||
#define MN_SPEECH_COMMAND_ID104 CONFIG_CN_SPEECH_COMMAND_ID104
|
||||
#define MN_SPEECH_COMMAND_ID105 CONFIG_CN_SPEECH_COMMAND_ID105
|
||||
#define MN_SPEECH_COMMAND_ID106 CONFIG_CN_SPEECH_COMMAND_ID106
|
||||
#define MN_SPEECH_COMMAND_ID107 CONFIG_CN_SPEECH_COMMAND_ID107
|
||||
#define MN_SPEECH_COMMAND_ID108 CONFIG_CN_SPEECH_COMMAND_ID108
|
||||
#define MN_SPEECH_COMMAND_ID109 CONFIG_CN_SPEECH_COMMAND_ID109
|
||||
#define MN_SPEECH_COMMAND_ID110 CONFIG_CN_SPEECH_COMMAND_ID110
|
||||
#define MN_SPEECH_COMMAND_ID111 CONFIG_CN_SPEECH_COMMAND_ID111
|
||||
#define MN_SPEECH_COMMAND_ID112 CONFIG_CN_SPEECH_COMMAND_ID112
|
||||
#define MN_SPEECH_COMMAND_ID113 CONFIG_CN_SPEECH_COMMAND_ID113
|
||||
#define MN_SPEECH_COMMAND_ID114 CONFIG_CN_SPEECH_COMMAND_ID114
|
||||
#define MN_SPEECH_COMMAND_ID115 CONFIG_CN_SPEECH_COMMAND_ID115
|
||||
#define MN_SPEECH_COMMAND_ID116 CONFIG_CN_SPEECH_COMMAND_ID116
|
||||
#define MN_SPEECH_COMMAND_ID117 CONFIG_CN_SPEECH_COMMAND_ID117
|
||||
#define MN_SPEECH_COMMAND_ID118 CONFIG_CN_SPEECH_COMMAND_ID118
|
||||
#define MN_SPEECH_COMMAND_ID119 CONFIG_CN_SPEECH_COMMAND_ID119
|
||||
#define MN_SPEECH_COMMAND_ID120 CONFIG_CN_SPEECH_COMMAND_ID120
|
||||
#define MN_SPEECH_COMMAND_ID121 CONFIG_CN_SPEECH_COMMAND_ID121
|
||||
#define MN_SPEECH_COMMAND_ID122 CONFIG_CN_SPEECH_COMMAND_ID122
|
||||
#define MN_SPEECH_COMMAND_ID123 CONFIG_CN_SPEECH_COMMAND_ID123
|
||||
#define MN_SPEECH_COMMAND_ID124 CONFIG_CN_SPEECH_COMMAND_ID124
|
||||
#define MN_SPEECH_COMMAND_ID125 CONFIG_CN_SPEECH_COMMAND_ID125
|
||||
#define MN_SPEECH_COMMAND_ID126 CONFIG_CN_SPEECH_COMMAND_ID126
|
||||
#define MN_SPEECH_COMMAND_ID127 CONFIG_CN_SPEECH_COMMAND_ID127
|
||||
#define MN_SPEECH_COMMAND_ID128 CONFIG_CN_SPEECH_COMMAND_ID128
|
||||
#define MN_SPEECH_COMMAND_ID129 CONFIG_CN_SPEECH_COMMAND_ID129
|
||||
#define MN_SPEECH_COMMAND_ID130 CONFIG_CN_SPEECH_COMMAND_ID130
|
||||
#define MN_SPEECH_COMMAND_ID131 CONFIG_CN_SPEECH_COMMAND_ID131
|
||||
#define MN_SPEECH_COMMAND_ID132 CONFIG_CN_SPEECH_COMMAND_ID132
|
||||
#define MN_SPEECH_COMMAND_ID133 CONFIG_CN_SPEECH_COMMAND_ID133
|
||||
#define MN_SPEECH_COMMAND_ID134 CONFIG_CN_SPEECH_COMMAND_ID134
|
||||
#define MN_SPEECH_COMMAND_ID135 CONFIG_CN_SPEECH_COMMAND_ID135
|
||||
#define MN_SPEECH_COMMAND_ID136 CONFIG_CN_SPEECH_COMMAND_ID136
|
||||
#define MN_SPEECH_COMMAND_ID137 CONFIG_CN_SPEECH_COMMAND_ID137
|
||||
#define MN_SPEECH_COMMAND_ID138 CONFIG_CN_SPEECH_COMMAND_ID138
|
||||
#define MN_SPEECH_COMMAND_ID139 CONFIG_CN_SPEECH_COMMAND_ID139
|
||||
#define MN_SPEECH_COMMAND_ID140 CONFIG_CN_SPEECH_COMMAND_ID140
|
||||
#define MN_SPEECH_COMMAND_ID141 CONFIG_CN_SPEECH_COMMAND_ID141
|
||||
#define MN_SPEECH_COMMAND_ID142 CONFIG_CN_SPEECH_COMMAND_ID142
|
||||
#define MN_SPEECH_COMMAND_ID143 CONFIG_CN_SPEECH_COMMAND_ID143
|
||||
#define MN_SPEECH_COMMAND_ID144 CONFIG_CN_SPEECH_COMMAND_ID144
|
||||
#define MN_SPEECH_COMMAND_ID145 CONFIG_CN_SPEECH_COMMAND_ID145
|
||||
#define MN_SPEECH_COMMAND_ID146 CONFIG_CN_SPEECH_COMMAND_ID146
|
||||
#define MN_SPEECH_COMMAND_ID147 CONFIG_CN_SPEECH_COMMAND_ID147
|
||||
#define MN_SPEECH_COMMAND_ID148 CONFIG_CN_SPEECH_COMMAND_ID148
|
||||
#define MN_SPEECH_COMMAND_ID149 CONFIG_CN_SPEECH_COMMAND_ID149
|
||||
#define MN_SPEECH_COMMAND_ID150 CONFIG_CN_SPEECH_COMMAND_ID150
|
||||
#define MN_SPEECH_COMMAND_ID151 CONFIG_CN_SPEECH_COMMAND_ID151
|
||||
#define MN_SPEECH_COMMAND_ID152 CONFIG_CN_SPEECH_COMMAND_ID152
|
||||
#define MN_SPEECH_COMMAND_ID153 CONFIG_CN_SPEECH_COMMAND_ID153
|
||||
#define MN_SPEECH_COMMAND_ID154 CONFIG_CN_SPEECH_COMMAND_ID154
|
||||
#define MN_SPEECH_COMMAND_ID155 CONFIG_CN_SPEECH_COMMAND_ID155
|
||||
#define MN_SPEECH_COMMAND_ID156 CONFIG_CN_SPEECH_COMMAND_ID156
|
||||
#define MN_SPEECH_COMMAND_ID157 CONFIG_CN_SPEECH_COMMAND_ID157
|
||||
#define MN_SPEECH_COMMAND_ID158 CONFIG_CN_SPEECH_COMMAND_ID158
|
||||
#define MN_SPEECH_COMMAND_ID159 CONFIG_CN_SPEECH_COMMAND_ID159
|
||||
#define MN_SPEECH_COMMAND_ID160 CONFIG_CN_SPEECH_COMMAND_ID160
|
||||
#define MN_SPEECH_COMMAND_ID161 CONFIG_CN_SPEECH_COMMAND_ID161
|
||||
#define MN_SPEECH_COMMAND_ID162 CONFIG_CN_SPEECH_COMMAND_ID162
|
||||
#define MN_SPEECH_COMMAND_ID163 CONFIG_CN_SPEECH_COMMAND_ID163
|
||||
#define MN_SPEECH_COMMAND_ID164 CONFIG_CN_SPEECH_COMMAND_ID164
|
||||
#define MN_SPEECH_COMMAND_ID165 CONFIG_CN_SPEECH_COMMAND_ID165
|
||||
#define MN_SPEECH_COMMAND_ID166 CONFIG_CN_SPEECH_COMMAND_ID166
|
||||
#define MN_SPEECH_COMMAND_ID167 CONFIG_CN_SPEECH_COMMAND_ID167
|
||||
#define MN_SPEECH_COMMAND_ID168 CONFIG_CN_SPEECH_COMMAND_ID168
|
||||
#define MN_SPEECH_COMMAND_ID169 CONFIG_CN_SPEECH_COMMAND_ID169
|
||||
#define MN_SPEECH_COMMAND_ID170 CONFIG_CN_SPEECH_COMMAND_ID170
|
||||
#define MN_SPEECH_COMMAND_ID171 CONFIG_CN_SPEECH_COMMAND_ID171
|
||||
#define MN_SPEECH_COMMAND_ID172 CONFIG_CN_SPEECH_COMMAND_ID172
|
||||
#define MN_SPEECH_COMMAND_ID173 CONFIG_CN_SPEECH_COMMAND_ID173
|
||||
#define MN_SPEECH_COMMAND_ID174 CONFIG_CN_SPEECH_COMMAND_ID174
|
||||
#define MN_SPEECH_COMMAND_ID175 CONFIG_CN_SPEECH_COMMAND_ID175
|
||||
#define MN_SPEECH_COMMAND_ID176 CONFIG_CN_SPEECH_COMMAND_ID176
|
||||
#define MN_SPEECH_COMMAND_ID177 CONFIG_CN_SPEECH_COMMAND_ID177
|
||||
#define MN_SPEECH_COMMAND_ID178 CONFIG_CN_SPEECH_COMMAND_ID178
|
||||
#define MN_SPEECH_COMMAND_ID179 CONFIG_CN_SPEECH_COMMAND_ID179
|
||||
#define MN_SPEECH_COMMAND_ID180 CONFIG_CN_SPEECH_COMMAND_ID180
|
||||
#define MN_SPEECH_COMMAND_ID181 CONFIG_CN_SPEECH_COMMAND_ID181
|
||||
#define MN_SPEECH_COMMAND_ID182 CONFIG_CN_SPEECH_COMMAND_ID182
|
||||
#define MN_SPEECH_COMMAND_ID183 CONFIG_CN_SPEECH_COMMAND_ID183
|
||||
#define MN_SPEECH_COMMAND_ID184 CONFIG_CN_SPEECH_COMMAND_ID184
|
||||
#define MN_SPEECH_COMMAND_ID185 CONFIG_CN_SPEECH_COMMAND_ID185
|
||||
#define MN_SPEECH_COMMAND_ID186 CONFIG_CN_SPEECH_COMMAND_ID186
|
||||
#define MN_SPEECH_COMMAND_ID187 CONFIG_CN_SPEECH_COMMAND_ID187
|
||||
#define MN_SPEECH_COMMAND_ID188 CONFIG_CN_SPEECH_COMMAND_ID188
|
||||
#define MN_SPEECH_COMMAND_ID189 CONFIG_CN_SPEECH_COMMAND_ID189
|
||||
#define MN_SPEECH_COMMAND_ID190 CONFIG_CN_SPEECH_COMMAND_ID190
|
||||
#define MN_SPEECH_COMMAND_ID191 CONFIG_CN_SPEECH_COMMAND_ID191
|
||||
#define MN_SPEECH_COMMAND_ID192 CONFIG_CN_SPEECH_COMMAND_ID192
|
||||
#define MN_SPEECH_COMMAND_ID193 CONFIG_CN_SPEECH_COMMAND_ID193
|
||||
#define MN_SPEECH_COMMAND_ID194 CONFIG_CN_SPEECH_COMMAND_ID194
|
||||
#define MN_SPEECH_COMMAND_ID195 CONFIG_CN_SPEECH_COMMAND_ID195
|
||||
#define MN_SPEECH_COMMAND_ID196 CONFIG_CN_SPEECH_COMMAND_ID196
|
||||
#define MN_SPEECH_COMMAND_ID197 CONFIG_CN_SPEECH_COMMAND_ID197
|
||||
#define MN_SPEECH_COMMAND_ID198 CONFIG_CN_SPEECH_COMMAND_ID198
|
||||
#define MN_SPEECH_COMMAND_ID199 CONFIG_CN_SPEECH_COMMAND_ID199
|
||||
#elif CONFIG_SR_MN_ENGLISH
|
||||
#define MN_SPEECH_COMMAND_ID0 CONFIG_EN_SPEECH_COMMAND_ID0
|
||||
#define MN_SPEECH_COMMAND_ID1 CONFIG_EN_SPEECH_COMMAND_ID1
|
||||
#define MN_SPEECH_COMMAND_ID2 CONFIG_EN_SPEECH_COMMAND_ID2
|
||||
#define MN_SPEECH_COMMAND_ID3 CONFIG_EN_SPEECH_COMMAND_ID3
|
||||
#define MN_SPEECH_COMMAND_ID4 CONFIG_EN_SPEECH_COMMAND_ID4
|
||||
#define MN_SPEECH_COMMAND_ID5 CONFIG_EN_SPEECH_COMMAND_ID5
|
||||
#define MN_SPEECH_COMMAND_ID6 CONFIG_EN_SPEECH_COMMAND_ID6
|
||||
#define MN_SPEECH_COMMAND_ID7 CONFIG_EN_SPEECH_COMMAND_ID7
|
||||
#define MN_SPEECH_COMMAND_ID8 CONFIG_EN_SPEECH_COMMAND_ID8
|
||||
#define MN_SPEECH_COMMAND_ID9 CONFIG_EN_SPEECH_COMMAND_ID9
|
||||
#define MN_SPEECH_COMMAND_ID10 CONFIG_EN_SPEECH_COMMAND_ID10
|
||||
#define MN_SPEECH_COMMAND_ID11 CONFIG_EN_SPEECH_COMMAND_ID11
|
||||
#define MN_SPEECH_COMMAND_ID12 CONFIG_EN_SPEECH_COMMAND_ID12
|
||||
#define MN_SPEECH_COMMAND_ID13 CONFIG_EN_SPEECH_COMMAND_ID13
|
||||
#define MN_SPEECH_COMMAND_ID14 CONFIG_EN_SPEECH_COMMAND_ID14
|
||||
#define MN_SPEECH_COMMAND_ID15 CONFIG_EN_SPEECH_COMMAND_ID15
|
||||
#define MN_SPEECH_COMMAND_ID16 CONFIG_EN_SPEECH_COMMAND_ID16
|
||||
#define MN_SPEECH_COMMAND_ID17 CONFIG_EN_SPEECH_COMMAND_ID17
|
||||
#define MN_SPEECH_COMMAND_ID18 CONFIG_EN_SPEECH_COMMAND_ID18
|
||||
#define MN_SPEECH_COMMAND_ID19 CONFIG_EN_SPEECH_COMMAND_ID19
|
||||
#define MN_SPEECH_COMMAND_ID20 CONFIG_EN_SPEECH_COMMAND_ID20
|
||||
#define MN_SPEECH_COMMAND_ID21 CONFIG_EN_SPEECH_COMMAND_ID21
|
||||
#define MN_SPEECH_COMMAND_ID22 CONFIG_EN_SPEECH_COMMAND_ID22
|
||||
#define MN_SPEECH_COMMAND_ID23 CONFIG_EN_SPEECH_COMMAND_ID23
|
||||
#define MN_SPEECH_COMMAND_ID24 CONFIG_EN_SPEECH_COMMAND_ID24
|
||||
#define MN_SPEECH_COMMAND_ID25 CONFIG_EN_SPEECH_COMMAND_ID25
|
||||
#define MN_SPEECH_COMMAND_ID26 CONFIG_EN_SPEECH_COMMAND_ID26
|
||||
#define MN_SPEECH_COMMAND_ID27 CONFIG_EN_SPEECH_COMMAND_ID27
|
||||
#define MN_SPEECH_COMMAND_ID28 CONFIG_EN_SPEECH_COMMAND_ID28
|
||||
#define MN_SPEECH_COMMAND_ID29 CONFIG_EN_SPEECH_COMMAND_ID29
|
||||
#define MN_SPEECH_COMMAND_ID30 CONFIG_EN_SPEECH_COMMAND_ID30
|
||||
#define MN_SPEECH_COMMAND_ID31 CONFIG_EN_SPEECH_COMMAND_ID31
|
||||
#define MN_SPEECH_COMMAND_ID32 CONFIG_EN_SPEECH_COMMAND_ID32
|
||||
#define MN_SPEECH_COMMAND_ID33 CONFIG_EN_SPEECH_COMMAND_ID33
|
||||
#define MN_SPEECH_COMMAND_ID34 CONFIG_EN_SPEECH_COMMAND_ID34
|
||||
#define MN_SPEECH_COMMAND_ID35 CONFIG_EN_SPEECH_COMMAND_ID35
|
||||
#define MN_SPEECH_COMMAND_ID36 CONFIG_EN_SPEECH_COMMAND_ID36
|
||||
#define MN_SPEECH_COMMAND_ID37 CONFIG_EN_SPEECH_COMMAND_ID37
|
||||
#define MN_SPEECH_COMMAND_ID38 CONFIG_EN_SPEECH_COMMAND_ID38
|
||||
#define MN_SPEECH_COMMAND_ID39 CONFIG_EN_SPEECH_COMMAND_ID39
|
||||
#define MN_SPEECH_COMMAND_ID40 CONFIG_EN_SPEECH_COMMAND_ID40
|
||||
#define MN_SPEECH_COMMAND_ID41 CONFIG_EN_SPEECH_COMMAND_ID41
|
||||
#define MN_SPEECH_COMMAND_ID42 CONFIG_EN_SPEECH_COMMAND_ID42
|
||||
#define MN_SPEECH_COMMAND_ID43 CONFIG_EN_SPEECH_COMMAND_ID43
|
||||
#define MN_SPEECH_COMMAND_ID44 CONFIG_EN_SPEECH_COMMAND_ID44
|
||||
#define MN_SPEECH_COMMAND_ID45 CONFIG_EN_SPEECH_COMMAND_ID45
|
||||
#define MN_SPEECH_COMMAND_ID46 CONFIG_EN_SPEECH_COMMAND_ID46
|
||||
#define MN_SPEECH_COMMAND_ID47 CONFIG_EN_SPEECH_COMMAND_ID47
|
||||
#define MN_SPEECH_COMMAND_ID48 CONFIG_EN_SPEECH_COMMAND_ID48
|
||||
#define MN_SPEECH_COMMAND_ID49 CONFIG_EN_SPEECH_COMMAND_ID49
|
||||
#define MN_SPEECH_COMMAND_ID50 CONFIG_EN_SPEECH_COMMAND_ID50
|
||||
#define MN_SPEECH_COMMAND_ID51 CONFIG_EN_SPEECH_COMMAND_ID51
|
||||
#define MN_SPEECH_COMMAND_ID52 CONFIG_EN_SPEECH_COMMAND_ID52
|
||||
#define MN_SPEECH_COMMAND_ID53 CONFIG_EN_SPEECH_COMMAND_ID53
|
||||
#define MN_SPEECH_COMMAND_ID54 CONFIG_EN_SPEECH_COMMAND_ID54
|
||||
#define MN_SPEECH_COMMAND_ID55 CONFIG_EN_SPEECH_COMMAND_ID55
|
||||
#define MN_SPEECH_COMMAND_ID56 CONFIG_EN_SPEECH_COMMAND_ID56
|
||||
#define MN_SPEECH_COMMAND_ID57 CONFIG_EN_SPEECH_COMMAND_ID57
|
||||
#define MN_SPEECH_COMMAND_ID58 CONFIG_EN_SPEECH_COMMAND_ID58
|
||||
#define MN_SPEECH_COMMAND_ID59 CONFIG_EN_SPEECH_COMMAND_ID59
|
||||
#define MN_SPEECH_COMMAND_ID60 CONFIG_EN_SPEECH_COMMAND_ID60
|
||||
#define MN_SPEECH_COMMAND_ID61 CONFIG_EN_SPEECH_COMMAND_ID61
|
||||
#define MN_SPEECH_COMMAND_ID62 CONFIG_EN_SPEECH_COMMAND_ID62
|
||||
#define MN_SPEECH_COMMAND_ID63 CONFIG_EN_SPEECH_COMMAND_ID63
|
||||
#define MN_SPEECH_COMMAND_ID64 CONFIG_EN_SPEECH_COMMAND_ID64
|
||||
#define MN_SPEECH_COMMAND_ID65 CONFIG_EN_SPEECH_COMMAND_ID65
|
||||
#define MN_SPEECH_COMMAND_ID66 CONFIG_EN_SPEECH_COMMAND_ID66
|
||||
#define MN_SPEECH_COMMAND_ID67 CONFIG_EN_SPEECH_COMMAND_ID67
|
||||
#define MN_SPEECH_COMMAND_ID68 CONFIG_EN_SPEECH_COMMAND_ID68
|
||||
#define MN_SPEECH_COMMAND_ID69 CONFIG_EN_SPEECH_COMMAND_ID69
|
||||
#define MN_SPEECH_COMMAND_ID70 CONFIG_EN_SPEECH_COMMAND_ID70
|
||||
#define MN_SPEECH_COMMAND_ID71 CONFIG_EN_SPEECH_COMMAND_ID71
|
||||
#define MN_SPEECH_COMMAND_ID72 CONFIG_EN_SPEECH_COMMAND_ID72
|
||||
#define MN_SPEECH_COMMAND_ID73 CONFIG_EN_SPEECH_COMMAND_ID73
|
||||
#define MN_SPEECH_COMMAND_ID74 CONFIG_EN_SPEECH_COMMAND_ID74
|
||||
#define MN_SPEECH_COMMAND_ID75 CONFIG_EN_SPEECH_COMMAND_ID75
|
||||
#define MN_SPEECH_COMMAND_ID76 CONFIG_EN_SPEECH_COMMAND_ID76
|
||||
#define MN_SPEECH_COMMAND_ID77 CONFIG_EN_SPEECH_COMMAND_ID77
|
||||
#define MN_SPEECH_COMMAND_ID78 CONFIG_EN_SPEECH_COMMAND_ID78
|
||||
#define MN_SPEECH_COMMAND_ID79 CONFIG_EN_SPEECH_COMMAND_ID79
|
||||
#define MN_SPEECH_COMMAND_ID80 CONFIG_EN_SPEECH_COMMAND_ID80
|
||||
#define MN_SPEECH_COMMAND_ID81 CONFIG_EN_SPEECH_COMMAND_ID81
|
||||
#define MN_SPEECH_COMMAND_ID82 CONFIG_EN_SPEECH_COMMAND_ID82
|
||||
#define MN_SPEECH_COMMAND_ID83 CONFIG_EN_SPEECH_COMMAND_ID83
|
||||
#define MN_SPEECH_COMMAND_ID84 CONFIG_EN_SPEECH_COMMAND_ID84
|
||||
#define MN_SPEECH_COMMAND_ID85 CONFIG_EN_SPEECH_COMMAND_ID85
|
||||
#define MN_SPEECH_COMMAND_ID86 CONFIG_EN_SPEECH_COMMAND_ID86
|
||||
#define MN_SPEECH_COMMAND_ID87 CONFIG_EN_SPEECH_COMMAND_ID87
|
||||
#define MN_SPEECH_COMMAND_ID88 CONFIG_EN_SPEECH_COMMAND_ID88
|
||||
#define MN_SPEECH_COMMAND_ID89 CONFIG_EN_SPEECH_COMMAND_ID89
|
||||
#define MN_SPEECH_COMMAND_ID90 CONFIG_EN_SPEECH_COMMAND_ID90
|
||||
#define MN_SPEECH_COMMAND_ID91 CONFIG_EN_SPEECH_COMMAND_ID91
|
||||
#define MN_SPEECH_COMMAND_ID92 CONFIG_EN_SPEECH_COMMAND_ID92
|
||||
#define MN_SPEECH_COMMAND_ID93 CONFIG_EN_SPEECH_COMMAND_ID93
|
||||
#define MN_SPEECH_COMMAND_ID94 CONFIG_EN_SPEECH_COMMAND_ID94
|
||||
#define MN_SPEECH_COMMAND_ID95 CONFIG_EN_SPEECH_COMMAND_ID95
|
||||
#define MN_SPEECH_COMMAND_ID96 CONFIG_EN_SPEECH_COMMAND_ID96
|
||||
#define MN_SPEECH_COMMAND_ID97 CONFIG_EN_SPEECH_COMMAND_ID97
|
||||
#define MN_SPEECH_COMMAND_ID98 CONFIG_EN_SPEECH_COMMAND_ID98
|
||||
#define MN_SPEECH_COMMAND_ID99 CONFIG_EN_SPEECH_COMMAND_ID99
|
||||
#define MN_SPEECH_COMMAND_ID100 CONFIG_EN_SPEECH_COMMAND_ID100
|
||||
#define MN_SPEECH_COMMAND_ID101 CONFIG_EN_SPEECH_COMMAND_ID101
|
||||
#define MN_SPEECH_COMMAND_ID102 CONFIG_EN_SPEECH_COMMAND_ID102
|
||||
#define MN_SPEECH_COMMAND_ID103 CONFIG_EN_SPEECH_COMMAND_ID103
|
||||
#define MN_SPEECH_COMMAND_ID104 CONFIG_EN_SPEECH_COMMAND_ID104
|
||||
#define MN_SPEECH_COMMAND_ID105 CONFIG_EN_SPEECH_COMMAND_ID105
|
||||
#define MN_SPEECH_COMMAND_ID106 CONFIG_EN_SPEECH_COMMAND_ID106
|
||||
#define MN_SPEECH_COMMAND_ID107 CONFIG_EN_SPEECH_COMMAND_ID107
|
||||
#define MN_SPEECH_COMMAND_ID108 CONFIG_EN_SPEECH_COMMAND_ID108
|
||||
#define MN_SPEECH_COMMAND_ID109 CONFIG_EN_SPEECH_COMMAND_ID109
|
||||
#define MN_SPEECH_COMMAND_ID110 CONFIG_EN_SPEECH_COMMAND_ID110
|
||||
#define MN_SPEECH_COMMAND_ID111 CONFIG_EN_SPEECH_COMMAND_ID111
|
||||
#define MN_SPEECH_COMMAND_ID112 CONFIG_EN_SPEECH_COMMAND_ID112
|
||||
#define MN_SPEECH_COMMAND_ID113 CONFIG_EN_SPEECH_COMMAND_ID113
|
||||
#define MN_SPEECH_COMMAND_ID114 CONFIG_EN_SPEECH_COMMAND_ID114
|
||||
#define MN_SPEECH_COMMAND_ID115 CONFIG_EN_SPEECH_COMMAND_ID115
|
||||
#define MN_SPEECH_COMMAND_ID116 CONFIG_EN_SPEECH_COMMAND_ID116
|
||||
#define MN_SPEECH_COMMAND_ID117 CONFIG_EN_SPEECH_COMMAND_ID117
|
||||
#define MN_SPEECH_COMMAND_ID118 CONFIG_EN_SPEECH_COMMAND_ID118
|
||||
#define MN_SPEECH_COMMAND_ID119 CONFIG_EN_SPEECH_COMMAND_ID119
|
||||
#define MN_SPEECH_COMMAND_ID120 CONFIG_EN_SPEECH_COMMAND_ID120
|
||||
#define MN_SPEECH_COMMAND_ID121 CONFIG_EN_SPEECH_COMMAND_ID121
|
||||
#define MN_SPEECH_COMMAND_ID122 CONFIG_EN_SPEECH_COMMAND_ID122
|
||||
#define MN_SPEECH_COMMAND_ID123 CONFIG_EN_SPEECH_COMMAND_ID123
|
||||
#define MN_SPEECH_COMMAND_ID124 CONFIG_EN_SPEECH_COMMAND_ID124
|
||||
#define MN_SPEECH_COMMAND_ID125 CONFIG_EN_SPEECH_COMMAND_ID125
|
||||
#define MN_SPEECH_COMMAND_ID126 CONFIG_EN_SPEECH_COMMAND_ID126
|
||||
#define MN_SPEECH_COMMAND_ID127 CONFIG_EN_SPEECH_COMMAND_ID127
|
||||
#define MN_SPEECH_COMMAND_ID128 CONFIG_EN_SPEECH_COMMAND_ID128
|
||||
#define MN_SPEECH_COMMAND_ID129 CONFIG_EN_SPEECH_COMMAND_ID129
|
||||
#define MN_SPEECH_COMMAND_ID130 CONFIG_EN_SPEECH_COMMAND_ID130
|
||||
#define MN_SPEECH_COMMAND_ID131 CONFIG_EN_SPEECH_COMMAND_ID131
|
||||
#define MN_SPEECH_COMMAND_ID132 CONFIG_EN_SPEECH_COMMAND_ID132
|
||||
#define MN_SPEECH_COMMAND_ID133 CONFIG_EN_SPEECH_COMMAND_ID133
|
||||
#define MN_SPEECH_COMMAND_ID134 CONFIG_EN_SPEECH_COMMAND_ID134
|
||||
#define MN_SPEECH_COMMAND_ID135 CONFIG_EN_SPEECH_COMMAND_ID135
|
||||
#define MN_SPEECH_COMMAND_ID136 CONFIG_EN_SPEECH_COMMAND_ID136
|
||||
#define MN_SPEECH_COMMAND_ID137 CONFIG_EN_SPEECH_COMMAND_ID137
|
||||
#define MN_SPEECH_COMMAND_ID138 CONFIG_EN_SPEECH_COMMAND_ID138
|
||||
#define MN_SPEECH_COMMAND_ID139 CONFIG_EN_SPEECH_COMMAND_ID139
|
||||
#define MN_SPEECH_COMMAND_ID140 CONFIG_EN_SPEECH_COMMAND_ID140
|
||||
#define MN_SPEECH_COMMAND_ID141 CONFIG_EN_SPEECH_COMMAND_ID141
|
||||
#define MN_SPEECH_COMMAND_ID142 CONFIG_EN_SPEECH_COMMAND_ID142
|
||||
#define MN_SPEECH_COMMAND_ID143 CONFIG_EN_SPEECH_COMMAND_ID143
|
||||
#define MN_SPEECH_COMMAND_ID144 CONFIG_EN_SPEECH_COMMAND_ID144
|
||||
#define MN_SPEECH_COMMAND_ID145 CONFIG_EN_SPEECH_COMMAND_ID145
|
||||
#define MN_SPEECH_COMMAND_ID146 CONFIG_EN_SPEECH_COMMAND_ID146
|
||||
#define MN_SPEECH_COMMAND_ID147 CONFIG_EN_SPEECH_COMMAND_ID147
|
||||
#define MN_SPEECH_COMMAND_ID148 CONFIG_EN_SPEECH_COMMAND_ID148
|
||||
#define MN_SPEECH_COMMAND_ID149 CONFIG_EN_SPEECH_COMMAND_ID149
|
||||
#define MN_SPEECH_COMMAND_ID150 CONFIG_EN_SPEECH_COMMAND_ID150
|
||||
#define MN_SPEECH_COMMAND_ID151 CONFIG_EN_SPEECH_COMMAND_ID151
|
||||
#define MN_SPEECH_COMMAND_ID152 CONFIG_EN_SPEECH_COMMAND_ID152
|
||||
#define MN_SPEECH_COMMAND_ID153 CONFIG_EN_SPEECH_COMMAND_ID153
|
||||
#define MN_SPEECH_COMMAND_ID154 CONFIG_EN_SPEECH_COMMAND_ID154
|
||||
#define MN_SPEECH_COMMAND_ID155 CONFIG_EN_SPEECH_COMMAND_ID155
|
||||
#define MN_SPEECH_COMMAND_ID156 CONFIG_EN_SPEECH_COMMAND_ID156
|
||||
#define MN_SPEECH_COMMAND_ID157 CONFIG_EN_SPEECH_COMMAND_ID157
|
||||
#define MN_SPEECH_COMMAND_ID158 CONFIG_EN_SPEECH_COMMAND_ID158
|
||||
#define MN_SPEECH_COMMAND_ID159 CONFIG_EN_SPEECH_COMMAND_ID159
|
||||
#define MN_SPEECH_COMMAND_ID160 CONFIG_EN_SPEECH_COMMAND_ID160
|
||||
#define MN_SPEECH_COMMAND_ID161 CONFIG_EN_SPEECH_COMMAND_ID161
|
||||
#define MN_SPEECH_COMMAND_ID162 CONFIG_EN_SPEECH_COMMAND_ID162
|
||||
#define MN_SPEECH_COMMAND_ID163 CONFIG_EN_SPEECH_COMMAND_ID163
|
||||
#define MN_SPEECH_COMMAND_ID164 CONFIG_EN_SPEECH_COMMAND_ID164
|
||||
#define MN_SPEECH_COMMAND_ID165 CONFIG_EN_SPEECH_COMMAND_ID165
|
||||
#define MN_SPEECH_COMMAND_ID166 CONFIG_EN_SPEECH_COMMAND_ID166
|
||||
#define MN_SPEECH_COMMAND_ID167 CONFIG_EN_SPEECH_COMMAND_ID167
|
||||
#define MN_SPEECH_COMMAND_ID168 CONFIG_EN_SPEECH_COMMAND_ID168
|
||||
#define MN_SPEECH_COMMAND_ID169 CONFIG_EN_SPEECH_COMMAND_ID169
|
||||
#define MN_SPEECH_COMMAND_ID170 CONFIG_EN_SPEECH_COMMAND_ID170
|
||||
#define MN_SPEECH_COMMAND_ID171 CONFIG_EN_SPEECH_COMMAND_ID171
|
||||
#define MN_SPEECH_COMMAND_ID172 CONFIG_EN_SPEECH_COMMAND_ID172
|
||||
#define MN_SPEECH_COMMAND_ID173 CONFIG_EN_SPEECH_COMMAND_ID173
|
||||
#define MN_SPEECH_COMMAND_ID174 CONFIG_EN_SPEECH_COMMAND_ID174
|
||||
#define MN_SPEECH_COMMAND_ID175 CONFIG_EN_SPEECH_COMMAND_ID175
|
||||
#define MN_SPEECH_COMMAND_ID176 CONFIG_EN_SPEECH_COMMAND_ID176
|
||||
#define MN_SPEECH_COMMAND_ID177 CONFIG_EN_SPEECH_COMMAND_ID177
|
||||
#define MN_SPEECH_COMMAND_ID178 CONFIG_EN_SPEECH_COMMAND_ID178
|
||||
#define MN_SPEECH_COMMAND_ID179 CONFIG_EN_SPEECH_COMMAND_ID179
|
||||
#define MN_SPEECH_COMMAND_ID180 CONFIG_EN_SPEECH_COMMAND_ID180
|
||||
#define MN_SPEECH_COMMAND_ID181 CONFIG_EN_SPEECH_COMMAND_ID181
|
||||
#define MN_SPEECH_COMMAND_ID182 CONFIG_EN_SPEECH_COMMAND_ID182
|
||||
#define MN_SPEECH_COMMAND_ID183 CONFIG_EN_SPEECH_COMMAND_ID183
|
||||
#define MN_SPEECH_COMMAND_ID184 CONFIG_EN_SPEECH_COMMAND_ID184
|
||||
#define MN_SPEECH_COMMAND_ID185 CONFIG_EN_SPEECH_COMMAND_ID185
|
||||
#define MN_SPEECH_COMMAND_ID186 CONFIG_EN_SPEECH_COMMAND_ID186
|
||||
#define MN_SPEECH_COMMAND_ID187 CONFIG_EN_SPEECH_COMMAND_ID187
|
||||
#define MN_SPEECH_COMMAND_ID188 CONFIG_EN_SPEECH_COMMAND_ID188
|
||||
#define MN_SPEECH_COMMAND_ID189 CONFIG_EN_SPEECH_COMMAND_ID189
|
||||
#define MN_SPEECH_COMMAND_ID190 CONFIG_EN_SPEECH_COMMAND_ID190
|
||||
#define MN_SPEECH_COMMAND_ID191 CONFIG_EN_SPEECH_COMMAND_ID191
|
||||
#define MN_SPEECH_COMMAND_ID192 CONFIG_EN_SPEECH_COMMAND_ID192
|
||||
#define MN_SPEECH_COMMAND_ID193 CONFIG_EN_SPEECH_COMMAND_ID193
|
||||
#define MN_SPEECH_COMMAND_ID194 CONFIG_EN_SPEECH_COMMAND_ID194
|
||||
#define MN_SPEECH_COMMAND_ID195 CONFIG_EN_SPEECH_COMMAND_ID195
|
||||
#define MN_SPEECH_COMMAND_ID196 CONFIG_EN_SPEECH_COMMAND_ID196
|
||||
#define MN_SPEECH_COMMAND_ID197 CONFIG_EN_SPEECH_COMMAND_ID197
|
||||
#define MN_SPEECH_COMMAND_ID198 CONFIG_EN_SPEECH_COMMAND_ID198
|
||||
#define MN_SPEECH_COMMAND_ID199 CONFIG_EN_SPEECH_COMMAND_ID199
|
||||
#endif
|
||||
char *get_id_name(int i);
|
||||
void reset_speech_commands(model_iface_data_t *model_data, char* command_str, char *err_phrase_id);
|
||||
@ -1,3 +1,74 @@
|
||||
#pragma once
|
||||
char *get_model_base_path(void);
|
||||
void srmodel_spiffs_init(void);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char **model_name; // the name of models, like "wn9_hilexin"(wakenet9, hilexin), "mn5_en"(multinet5, english)
|
||||
int num; // the number of models
|
||||
} srmodel_list_t;
|
||||
|
||||
#define MODEL_NAME_MAX_LENGTH 64
|
||||
|
||||
/**
|
||||
* @brief Return all avaliable models in spiffs or selected in Kconfig.
|
||||
*
|
||||
* @return all avaliable models in spiffs,save as srmodel_list_t.
|
||||
*/
|
||||
srmodel_list_t* esp_srmodel_init(void);
|
||||
|
||||
/**
|
||||
* @brief Free srmodel_list_t and unregister SPIFFS filesystem if open SPIFFS filesystem.
|
||||
*
|
||||
* @param models The srmodel_list_t point allocated by esp_srmodel_init function.
|
||||
*
|
||||
* @return all avaliable models in spiffs,save as srmodel_list_t.
|
||||
*/
|
||||
void esp_srmodel_deinit(srmodel_list_t *models);
|
||||
|
||||
/**
|
||||
* @brief Return the first model name containing the specified keywords
|
||||
* If keyword is NULL, we will ignore the keyword.
|
||||
*
|
||||
* @param models The srmodel_list_t point allocated by esp_srmodel_init function.
|
||||
* @param keyword1 The specified keyword1 , like ESP_WN_PREDIX(the prefix of wakenet),
|
||||
* ESP_MN_PREFIX(the prefix of multinet),
|
||||
*
|
||||
* @param keyword2 The specified keyword2, like ESP_MN_ENGLISH(the english multinet)
|
||||
* ESP_MN_CHINESE(the chinese multinet)
|
||||
* "alexa" (the "alexa" wakenet)
|
||||
* @return return model name if can find one model name containing the keywords otherwise return NULL.
|
||||
*/
|
||||
char *esp_srmodel_filter(srmodel_list_t *models, const char *keyword1, const char *keyword2);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Check whether the specified model name exists or not.
|
||||
*
|
||||
* @param models The srmodel_list_t point allocated by esp_srmodel_init function.
|
||||
* @param model_name The specified model name
|
||||
* @return return index in models if model name exists otherwise return -1
|
||||
*/
|
||||
int esp_srmodel_exists(srmodel_list_t *models, char *model_name);
|
||||
|
||||
/**
|
||||
* @brief Initialize and mount SPIFFS filesystem, return all avaliable models in spiffs.
|
||||
*
|
||||
* @return all avaliable models in spiffs,save as srmodel_list_t.
|
||||
*/
|
||||
srmodel_list_t *srmodel_spiffs_init(void);
|
||||
|
||||
/**
|
||||
* @brief unregister SPIFFS filesystem and free srmodel_list_t.
|
||||
*
|
||||
* @param models The srmodel_list_t point allocated by srmodel_spiffs_init function.
|
||||
*
|
||||
* @return all avaliable models in spiffs,save as srmodel_list_t.
|
||||
*/
|
||||
void srmodel_spiffs_deinit(srmodel_list_t *models);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Return base path of srmodel spiffs
|
||||
*
|
||||
* @return the base path od srmodel spiffs
|
||||
*/
|
||||
char *get_model_base_path(void);
|
||||
@ -1,8 +1,9 @@
|
||||
//Generated by mkmodel
|
||||
//Generated by mkmodel_py
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
#include "dl_lib_matrixq8.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_nihaoxiaoxin_wn5X3;
|
||||
extern const model_coeff_getter_t get_coeff_nihaoxiaoxin_wn5X3;
|
||||
@ -1,8 +0,0 @@
|
||||
//Generated by mkmodel
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_nihaoxiaoxin_wn6;
|
||||
@ -1,8 +1,9 @@
|
||||
//Generated by mkmodel
|
||||
//Generated by mkmodel_py
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
#include "dl_lib_matrixq8.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_nihaoxiaozhi_wn5;
|
||||
extern const model_coeff_getter_t get_coeff_nihaoxiaozhi_wn5;
|
||||
@ -1,8 +1,9 @@
|
||||
//Generated by mkmodel
|
||||
//Generated by mkmodel_py
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
#include "dl_lib_matrixq8.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_nihaoxiaozhi_wn5X2;
|
||||
extern const model_coeff_getter_t get_coeff_nihaoxiaozhi_wn5X2;
|
||||
@ -1,8 +1,9 @@
|
||||
//Generated by mkmodel
|
||||
//Generated by mkmodel_py
|
||||
#pragma once
|
||||
#include <string.h>
|
||||
#include "dl_lib_coefgetter_if.h"
|
||||
#include "dl_lib_matrix.h"
|
||||
#include "dl_lib_matrixq.h"
|
||||
#include "dl_lib_matrixq8.h"
|
||||
|
||||
extern const model_coeff_getter_t get_coeff_nihaoxiaozhi_wn5X3;
|
||||
extern const model_coeff_getter_t get_coeff_nihaoxiaozhi_wn5X3;
|
||||
@ -1,12 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#define SR_FLASH_TYPE 32
|
||||
#define SR_FLASH_SUBTYPE 32
|
||||
#define SR_FLASH_PARTITION_NAME "fr"
|
||||
#define SR_FLASH_INFO_FLAG 12138
|
||||
|
||||
int8_t speech_command_flash_init(void);
|
||||
int8_t enroll_speech_command_to_flash_with_id(char *phrase, int mn_command_id);
|
||||
int get_use_flag_from_flash();
|
||||
int get_enroll_num_from_flash();
|
||||
char *read_speech_command_from_flash(int i);
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user