Ich versuchs nochmal
Delphi-Quellcode:
TSpectrumData = Array[0..576] Of Byte;
PSpectrumData = ^TSpectrumData;
specdata : PSpectrumData;
specdata := @This_Mod^.spectrumData[0][0];
Delphi-Quellcode:
lastcurrenttime := currenttime;
currenttime := GetTickCount();
DrawSpectrum(This_mod);
Delphi-Quellcode:
procedure DrawSpectrum(This_Mod: PWinAMPVisModule);
var
i, j, c : integer;
h, delta, delta2 : single;
x1, x2, z1, z2, y : GLfloat;
h2, h3, d12d : GLfloat;
hd : GLfloat;
const
overdraw : GLfloat = 0.01;
d1 : GLfloat = 0.05;
d2 : GLfloat = 0.01;
begin
// Spektrum Analyser Daten glaetten
for c := 0 to 1 do
begin
for i := 0 to 72 do
begin
h := 0.0;
for j := 0 to 8 do h := (h + specData[i * 8 + j + c * 576]);
h := h / (1.0 * 255.0);
h := Ln(h + 1.0) * 10.0;
delta := (currenttime - lastcurrenttime) * 10.0;
delta2 := (currenttime - lastcurrenttime) * 2.0;
if (h > heights[c][i] - delta) then
heights[c][i] := h
else
heights[c][i] := heights[c][i] - delta;
if (h > heights2[c][i] - delta2) then
heights2[c][i] := h
else
>>>>>>> heights2[c][i] := heights2[c][i] - delta2;
end;
end;
.............
end;
Soweit funktioniert jetzt alles zumindest werden die Daten richtig erkannt und
das Spectrum ausgegeben.
Nun zu meinen letzten problem!
Die Zeile '>>>>>>>' in der schleife wird nie ausgeführt da die bedingung aus irgendeinen grund nicht erfüllt wird.
Die auswirkung davon ist das die Peaks sich nicht von den Spectrumbalken lösen.
Jetzt weiss ich nicht liegt es am Timing ?
Habe es schon mit timeGetTime versucht oder wie oben mit GetTickCount!
Denke das die Schleife ansicht richtig übersetzt ist.
Code:
for (c=0;c<=1;c++)
{
for ( i = 0; i < 72; i++ )
{
h=0.0f;
for (j=0;j<8;j++) h+=specdata[i*8+j+c*576];
h/=(1.0f*255.0f);
h=(float)(log(h+1.0f))*10.0f;
delta=(currenttime-lastcurrenttime)*10.0f;
delta2=(currenttime-lastcurrenttime)*2.0f;
//if (h>heights[c][i]-delta)
// heights[c][i]=h;
//else
// heights[c][i]=heights[c][i]-delta;
if (h>heights2[c][i]-delta2)
heights2[c][i]=h;
else
heights2[c][i]=heights2[c][i]-delta2;
}
}
Gruss Emil