📄 subspecanal.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 + -