迪文科技论坛

 找回密码
 立即注册
搜索
查看: 40|回复: 0

【开源】EQ 均衡效果器

[复制链接]

10

主题

15

回帖

967

积分

高级会员

Rank: 4

积分
967
QQ
发表于 7 天前 | 显示全部楼层 |阅读模式
   EQ 均衡效果器
主要是用了一个可以10段EQ调节的杰理板子,写了一个串中代码接口,用迪文屏的串口4和均衡效果器板子进行连接,然后通过T5L 的OS进行数据处理,再发送到均衡效果器板子上面进行调节,屏幕的分辨率是800X480,调节的效果音乐,可以用U盘播放,也可以通过手机蓝牙进行播放。

下面效果地址,调节EQ音乐效果明显,大家可以看下
https://v.youku.com/v_show/id_XNjQ1MDgyMjQ0OA==.html
下面是图片



简单介绍下输入参数
中心频率,为需要EQ调节的频率 ,范围,20 最小 ,22000最大
增益,为放大或者衰减,范围为 0最小,36最大,18为中间
Q/S为斜率,数值越大,越陡峭

人声一般频率在1K到5K HZ之间,调节这个人声会变化明显
如果有低声,低音一般在200~600HZ左右,调节这个低频会比较明显变化

迪文屏幕的主要代码如下:
       INIT_CPU();  //系统初始化
       PORT_Init();//IO口初始化

       T0_Init();//定时器0初始化
//     T1_Init();
       T2_Init();//定时器2初始化
//     WDT_ON();           //打开开门狗 喂狗在定时器T2中      
       my_UART4_Init(115200);
       uart_init();//串口初始化

ws2812_writ_byte(8); //LED初始化
       resetEQValue();
       updateEQPage();

       delay_ms(1000);
       ChangePage(1);

void TenMsHandle(void)
{
       if(!TenmsFlag)
              return;
       TenmsFlag=0;

       EQChangeSend();

//     Led_CtrIO();
}

void EQChangeSend(void)
{
       u8Read[10*3][2];
       u8i=0;
       u16fre1=0;
       u8  Gain=0;
       u8   QS=0;

       memset(Read,0,sizeof(Read));
       Read_Dgusii_Vp(0x1200,Read,30);

       for(i=0;i<10;i++)
       {
              fre1=Read[i*3+0][0]<<8|Read[i*3+0][1];
              Gain=Read[i*3+1][1];
              QS=Read[i*3+2][1];

              if(fre1!=EQv.Cfre||
                      Gain!=EQv.Gain||
                      QS!=EQv.QS)
              {
                     EQSenddata(i,fre1,Gain,QS);

                     EQv.Cfre=fre1;
                     EQv.Gain=Gain;
                     EQv.QS=QS;
              }
       }
}

均衡效果器,板子的主要代码如下:

case 0x0b://更新EQ值
            if(data[2]>9)
               break;
            structeq_seg_info *tar_seg1=&music_mode.eq_parm.seg[data[2]];
            u32eq_name = 7;
            u16fre1=data[3]<<8|data[4];
            floatgain1=((data[5]&0x7f)*100+data[6]);
           gain1/=100;
            if(data[5]>=0X80)
               gain1=-gain1;
            floatQ1=(data[7]*100+data[8]);
           Q1/=100;
           tar_seg1->freq=fre1;
           tar_seg1->gain=gain1;
           tar_seg1->q=Q1;

           cur_eq_set_update(eq_name, tar_seg1, get_eq_nsection(eq_name), 0);
break;

好的大概介绍到这里,有兴趣想法的自已下载,代码全开源。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-1-22 18:07 , Processed in 0.065696 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表