4G_module/include/cmiot/cm_audio_recorder.h

173 lines
5.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file cm_audio_recorder.h
* @brief Audio recorder接口
* @copyright Copyright © 2021 China Mobile IOT. All rights reserved.
* @author By WangPeng
* @date 2021/4/12
*
* @defgroup audio_recorder
* @ingroup audio_recorder
* @{
*/
#ifndef __OPENCPU_AUDIO_RECORDER_H__
#define __OPENCPU_AUDIO_RECORDER_H__
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdint.h>
#include "cm_audio_common.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Public Types
****************************************************************************/
/** 录音通道支持 */
typedef enum
{
CM_AUDIO_RECORD_CHANNEL_MAIN = 1, /*!< 主MIC通道不支持设置 */
CM_AUDIO_RECORD_CHANNEL_HP, /*!< 耳机MIC通道不支持设置 */
#if 0
CM_AUDIO_RECORD_CHANNEL_REMOTE, /*!< 从远端通话中录音(需建立通话) */
#endif
} cm_audio_record_channel_e;
/** 录音回调的事件类型 */
typedef enum
{
CM_AUDIO_RECORD_EVENT_DATA = 1, /*!< 录音数据上报 */
#if 0
CM_AUDIO_RECORD_EVENT_FINISHED, /*!< 录音结束 */
CM_AUDIO_RECORD_EVENT_INTERRUPT, /*!< 录音中断 */
#endif
} cm_audio_record_event_e;
/** 录音设置类型 */
typedef enum
{
CM_AUDIO_RECORD_CFG_CHANNEL = 1, /*!< 录音通道支持范围参见cm_audio_record_channel_e枚举量不支持设置 */
CM_AUDIO_RECORD_CFG_GAIN, /*!< 录音增益,不支持设置 */
} cm_audio_record_cfg_type_e;
/*
* 录音数据结构体
*/
typedef struct
{
uint8_t *data; /*!< 录音数据 */
uint32_t len; /*!< 录音数据长度 */
void *user; /*!< 用户传入参数 */
} cm_audio_record_data_t;
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/**
* @brief 录音回调函数
*
* @param [in] event 事件类型
* @param [in] param 事件参数事件类型为CM_AUDIO_RECORD_DATA时需要将param强转为cm_audio_record_data_t型。其余情况该参数为用户传入参数
*
* @details 须在录音API中传入 \n
* 通知事件为中断触发不可阻塞不可做耗时较长的操作例如不可使用UART打印log
*/
typedef void (*cm_audio_record_callback_t)(cm_audio_record_event_e event, void *param);
/**
* @brief 设置录音参数
*
* @param [in] type 设置参数类型
* @param [in] value 设置参数数值
*
* @return
* = 0 - 成功 \n
* = -1 - 失败
*
* @details 增益调节范围为0~48呈线性关系非录音状态下该参数设置后保持至本地缓存中不会立即生效应用调用cm_audio_recorder_start()后方才生效,暂不支持 \n
* 0 -36dB \n
* 12 -24dB \n
* 24 -12dB \n
* 36 0dB \n
* 48 12dB \n
* 不支持设置录音通道模组仅一个录音通道默认使用该通道该通道外接mic/耳机mic由用户决定 \n
* 仅8M版本ML307A-DSLN ML307A-GSLN ML305A-DS支持audio功能
*/
int32_t cm_audio_record_set_cfg(cm_audio_record_cfg_type_e type, void *value);
/**
* @brief 读取录音参数
*
* @param [in] type 读取参数类型
* @param [out] value 读取参数数值
*
* @return
* = 0 - 成功 \n
* = -1 - 失败
*
* @details 增益调节范围为0~48呈线性关系录音状态下读取实际值非录音状态下读取本地缓存中的值暂不支持 \n
* 0 -36dB \n
* 12 -24dB \n
* 24 -12dB \n
* 36 0dB \n
* 48 12dB \n
* 不支持获取录音通道模组仅一个播放通道默认使用该通道该通道外接mic/耳机mic由用户决定 \n
* 仅8M版本ML307A-DSLN ML307A-GSLN ML305A-DS支持audio功能
*/
int32_t cm_audio_record_get_cfg(cm_audio_record_cfg_type_e type, void *value);
/**
* @brief 开始录音
*
* @param [in] format 录制音频格式
* @param [in] sample_param 录制音频PCM采样参数
* @param [in] cb 录音回调函数(回调函数不能阻塞)
* @param [in] cb_param 用户参数参见cm_audio_record_callback回调函数中param参数描述长度最大为8
*
* @return
* = 0 - 成功 \n
* = -1 - 失败
*
* @details 回调函数不能阻塞支持PCM和AMR格式 \n
* 通知事件为中断触发不可阻塞不可做耗时较长的操作例如不可使用UART打印log \n
* 仅8M版本ML307A-DSLN ML307A-GSLN ML305A-DS支持audio功能
*/
int32_t cm_audio_recorder_start(cm_audio_record_format_e format, cm_audio_sample_param_t *sample_param, cm_audio_record_callback_t cb, void *cb_param);
/**
* @brief 结束录音
*
* @details 仅8M版本ML307A-DSLN ML307A-GSLN ML305A-DS支持audio功能
*/
void cm_audio_recorder_stop(void);
#undef EXTERN
#ifdef __cplusplus
}
#endif
#endif
/** @}*/