![]() |
Re: Rückgabe von SpectrumDaten als PChar
Hallo
Niemand eine andere Idee wie ich an die Daten herankommen kann? im Spectrum array sind sie ja vorhanden das ist nicht das problem. kann sie nur nicht der im thread angezeigten Schleife zuweisen. Würd mich aber wundern das dies in Delphi nicht gehen soll. gruss Emil |
Re: Rückgabe von SpectrumDaten als PChar
1. Speicher alloziieren/freigeben: AllocMem(), FreeMem()
2. Typ definieren:
Delphi-Quellcode:
Diesen Typ kannst du dann leicht für den Typecast nutzen und wenn du ihn alloziieren willst, reicht ein einfaches New() aus (bzw. Dispose() zum freigeben).
Type
TSpectrumData = Array[0..576] Of Byte; PSpectrumData = ^TSpectrumData; |
Re: Rückgabe von SpectrumDaten als PChar
Zitat:
werd es mal versuchen umzusetzen ob die Schleife damit die Daten berechnen kann. gruss Emil |
Re: Rückgabe von SpectrumDaten als PChar
Gibt mir auch keine Daten zurück :(
Ich denke das es auch das gleiche wie die Daten in Spectrum selber sind.
Delphi-Quellcode:
Die beiden zeilen verglichen müßte eigentlich den gleichen wert ergeben!
// 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 begin //h := (h + specdata[i * 8 + j + c * 576]); h := (h + ord(this_mod^.spectrumData[0][i * 8]) + ord(this_mod^.spectrumData[0][j]) + ord(this_mod^.spectrumData[0][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 h := heights[c][i] else heights[c][i] := heights[c][i] - delta; if (h > heights2[c][i] - delta2) then h := heights2[c][i] else heights2[c][i] := heights2[c][i] - delta2; end; end; end;
Delphi-Quellcode:
//h := (h + specdata[i * 8 + j + c * 576]);
h := (h + ord(this_mod^.spectrumData[0][i * 8]) + ord(this_mod^.spectrumData[0][j]) + ord(this_mod^.spectrumData[0][c * 576]));
Delphi-Quellcode:
Ist aber immer 0
heights[c][i] := heights[c][i] - delta;
Hänge mal ein Bild an wie specdata in C# ausschaut. Anfangen kann ich damit nix aber es funktioniert... wie auch immer. gruss Emil |
Re: Rückgabe von SpectrumDaten als PChar
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:
Soweit funktioniert jetzt alles zumindest werden die Daten richtig erkannt und
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; 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:
Gruss Emil
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; } } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz