← 返回文档

初始化与配置

配置结构

通过 cry_detect_config_t(定义在 cry_detect.h 中)配置 SDK:

typedef struct {
    const char *engine_type;           // "pure_c" | "svp_acl" | "magik" | "int8"
    const char *weight_path;           // 模型权重路径 (.bin / .om / .mgk)
    const char *capture_type;          // "mpp" | "imp" | "file"
    int         silence_rms_threshold; // 静音检测阈值,0=禁用,50=默认
    cry_detect_callback_t  callback;   // 结果回调(可为 NULL)
    void       *callback_data;         // 回调用户数据
    const char *alarm_strategy;        // 告警策略名,"asymmetric_envelope" 或 NULL
    const char *alarm_params;          // 策略参数 "k1=v1,k2=v2",NULL=默认值
    alarm_callback_t alarm_callback;   // 告警事件回调
    void       *alarm_callback_data;   // 告警回调用户数据
} cry_detect_config_t;

所有字段均为可选——传入 NULL(或 0)使用默认值。默认引擎和采集类型由构建系统在编译时确定(参见 config.h)。

初始化流程

// 1. 创建配置(或传 NULL 全部使用默认值)
cry_detect_config_t config = {
    .engine_type     = "pure_c",
    .weight_path     = "./model_weights.bin",
    .callback        = my_callback,
    .callback_data   = &my_context,
    .alarm_strategy  = "asymmetric_envelope",
    .alarm_callback  = my_alarm_callback,
};

// 2. 初始化
int ret = cry_detect_init(&config);
if (ret < 0) {
    // 处理错误(如模型文件未找到、不支持的引擎)
    return ret;
}

// 3. 启动实时检测
ret = cry_detect_start();
if (ret < 0) {
    // 处理错误(如音频设备不可用)
    cry_detect_deinit();
    return ret;
}

// 4. 检测在后台运行——结果通过回调到达
// 您的应用程序可以在此处执行其他工作

// 5. 停止检测
cry_detect_stop();

// 6. 清理资源
cry_detect_deinit();

编译期配置 (`config.h`)

音频参数定义在 config.h 中,必须与训练配置一致:

参数
值
说明
`CRY_SAMPLE_RATE`
16000
采样率(Hz)
`CRY_BIT_WIDTH`
16
位深
`CRY_SOUND_MODE`
1
单声道
`CRY_FRAME_TIME_SEC`
5
帧大小(秒)
`CRY_FRAME_STEP_SEC`
1
步长(秒,4 秒重叠)
`AUDIO_BUF_SLOTS`
10
环形缓冲 slot 数(~10 秒)
`AUDIO_SLOT_SAMPLES`
15975
每 slot 采样数(~1 秒)

平台特定的音频参数(设备 ID、帧大小)根据 AUDIO_CAPTURE_* 宏自动选择。

默认后端选择

构建脚本定义编译到固件中的后端:

预处理器宏
默认引擎
默认采集
`ENGINE_SVP_ACL`
`"svp_acl"`
`"mpp"`
`ENGINE_MAGIK`
`"magik"`
`"imp"`
`ENGINE_INT8`
`"int8"`
`"file"`
(无)
`"pure_c"`
`"file"`

文件处理模式

无需麦克风,直接用 WAV 文件测试:

cry_detect_init(NULL);  // 全部默认
cry_detect_process_file("test.wav");
cry_detect_deinit();

适用于 PC 离线测试或 CI 自动化验证。