求声音的频谱分析算法,就像winamp的柱状显示(2).

AskLove7 2005-01-07 09:27:17
求声音的频谱分析算法,就像winamp的柱状显示。

大概又叫光谱分析吧,有函数代码最好,估计理论上应该是较复杂的,听说用到个什么傅立叶。
有熟悉的朋友帮帮忙吧。

由于较急,发了两个帖子。
另一个相同的帖子如下:
http://community.csdn.net/Expert/topic/3705/3705908.xml?temp=.683468
...全文
663 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hushuangyan74 2005-01-10
  • 打赏
  • 举报
回复
应该要用到DFT,可以用DCT来加快算法速度,不过没有具体搞过,帮不了忙!
Kudeet 2005-01-08
  • 打赏
  • 举报
回复
http://www.codeproject.com/audio/waveInFFT.asp
http://www.codeguru.com/Cpp/G-M/multimedia/audio/article.php/c4709/
EnochShen 2005-01-08
  • 打赏
  • 举报
回复
波形图可不可以?可以的话,发邮件给我,我有这么个例子 EnochShen@QQ.com
neilxp 2005-01-08
  • 打赏
  • 举报
回复
傅立叶变换不行吗
SpeedChina 2005-01-07
  • 打赏
  • 举报
回复
下面的代码不知是否有用:

我这儿也有一个c版的源程序
[代码]FFT 快速傅立叶变换 (c语言)

算法参见徐世良《计算机常用算法》第二版 第294页

void KFFT(
BNU::vector<std::complex<double> > &x,
BNU::vector<std::complex<double> > &y,
int inverse)
{
int n = x.size();
int k = log((double)n)/log(2.);
int t ,m ,s , i, j, NV, r;
double angle;
std::complex<double> V,PODD;
for (t = 0 ; t <= n-1 ; t++) {
m = t;
s = 0;
for (i = 0 ; i <=k-1 ; i++) {
j = int(m/2);
s = 2*s + m - 2*j;
m = j;
}
if (&x!=&y) {
y[t] = x[s];
}else {
if (s>t) {
V=x[t];
y[t]=x[s];
y[s]=V;
}
}
}
for (t = 0 ; t <= n-2 ; t+=2) {
V = y[t];
y[t] = V + y[t+1];
y[t+1] = V - y[t+1];
}
m = n/2;
NV = 2;
for (r = k-2 ; r >=0 ; r-- ) {
m = m/2;
NV = 2*NV;
for (t = 0 ; t <= (m-1)*NV ; t=t+NV ){
for (j = 0 ; j <= (NV/2)-1 ; j++) {
angle = -(2.0*M_PI*inverse*j)/NV;
PODD = complex<double>(cos(angle),sin(angle))*y[t+j+(NV/2)];
y[t+j+(NV/2)] = y[t+j] - PODD;
y[t+j] = y[t+j] + PODD;
}
}
};
for (i = 0 ; i < n; i++) {
if (inverse==-1)
y = y/double(n);
}
}
oyljerry 2005-01-07
  • 打赏
  • 举报
回复
用快速傅立叶变缓算法

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧