Du kan sætte flere buffere i kø, men de skal lukkes med waveOutClose til slut.
Der er en waveOutPause funktion.
Jeg mener at kunne huske at man kan stoppe den uden at den er færdig, men det giver nogen voldsomme klik i højtaleren og er ikke helt problemfrit. Det bedste er at have tilpas små buffere og så lade dem køre til ende.
Ja den gir nogle ikke så gode lyde med mindre den giver fejl hvilket også kan ske...
Når jeg prøver at lukke den med waveOutClose så fortæller fejlmeddelelsen mig at jeg skal prøve at resette headeren. Det prøver jeg så med waveOutReset.. Men dette låser bare koden så resten ikke bliver eksekveret... Hmmm
Jeg kan ikke helt finde nogle FFT funktioner jeg kan få til at virke... har fundet følgende 2:
http://www.dsprelated.com/showmessage/69924/1.php
#include <math.h>
#define M_PI 3.14159265359
void fft(float *x,float *y,int order,int param)
{
unsigned int n,l,e,f,i,j,o,o1,j1,i1,k;
float u,v,z,c,s,p,q,r,t,w,a;
n=1u<<order;
for(l=1;l<=order;l++)
{
u=1.0;
v=0.0;
e=1u<<(order-l+1);
f=e/2;
z=M_PI/f;
c=cos(z);
s=sin(z);
if(param==FFT) s=-s;
for(j=1;j<=f;j++)
{
for(i=j;i<=n;i+=e)
{
o=i+f-1;
o1=i-1;
p=x[o1]+x[o];
r=x[o1]-x[o];
q=y[o1]+y[o];
t=y[o1]-y[o];
x[o]=r*u-t*v;
y[o]=t*u+r*v;
x[o1]=p;
y[o1]=q;
}
w=u*c-v*s;
v=v*c+u*s;
u=w;
}
}
j=1;
for(i=1;i<n;i++)
{
if(i<j)
{
j1=j-1;
i1=i-1;
p=x[j1];
q=y[j1];
x[j1]=x[i1];
y[j1]=y[i1];
x[i1]=p;
y[i1]=q;
}
k=n/2;
while(k<j)
{
j=j-k;
k=k/2;
}
j+=k;
}
if(param==FFT) return;
a=1.0/n;
for(k=0;k<n;k++)
{
x[k]*=a;
y[k]*=a;
}
return;
}
og
http://www.ddj.com/cpp/199500857
void four1(double* data, unsigned long nn)
{
unsigned long n, mmax, m, j, istep, i;
double wtemp, wr, wpr, wpi, wi, theta;
double tempr, tempi;
// reverse-binary reindexing
n = nn<<1;
j=1;
for (i=1; i<n; i+=2) {
if (j>i) {
swap(data[j-1], data[i-1]);
swap(data[j], data[i]);
}
m = nn;
while (m>=2 && j>m) {
j -= m;
m >>= 1;
}
j += m;
};
// here begins the Danielson-Lanczos section
mmax=2;
while (n>mmax) {
istep = mmax<<1;
theta = -(2*M_PI/mmax);
wtemp = sin(0.5*theta);
wpr = -2.0*wtemp*wtemp;
wpi = sin(theta);
wr = 1.0;
wi = 0.0;
for (m=1; m < mmax; m += 2) {
for (i=m; i <= n; i += istep) {
j=i+mmax;
tempr = wr*data[j-1] - wi*data[j];
tempi = wr * data[j] + wi*data[j-1];
data[j-1] = data[i-1] - tempr;
data[j] = data[i] - tempi;
data[i-1] += tempr;
data[i] += tempi;
}
wtemp=wr;
wr += wr*wpr - wi*wpi;
wi += wi*wpr + wtemp*wpi;
}
mmax=istep;
}
}
Sorry for den lidt dårlige kode opsætning (copy paste hehe
)
Indlæg senest redigeret d. 11.04.2008 14:59 af Bruger #3861