Форум: "Media";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
ВнизЦифровой фильтр. Найти похожие ветки
← →
Лёша (2002-02-22 17:02) [0]Люди! Помогите найти примеры или компоненты для анализа спектра звукового сигнала. Как в WinAmp. Мне нужно не отображать состовляющие, а иметь их данные.
← →
Sergey_n (2002-02-24 00:37) [1]www.nctsoft.com Набор компонент AudioStudio. Но примеры работы с компонентами на VB.
← →
MJH (2002-02-24 06:23) [2]что значит "компоненты для анализа"?
буквально несколько строчек кода....ишь, разленились :)
← →
Лёша (2002-02-24 07:25) [3]Мне просто надо раз в секунду получать набор чисел от проигрываемого файла. Сколько будет занимать этот код несколько мегабайт или несколько строк, я даже представления не имею. Что для этого надо использовать и с чего начинать? Какие формулы, алгоритмы? Почти в каждом звуковом редакторе есть подобные преобразования. Я не верю, что программисты этих редакторов своеручно выводили формулы каждый раз. Должны же быть опубликованы в инете какие-нибудь наработки.
Пожайлуста, подскажите хоть с чего начать.
← →
MJH (2002-02-24 07:57) [4]во-первых тебе нужно определиться с тем, откуда у тебя идет сигнал - ты воспроизводишь его сам или нет. если сам - то через что? затем нужно просто этот сигнал копировать в свой буффер и оттуда его уже рисовать (нарисуешь ни что иное как синусоиду)...чтобы получить как в винампе тебе нужно пропустить полученный массив через Быстрое Фурье-преобразование (FFT)
если же ты вопроизвоишь сигнал не сам - через DirectShow, TMediaPlayer - то нужно будет поизвращаться со сдиранием сигнала со звуковушки...чем я не занимался и посоветовать ничего не могу, но пример какой-то валяется...могу кинуть если у тебя имено это
← →
Лёша (2002-02-24 08:54) [5]2 MJH
Именно Быстрое Фурье-преобразование. Я прочитал об этом в технической литературе по звуковым устройствам. Но там, к сожалению, только в двух словах говорится о наличии таково преобразования. Поэтому буду премного благодарен, если намылишь что-нибудь. А я уж под это попытаюсь подстроить воспроизведение, если получится.
← →
Sergey_n (2002-02-28 02:24) [6]Лови, только на C++, переводи сам
//-----------------------------------------------------------------------------------------
#define sumdiff1(s,d) {s+=d;d=s-2*d;}
#define sumdiff2(s,d) {d=(s-d)/2;s-=d;}
void CAudioVisualization::fht(float *fz, int n)
{
register int i,j,kx,k1,k2,k3,k4;
register float *fi,*gi,a;
register float s1,c1,c2,s2;
for(k1=1,k2=0;k1<n;k1++) {
for (k3=n>>1;(!((k2^=k3)&k3));k3>>=1);
if (k1>k2) {
a=*(fz+k1);*(fz+k1)=*(fz+k2);*(fz+k2)=a;
}
}
for(k4=4;k4<=n;k4<<=2) {
kx=k4>>3;
k1=k4>>2;
k2=k4>>1;
k3=k2+k1;
for(fi=fz,gi=fz+kx;fi<fz+n;fi+=k4,gi+=k4) {
sumdiff1(*fi,*(fi+k1));
sumdiff1(*(fi+k2),*(fi+k3));
sumdiff1(*fi,*(fi+k2));
sumdiff1(*(fi+k1),*(fi+k3));
if (k4!=4) {
sumdiff1(*gi,*(gi+k1));
*(gi+k2)=(float)(SQRT2*(*(gi+k2)));
*(gi+k3)=(float)(SQRT2*(*(gi+k3)));
sumdiff1(*gi,gi[k2]);
sumdiff1(*(gi+k1),*(gi+k3));
}
}
for(i=1;i<kx;i++) {
j=n*i/4/k1;
c1=(float)cos(2*j*PI/n);
s1=(float)sin(2*j*PI/n);
c2=c1*c1-s1*s1;
s2=2*c1*s1;
for(fi=fz+i,gi=fz+k1-i;fi<fz+n;fi+=k4,gi+=k4) {
mmult(fi+k1,gi+k1,c2,s2);
sumdiff1(*fi,*(fi+k1));
sumdiff1(*gi,*(gi+k1));
mmult(fi+k3,gi+k3,c2,s2);
sumdiff1(*(fi+k2),*(fi+k3));
sumdiff1(*(gi+k2),*(gi+k3));
mmult(fi+k2,gi+k3,c1,s1);
sumdiff1(*fi,*(fi+k2));
sumdiff1(*(gi+k1),*(gi+k3));
mmult(gi+k2,fi+k3,s1,c1);
sumdiff1(*(fi+k1),*(fi+k3));
sumdiff1(*gi,*(gi+k2));
}
}
}
}
//-----------------------------------------------------------------------------------------
inline void CAudioVisualization::mmult(register float *a,register float *b,float c,float d)
{
register float f,g;
f=c*(*a)+d*(*b);
g=d*(*a)-c*(*b);
*a=f;
*b=g;
}
//-----------------------------------------------------------------------------------------
void CAudioVisualization::myfhtf(float *fz, long n)
{
if (n<2) return;
register long i;
register float a,b;
for(i=0;i<n/2;i++) {
a=fz[i*2]; b=fz[i*2+1];
b-=a; a+=b/2; a*=2;
fz[i]=a; fz[n/2+i]=b;
}
myfhtf(fz,n/2);
myfhtf(fz+n/2,n/2);
}
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c