⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eq.c

📁 ESS3890+SL原代码(1*16内存)
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Copyright 2001, ESS Technology, Inc. *//* SCCSID @(#)eq.c	4.8 06/16/03 *//* Based on VCD version 1.98 3/25/98 *//* * $Log$   */#ifdef EQUALIZER#include "common.h"#include "memmap.h"#include "display.h"#include "util.h"#include "mvd.h"#include "cg.h"#include "timedef.h"#include "vcxi.h"#include "dsa.h"#include "const.h"#include "filesys.h"#include "panel.h"#include "eq.h"#include "play.h"#ifdef MP3#include "mp3.h"#endif#if 0int bpt;#define BREAKPOINT(x) {bpt=x;while(bpt) VCX_service();}#else#define BREAKPOINT(x)#endif/************************************************************************ * Local OSD definitions						* ************************************************************************/#define EPRINTF(a) #define assert(a)#define SBS_KARA /* enable side-by-side music/mic spectrum */#define REFRESH_RATE			THIRTIETH_SECOND#define REFRESH_CHAR_MAX_NUMBER		4#define REFRESH_LOOP_MAX_TIMES		52#define EQ_DISP_BRING_BACK_TIME		(3*ONE_SECOND)#define EQ_BACK_GROUND_COLOR		1#define EQ_BACK_FRAME_COLOR		7#define EQ_FREQ_NORMAL_COLOR		6#define EQ_FREQ_NORMAL1_COLOR           5 #define EQ_FREQ_NORMAL2_COLOR           12 #define EQ_FREQ_MAX_COLOR		3#define EQ_FREQ_SELECT_COLOR 		8	#define EQ_FREQ_TEXT_SELECT_COLOR       8 #define EQ_DB_TEXT_COLOR		3	     #define EQ_FREQ_TEXT_COLOR		13	#define EQ_TITLE_BORDER_COLOR           1 #define EQ_TITLE_TEXT_COLOR		3/* position definitions */#define OSD_NORMAL_MSG_X        0#define OSD_NORMAL_MSG_Y        0/************************************************************************ * Local variables  ************************************************************************/#define EQ_DISP_INIT_X		5 /* char. position */#define EQ_DISP_INIT_Y		1 /* char. position */#ifdef SBS_KARA#define MIC_SPECTRUM_X		4 /* char. position */#define MIC_SPECTRUM_Y		1 /* char. position */#define MUSIC_SPECTRUM_X	14 /* char. position */#define MUSIC_SPECTRUM_Y	1 /* char. position */#else#define MIC_SPECTRUM_X		5 /* char. position */#define MIC_SPECTRUM_Y		5 /* char. position */#endifstatic int EQ_box_initx, EQ_box_inity; /* char position */static int initx_pixel, inity_pixel;static uint eq_timer;static unsigned char *eq_settings;#ifdef KARASCstatic uchar EQ_disc_icon = ICON_ADISC1;static SPECTRUM spectrum_data[2]; /* vocal & mic */#elsestatic SPECTRUM spectrum_data[1];#endif KARASC/************************************************************************ * Global variables declared in this module				* ************************************************************************//* Begin EQ variables */char OSD_eq_mode = 0; char EQ_levels[13] = {    EQ_LEVEL_ZERO,EQ_LEVEL_ZERO,EQ_LEVEL_ZERO,EQ_LEVEL_ZERO,EQ_LEVEL_ZERO,    EQ_LEVEL_ZERO,EQ_LEVEL_ZERO,EQ_LEVEL_ZERO,EQ_LEVEL_ZERO,EQ_LEVEL_ZERO,    EQ_LEVEL_ZERO,EQ_LEVEL_ZERO,EQ_LEVEL_ZERO};static unsigned char EQ_db_line[4] = {FONT_EQ_PLUS, FONT_EQ_DB0, FONT_EQ_DB, 0};static uchar EQ_lines[4][14];static int freq_bar_color[3] = {EQ_FREQ_NORMAL2_COLOR, EQ_FREQ_NORMAL1_COLOR, EQ_FREQ_NORMAL_COLOR}; #ifdef NO_BILINGUAL_OSD /* enable after we have the required Chinese fonts */ #define TOTAL_EQFX_MSG	(2*TOTAL_EQFX)#else#define TOTAL_EQFX_MSG	TOTAL_EQFX#endifunsigned char *OSD_eqfx_msg[TOTAL_EQFX_MSG] = {#ifdef MORE_ENV_TYPES    "GAME", "NIGHT", "MORNING", "PARTY",#endif    "STUDIO", "STADIUM", "CLUB", "MOVIE", "CHURCH", "HALL", "STANDARD",    "CLASSIC", "JAZZ", "ROCK", "POPS", "BALLAD", "DANCE", "PERSONAL",#ifdef NO_BILINGUAL_OSD#ifdef MORE_ENV_TYPES    {CN_HEADER,CN_KUAN1, CN_HEADER,CN_CHANG3,0}, /* game */    {CN_HEADER,CN_YE41, CN_HEADER,CN_QU3,0}, /* night */    {CN_HEADER,CN_CHEN2, CN_HEADER,CN_QU3,0}, /* morning */    {CN_HEADER,CN_YUAN2, CN_HEADER,CN_JU4, CN_HEADER,CN_CHANG3,0}, /* party */#endif MORE_ENV_TYPES    {CN_HEADER,CN_YIN1, CN_HEADER,CN_YUE4, CN_HEADER,CN_TING1,0}, /* studio */    {CN_HEADER,CN_TI3, CN_HEADER,CN_YU4, CN_HEADER,CN_CHANG3,0}, /* stadium */    {CN_HEADER,CN_XIAN4, CN_HEADER,CN_CHANG3,0}, /* club */    {CN_HEADER,CN_DIAN4, CN_HEADER,CN_YING3, CN_HEADER,CN_YUAN4,0}, /* movie */    {CN_HEADER,CN_JIAO4, CN_HEADER,CN_TANG2,0}, /* church */    {CN_HEADER,CN_DA4, CN_HEADER,CN_TING1,0}, /* hall */    {CN_HEADER,CN_BIAO1, CN_HEADER,CN_ZHUN3,0}, /* standard */    {CN_HEADER,CN_GU3, CN_HEADER,CN_DIAN3,0}, /* classic */    {CN_HEADER,CN_JUE2, CN_HEADER,CN_SHI4,0}, /* jazz */    {CN_HEADER,CN_YAO2, CN_HEADER,CN_GUN3,0}, /* rock */    {CN_HEADER,CN_LIU21, CN_HEADER,CN_XING2,0}, /* pops */    {CN_HEADER,CN_MIN2, CN_HEADER,CN_GE1,0}, /* ballad */    {CN_HEADER,CN_WU3, CN_HEADER,CN_QU3,0}, /* dance */    {CN_HEADER,CN_GE4, CN_HEADER,CN_XING4,0}, /* personal */#endif BILINGUAL_OSD};static uchar EQ_level2dbfont[13] = {    FONT_EQ_DB0,FONT_EQ_DB1,FONT_EQ_DB2,FONT_EQ_DB3,FONT_EQ_DB4,    FONT_EQ_DB5,FONT_EQ_DB6,FONT_EQ_DB7,FONT_EQ_DB8,FONT_EQ_DB9,    FONT_EQ_DB10,FONT_EQ_DB11,FONT_EQ_DB12};static uchar EQ_minus12_font[13] = {    FONT_EQ_60,FONT_EQ__,FONT_EQ_150,FONT_EQ__,FONT_EQ_400,FONT_EQ_0,    FONT_EQ_1K,FONT_EQ__,FONT_EQ_2K,FONT_EQ__,FONT_EQ_6K,FONT_EQ_1,FONT_EQ_5K};static uchar EQ_spectrum2font[8] = {    FONT_EQ_S1,FONT_EQ_S2,FONT_EQ_S3,FONT_EQ_S4,FONT_EQ_S5,FONT_EQ_S6,    FONT_EQ_S7,FONT_EQ_S8};uchar EQ_settings[] = {    /* Music environment effects..."12" == 0dB */    15, 12, 12, 15, 12, 10, 12, /* studio  */    18, 15, 13,  6,  9, 10, 15, /* stadium */    12, 13, 15, 15, 12, 12, 12, /* club    */    18, 14, 12, 15, 15, 13,  6, /* movie   */    12, 12, 12, 15, 15, 14, 12, /* church  */    18, 15, 13,  9,  9, 10, 12, /* hall    */     12, 12, 12, 12, 12, 12, 12, /* standard */     /* Music type effects. */    18, 13,  8,  3,  8, 13, 18, /* classic  */     0,  6, 14, 18, 14,  6,  0, /* jazz     */    18, 14,  4,  2,  4, 14, 18, /* rock     */    16, 18, 14,  7,  4,  7, 12, /* pops     */     8, 10, 14, 18, 10,  6,  4, /* ballad   */    18, 14, 12,  6,  8, 10, 12, /* dance    */};/* * EQ decline and delay parameters: * * alpha    : 32 > alpha[] > 0, larger value means lower decline. * *                                        alpha[] *    reverb alpha calculation: alpha = ----------- *                                          32 * * * DAE_delay: 19 * 384 > DAE_delay[] > 384, multiple of 384, larger value means longer delay. * *                                        DAE_delay[] *    Delay time calcuation:  Delay = -------------------- (s) *                                          44100  * * * index      0      1       2        3      4       5 * mode     studio  hall   church  stadium  movie    x * */char  alpha[6]     = {15,     14,       12,       10,       8,       5};short DAE_delay[6] = {14*384, 15 * 384, 16 * 384, 17 * 384, 18* 384, 19 * 384};/* End EQ variables..begin EQ functions */int eq_block_mapping(int freq_level);void eq_refresh_cal(int);void EQ_set_spectrum(int);void EQ_prep_spectrum(int);void eq_pixel_mapping(int freq, int freq_level, int *x, int *y){    /* get pixel coordinate */    *x = (freq<<4) + (freq<<3)+initx_pixel; /*48 + 24*freq + 1*/    *y = ((23 - freq_level)<<2)+inity_pixel; /* (23-level)*4 */}int eq_block_mapping(int freq_level){    int y;    if (freq_level == EQ_LEVEL_NEG12)        y = 3;    else if (freq_level<EQ_LEVEL_NEG3)        y = 2;    else if (freq_level<EQ_LEVEL_POS5)        y = 1;    else if (freq_level<=EQ_LEVEL_POS12)        y = 0;    else /* error */        y = -1;    return y;}void EQ_set_spectrum(int spectrum_index){    int i, sp_level, spmax_level;    SPECTRUM *sp_ptr;       if (spectrum_index == 1) EQ_volume_interp();     sp_ptr = &(spectrum_data[spectrum_index]);    for (i=EQ_60HZ; i <= EQ_15KHZ; i++) {	sp_ptr->sp_shadow[i] = sp_ptr->sp[i];	sp_ptr->sp_max_shadow[i] = sp_ptr->sp_max[i];    }    for (i=EQ_60HZ; i <= EQ_15KHZ; i+=2) {        sp_level = sp_ptr->data[i>>1];        if (sp_level > EQ_LEVEL_POS12) sp_level = EQ_LEVEL_POS12;        if (sp_level < 0) sp_level = 0;        sp_ptr->sp[i] = sp_level;        spmax_level = sp_ptr->sp_max[i];        /* new spectrum max */        sp_ptr->sp_max[i] = (sp_level>=spmax_level) ?            sp_level : spmax_level-1;    }    for (i=EQ_150HZ; i <= EQ_15KHZ; i+=2) {        /* Calculate intermediate levels */	sp_ptr->sp[i-1] = (sp_ptr->sp[i] + sp_ptr->sp[i-2])/2;	sp_level = sp_ptr->sp[i-1];	spmax_level = sp_ptr->sp_max[i-1];	sp_ptr->sp_max[i-1] = (sp_level >= spmax_level) ?	    sp_level : spmax_level-1;    }}void EQ_disp_spectrum(void){    uchar osdmsg[CG_LINE_WIDTH+1];    EQ_prep_spectrum(0);        /* only display "frequency" line (bottom) here */    ICON_charset_select(VWENGLISH_FONTS);    ICON_set_bkcolor(EQ_BACK_GROUND_COLOR);    CG_map_color_array(EQ_BACK_FRAME_COLOR, EQ_FREQ_TEXT_COLOR, 3);    strcpy(osdmsg, EQ_lines[3]);    CGI_text_show(osdmsg, EQ_box_initx, EQ_box_inity+3, -1, -1);    ICON_charset_restore();}void EQ_prep_spectrum(int ksc_mode){    int i;    SPECTRUM *sp_ptr1;#ifdef KARASC    SPECTRUM *sp_ptr2;#endif        sp_ptr1 = &(spectrum_data[0]);#ifdef KARASC    sp_ptr2 = &(spectrum_data[1]);#endif    for (i=EQ_60HZ; i <= EQ_15KHZ; i++) {	sp_ptr1->sp[i] = EQ_LEVEL_NEG12;	sp_ptr1->sp_max[i] = EQ_LEVEL_NEG11;#ifdef KARASC	sp_ptr2->sp[i] = EQ_LEVEL_NEG12;	sp_ptr2->sp_max[i] = EQ_LEVEL_NEG11;#endif	EQ_lines[0][i] = FONT_EQ_LEV0;	EQ_lines[1][i] = FONT_EQ_LEV0;	EQ_lines[2][i] = FONT_EQ_LEV0;        /* Freq indicator level font */        EQ_lines[3][i] = EQ_minus12_font[i];    }    #ifdef SBS_KARA     if (ksc_mode) {	/* insert zero-termination for side-by-side display */	EQ_lines[0][7] = 0;	EQ_lines[1][7] = 0;	EQ_lines[2][7] = 0;    }#endif}void EQ_adj(int freq, int freq_level){    int i, x, x1, y, y1,y2,y3, level, font, extra_map;    unsigned int color, color1;    ICON_charset_select(VWENGLISH_FONTS);    ICON_set_bkcolor(EQ_BACK_GROUND_COLOR);    for (i = 0; i < 3; i++) {        if (i == 1) {            /* next intermediate freq */            if (freq != EQ_15KHZ) {                freq_level = (int)(EQ_levels[freq]+EQ_levels[freq+2])/2;     	        freq++;            } else {                freq++;                continue;            }        } else if (i == 2) {            freq--; /* center freq */            /* previous intermediate freq */            if (freq != EQ_60HZ) {                freq_level = (int)(EQ_levels[freq]+EQ_levels[freq-2])/2;                 freq--;            } else                break;        } else { /* (i==0) center freq */            eq_level[freq>>1] = freq_level; /* -1-23 -> 0-24 */            freq_level--; /* 0-24 -> -1-23 */            eq_change_gain = 1;        }        color = EQ_FREQ_TEXT_COLOR; /* green..for new level */        color1 = EQ_FREQ_NORMAL_COLOR; /* green..for new level */	if (freq == EQ_cur_freq) {	    color = EQ_FREQ_TEXT_SELECT_COLOR; /* yellow.. */	    color1 = (EQ_music_type_effect == EQFX_PERSONAL) 		? EQ_FREQ_SELECT_COLOR  /* yellow..for personal settings */		: EQ_FREQ_NORMAL_COLOR;	} else if ((freq+1==EQ_cur_freq&&EQ_cur_freq==EQ_15KHZ) ||		   (freq-1==EQ_cur_freq&&EQ_cur_freq==EQ_400HZ)) {	    color = EQ_FREQ_TEXT_SELECT_COLOR; /* yellow.. */	}	        if (freq == EQ_400HZ)            extra_map = 1;        else if (freq == EQ_15KHZ) {            extra_map = -1;        } else             extra_map = 0;        /* get pixel coordinate and paint new level */        level = (int)EQ_levels[freq];        font = (level == EQ_LEVEL_NEG12) ?            EQ_minus12_font[freq] : FONT_EQ_LEV0;        y = eq_block_mapping(level);        eq_pixel_mapping(freq, freq_level, &x1, &y1);        y2 = inity_pixel + y*32;	y3 = inity_pixel + 96;        /* draw freq data */         CG_map_color_array(EQ_BACK_FRAME_COLOR, color, 3);	GI_icon_show(EQ_minus12_font[freq], x1, y3);        if (extra_map)            GI_icon_show(EQ_minus12_font[freq+extra_map], x1+extra_map*24, y3);        if (y!=3) /* erase background */            GI_icon_show(font, x1, y2);   	/* draw bar */	OSD_area_fill(x1+2, y1, x1+22, y1+2, color1);        EQ_levels[freq] = freq_level;    }    ICON_charset_restore();}void EQ_show_db(int freq){    uchar osdmsg[CG_LINE_WIDTH+1];    int level, sign_ft, x, y;    level = EQ_levels[freq];    if (level > EQ_LEVEL_ZERO) {        /* level > 0 */        level = level-11;        sign_ft = FONT_EQ_PLUS;    } else {        /* level <= 0 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -