Files
2025-12-03 11:12:34 +08:00

75 lines
2.4 KiB
C

#ifndef _AUDIO_DVOL_H_
#define _AUDIO_DVOL_H_
#include "generic/typedef.h"
#include "os/os_type.h"
#include "os/os_api.h"
#include "generic/list.h"
#define DVOL_RESOLUTION 14
#define DVOL_MAX 16384
#define DVOL_MAX_FLOAT 16384.0f
#define BG_DVOL_FADE_ENABLE 0 /*多路声音叠加,背景声音自动淡出小声*/
#define DIGITAL_VOLUME_LEVEL_MAX 200 //默认的音量等级限制设成200
/*Digital Volume Channel*/
#define MUSIC_DVOL 0b00001
#define CALL_DVOL 0b00010
#define TONE_DVOL 0b00100
#define RING_DVOL 0b01000
#define KEY_TONE_DVOL 0b10000
/*Digital Volume Fade Step*/
#define MUSIC_DVOL_FS 2
#define CALL_DVOL_FS 4
#define TONE_DVOL_FS 30
/*Digital Volume Max Level*/
#define MUSIC_DVOL_MAX 16
#define CALL_DVOL_MAX 15
#define TONE_DVOL_MAX 16
struct audio_vol_params {
u16 vol;
u16 vol_max;
u16 fade_step;
s16 vol_limit;
u8 bit_wide;
};
typedef struct {
u8 toggle; /*数字音量开关*/
u8 fade; /*淡入淡出标志*/
u16 vol; /*淡入淡出当前音量(level)*/
u16 vol_max; /*淡入淡出最大音量(level)*/
s16 vol_limit; /*最大数字音量限制*/
s16 vol_fade; /*淡入淡出对应的起始音量*/
#if BG_DVOL_FADE_ENABLE
s16 vol_bk; /*后台自动淡出前音量值*/
struct list_head entry;
#endif/*BG_DVOL_FADE_ENABLE*/
volatile s16 vol_target; /*淡入淡出对应的目标音量*/
volatile u16 fade_step; /*淡入淡出的步进*/
float cfg_vol_min; /*最小音量的分贝数*/
float cfg_vol_max; /*最小音量的分贝数*/
u16 cfg_level_max; /*最大音量等级*/
u8 vol_table_custom; /*是否使用外部工具读取的音量表*/
u8 vol_table_default; /*是否使用默认的音量表*/
u8 mute_en; /*是否将数据设成0*/
u8 bit_wide; /*数据位宽*/
float *vol_table; /*自定义音量表*/
} dvol_handle;
int audio_digital_vol_init(u16 *vol_table, u16 vol_max);
void audio_digital_vol_bg_fade(u8 fade_out);
dvol_handle *audio_digital_vol_open(struct audio_vol_params params);
void audio_digital_vol_close(dvol_handle *dvol);
void audio_digital_vol_set(dvol_handle *dvol, u16 vol);
void audio_digital_vol_mute_set(dvol_handle *dvol, u8 mute_en);
int audio_digital_vol_run(dvol_handle *dvol, void *data, u32 len);
void audio_digital_vol_reset_fade(dvol_handle *dvol);
#endif/*_AUDIO_DVOL_H_*/