原创 MP3音频频谱显示的实现_模拟^_^

2010-4-10 23:35 4431 12 13 分类: 软件与OS

关于获取音频频谱,是需要经过FFT变化才能得到各频谱的分量真实的幅度值的。类似千千静听那样的频谱显示。然而进行FFT变换需要一定的RAM资源和MCU的速度够快才能处理大量的数据。对普通MCU来说真是望洋兴叹了,无可奈何。由于对频谱显示有点兴趣,所以做了一个模拟千千静听那样显示的频谱(本次只是做8段,千千静听显示的是14段),频谱是取随机值的来模拟的,所以得到的只是模拟的频谱,如果需要真实的频谱,那得另外挂个协处理器来处理FFT数据了。


如图所示:


点击看大图


点击看大图


从图中可以看出,显示的频谱是随着MP3的音乐跳动的(这次模拟是带有MP3播放器功能的,可以播放音乐)。如果频谱是真实的数值(也就是音频信号经过FFT变换后获取频谱分量的模值),然后经过一定的量化和处理,,即可得到类似千千静听的那样的效果了。


关于这次显示频谱段的代码,其实很简单。下面贴出来,作个交流吧。 ^_^


==========================================


.........


     for (ii=0; ii<8;ii++)//8段频谱段显示
  {
       if (FREQ[ii]==0) FREQ[ii]=1;
    if (FREQ[ii]>32) FREQ[ii]=32;
       dif="32-FREQ"[ii];
    Cnt="0";
    y="tmp";
    if (dif>0)
    {
          while(dif>0)  //6点宽为一频谱段
       {
          for (len=0;len<6;len++) DrawDotsINT(x+len,y+Cnt,0);
    Cnt++;
       dif--;
       }
    }
    if (LastFREQ[ii]>0) //补画坠落点
    {  
        for (len=0;len<6;len++) DrawDotsINT(x+len,y+LastFREQ[ii],1);
     LastFREQ[ii]-=1;
    }
    if (FREQ[ii]>0)
    {
        LastFREQ[ii]=Cnt;  //保存初始坠落点
           while(FREQ[ii]>0)
        {
           for (len=0;len<6;len++)
            DrawDotsINT(x+len,y+Cnt,1);
         Cnt++;
         FREQ[ii]--;
        }
    }
    x+=7;
  }


.........

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2010-4-11 01:25

哈哈,学习了
相关推荐阅读
用户1369714 2012-04-12 12:34
大家好,我是itspy,关于这个博客,请大家看过来!
大家好,我是itspy,关于这个博客...,很失望,以后不会用了 如果大家有什么问题,请到我的另一个博客去留言吧 我也很希望跟大家做交流,有什么技术问题,itspy会很乐意帮助的,新博客欢...
用户1369714 2011-08-07 14:35
uip 移植在rt-thread上的源码
*/本人在以前开发过程中移植uIP到RT-Thread实时线程系统,有需要用到项目中的朋友可以参考一下。 附件是源码包,在以太网驱动采用DM9000,驱动程序和移植文件uipif.c在源码包下(rt...
用户1369714 2011-01-13 10:32
Linux内核的社会视角--Mr. Process的一生
         Linux内核是一个无比复杂的系统,要想看清大致的脉络也非易事。其实,可以把运行中的Linux想像成一个人类的社会,当中的进程就是社会中的人。人有生老病死,进程有创建、异常、终止。人...
用户1369714 2011-01-08 12:39
RT-Thread Radio 网络播放器--初次零距离接触!
      今天很高兴, 收到了RT-Thread Radio套件,还有ffx和RT-Thread工作室写的新书《RT-Thread 实时操作系统 编程指南》。 如此令人快乐的事,如此高兴,实在是想不...
用户1369714 2011-01-05 15:43
如何编写linux的驱动程序
如何编写Linux的驱动程序编写linux驱动程序,应该是一件得心应手的事,因为linux是开源的,从上往下或从下往上,一切都是那么的光明磊落的呈现于眼前。只要你愿意,你可随意了解你所想知道的东西。L...
用户1369714 2010-12-28 10:12
Busybox制作Linux根文件系统
Busybox ——嵌入式Linux中的瑞士军刀利用busybox-1.13.0制作linux根文件系统(yaffs2)源码下载:http://www.busybox.net/downloads/操作...
我要评论
1
12
关闭 站长推荐上一条 /2 下一条