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

📄 subspecanal.c

📁 这是市场上采用瑞芯微方案的蓝魔MP4的源代码,是我好不容易弄来与大家分享的,一起来研究学习.
💻 C
字号:
/************************************************************
  Copyright (C), 2005-2006, ROCK-CHIPS Semi. Co., Ltd.
  FileName: subspecanal.c
  Author:Huangxudong        Version :1.0     Date:2005-10-7
  Description:      ??pcm????????????????????,??????????10??
  ??????????      
  Version:          1.0
  Function List:   
    1. specline10()  ??pcm????????????128??????????????????10??
    ??????DB??          
***********************************************************/

#include <stdio.h>

#define  FFTSIZE     128
#define  Nums_Band   64

void   fft128(short *fftinbuffer,short k);

__attribute__((section(".mp3_text,\"ax\"")))
specline10(long *bufferin,short *yline10)//????????long??,????codec32??????
{
  long  fftspec[Nums_Band];
  long  powervalue1,powervalue2,powervalue3;
  short  y10log10[Nums_Band];
  short fftinfirst[256];
  short fftinsecond[256];
  short fftinthird[256];
  short i,k;
  //arrange real,imag of pcm data
  for(i=0;i<FFTSIZE*2;i=i+2)
  {
    	k=i;                              //k=i/2;
    	fftinfirst[i]=bufferin[k]>>21;     //fftinfirst[i]=bufferin[k]>>5;
    	fftinfirst[i+1]=0;                //fftinfirst[i+1]=0;
    	fftinsecond[i]=bufferin[256+k]>>21;//fftinsecond[i]=bufferin[128+k]>>5;
    	fftinsecond[i+1]=0;               //fftinsecond[i+1]=0;
    	fftinthird[i]=bufferin[512+k]>>21; //fftinthird[i]=bufferin[256+k]>>5;
    	fftinthird[i+1]=0;                //fftinthird[i+1]=0;
  }
  
  
    //128-pointers' fft for pcm data  
    fft128(fftinfirst,k);
    fft128(fftinsecond,k);
    fft128(fftinthird,k);
	  
	  //solve spectrum value
	  for(i=0;i<Nums_Band*2;i=i+2)
	    {
	     //compute real^2+imag^2	????????
	     powervalue1=(long)fftinfirst[i]*fftinfirst[i]+(long)fftinfirst[i+1]*fftinfirst[i+1];
	     powervalue2=(long)fftinsecond[i]*fftinsecond[i]+(long)fftinsecond[i+1]*fftinsecond[i+1];
	     powervalue3=(long)fftinthird[i]*fftinthird[i]+(long)fftinthird[i+1]*fftinthird[i+1];
	     fftspec[i>>1]=(powervalue1>powervalue2)?powervalue1:powervalue2;
	     if(fftspec[i>>1]<powervalue3)
	     	   fftspec[i>>1]=powervalue3;
       //20 level freq power
       if(fftspec[i>>1]>=630957346)
                 y10log10[i>>1]=11;
       if(fftspec[i>>1]>=398107172&&fftspec[i>>1]<630957346)
       	          y10log10[i>>1]=11;
       if(fftspec[i>>1]>=251188645&&fftspec[i>>1]<398107172)
       	          y10log10[i>>1]=11;
       if(fftspec[i>>1]>=158489319&&fftspec[i>>1]<251188645)
       	          y10log10[i>>1]=10;	 
       if(fftspec[i>>1]>=99999999&&fftspec[i>>1]<158489319)
       	          y10log10[i>>1]=10;	
       if(fftspec[i>>1]>=63095734&&fftspec[i>>1]<99999999)
       	          y10log10[i>>1]=9;       	                             
       if(fftspec[i>>1]>=39810717&&fftspec[i>>1]<63095734)
       	          y10log10[i>>1]=9;       
       if(fftspec[i>>1]>=25118864&&fftspec[i>>1]<39810717)
       	          y10log10[i>>1]=8;
       if(fftspec[i>>1]>=15848931&&fftspec[i>>1]<25118864)
       	          y10log10[i>>1]=8;
       if(fftspec[i>>1]>=9999999&&fftspec[i>>1]<15848931)
       	          y10log10[i>>1]=7;   
       if(fftspec[i>>1]>=6309573&&fftspec[i>>1]<9999999)
       	          y10log10[i>>1]=7;
       if(fftspec[i>>1]>=3981071&&fftspec[i>>1]<6309573)
       	          y10log10[i>>1]=6;
       if(fftspec[i>>1]>=2511886&&fftspec[i>>1]<3981071)
       	          y10log10[i>>1]=6;	 
       if(fftspec[i>>1]>=1584893&&fftspec[i>>1]<2511886)
       	          y10log10[i>>1]=5;	
       if(fftspec[i>>1]>=999999&&fftspec[i>>1]<1584893)
       	          y10log10[i>>1]=5;       	                             
       if(fftspec[i>>1]>=630957&&fftspec[i>>1]<999999)
       	          y10log10[i>>1]=4;       
       if(fftspec[i>>1]>=398107&&fftspec[i>>1]<630957)
       	          y10log10[i>>1]=4;
       if(fftspec[i>>1]>=251188&&fftspec[i>>1]<398107)
       	          y10log10[i>>1]=3;
       if(fftspec[i>>1]>=158489&&fftspec[i>>1]<251188)
       	          y10log10[i>>1]=2;   
       if(fftspec[i>>1]>=63096&&fftspec[i>>1]<158489)
       	          y10log10[i>>1]=1;         	               	          
       if(fftspec[i>>1]<63096)
       	          y10log10[i>>1]=0;	            
      }
	   //choose 22 bands  spectrum line  
        for(i=0;i<16;i++)                            
	   {                                            
	   	/*yline10[i]=(yline10[i] + (y10log10[i] * 3))>>2;  */
            yline10[i]=  y10log10[i];
	   }                                            
/*	   yline10[10]=y10log10[9];//4128hz
	   yline10[11]=y10log10[10];//5160hz
	   yline10[12]=y10log10[11];//5848hz
	   yline10[13]=y10log10[12];//6880hz	  
	   yline10[14]=y10log10[13];//7912hz
	   yline10[15]=y10log10[14];//8944hz
	   yline10[16]=y10log10[15];//9976hz
	   yline10[17]=y10log10[16];//12040hz
	   yline10[18]=y10log10[17];//14104hz
	   yline10[19]=y10log10[23];//
	   yline10[20]=y10log10[30];//
	   yline10[21]=y10log10[35];//12000hz
*/
/*
	   for(i=0;i<10;i++)
	   {
	   	yline10[i]=y10log10[i];
	   }
	   yline10[10]=y10log10[12];
	   yline10[11]=y10log10[15];
	   yline10[12]=y10log10[17];
	   yline10[13]=y10log10[20];	  
	   yline10[14]=y10log10[23];
	   yline10[15]=y10log10[26];
	   yline10[16]=y10log10[29];
	   yline10[17]=y10log10[35];
	   yline10[18]=y10log10[41];
	   yline10[19]=y10log10[47];
	   yline10[20]=y10log10[52];
	   yline10[21]=y10log10[58];
	   	   	   
*/	    
}

⌨️ 快捷键说明

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