![]() |
WaveFade
Ein Visualisierungs projekt in dem die WaveDaten gefadet werden.
Ist ein Abfall Produkt für mein aimp_vis Plugin was noch nicht fertig ist. Danke an himitsu für die optimierung des fading. Erstellt in D2009 Bekannter fehler EOverflow in XFFT.. Wäre etwas für Mathematiker das zu fixen. :) gruss Emil |
Re: WaveFade
Hallo,
das Programm ansich ist ganz nett. Besonders die Tatsache, das aktuelle Abspielposition und Stücklänge korrekt angezeigt werden gefällt mir gut. Bei vielen komprimierten Audioformaten ist das ja nicht so einfach. Was mir nicht so gut gefällt ist die Visualisierung: Das Ganze ist meiner Meinung nach zu hektisch (ich kann mir das nicht länger anschauen, besonders schlimm wäre es, wenn das Ganze im Vollbildmodus wäre) und die eigentliche Information (welche Frequenzanteile wie stark vertreten sind) geht verloren. Du solltest die FFT-Daten vielleicht feiner granuliert auslesen (auf einer Basis von 128 Samples oder so ähnlich) und den Fadeeffekt (bzw. die Überlagerung der einzelnen Visualisierungen) entfernen. Außerdem sollte vielleicht der Kontrast/die Sättigung der weiter hinterliegenden Visualisierungsebenen verringert werden. Die GUI gefällt mir auch recht gut, die ist schön übersichtlich. Einzig sollte man vielleicht mehrere Einträge gleichzeitig auswählen und löschen können und neue Einträge durch doppelklicken auf die Listbox einfügen. Der Pauseknopf funktioniert auch nicht korrekt. Ich hoffe mein Feedback nützt dir (ich weiß ja nicht, was dein Programm eigentlich machen soll - dein erster Beitrag ist nicht sonderlich Informativ. Geht es dir ausschließlich um die Visualisierung oder um den Player an sich?) |
Re: WaveFade
Der Player ist eigentlich uninteressant, ein notwendiges übel damit überhaupt was visualisiert werden kann.
Bei der aussage erübrigt sich eigentlich die nachfolgende Antwort um was es mir geht ;) Nur um die Visualisierung. :) Ich find sie gut gelungen aber jeder hat einen anderen geschmack. gruss Emil |
Re: WaveFade
Hallo Emil,
hab nicht ganz verstanden was genau der Fehler ist! Bei meinem test konte ich nichts feststellen, was falsch läuft... mfg |
Re: WaveFade
Zitat:
Wenn du 2009 hast schau mal in den option unter Tools/Option/CodeGear-Debuger/Sprach Exception Hoffe dir gefällt die Vis besser ;) EDIT: Bedenke es geht hier nicht um Spectrum Daten .. das sind reine WaveDaten :) Deshalb bekommt man den Eindruck das es etwas unruhig ist. Aber das ist so gewollt. gruss Emil |
Re: WaveFade
Ah, ok... Ich dachte wirklich, dass sollte das Spektrum sein. So ist es natürlich ein interessanter Ansatz das Ganze darzustellen...
|
Re: WaveFade
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Also die Visualisation gefällt mir ganz gut, allerdings hab ich auch nen kleines Problem damit (irgendwas ist ja immer :lol: ) Also, währe hübscher wenn die schwarzen Ränder verschwinden würden, es also an der stelle vllt ein wenig mehr transparet ist ... Hab mal nen Screenshot angehängt, wo man sieht was ich meine .. Edit: Änder mal den Satz: Zitat:
mfg |
Re: WaveFade
Zitat:
da kann man nichts mehr verändern. :) Jo werd den Satz mal ändern ... war auf die schnelle von himitsu geschrieben denke der kann Deutsch :) gruss Emil |
Re: WaveFade
dachte ja nicht das du des drinläßt :angel2:
und hab das, schnell und unter leichten Kopfschmerzen Hingetippte, nicht nochmal Korrektur gelesen :oops: |
Re: WaveFade
Zitat:
Aber gut wenn man mehr Infos im Quelltext hat. Gruss Emil |
Re: WaveFade
Habe noch ein kleines problem
Delphi-Quellcode:
Ich möchte jetzt die RGB werte von der position dx:=256 auslesen
procedure TfrmMain.FadeBackBuffer2;
type TPixelArray = packed array[0..0, 0..255] of packed record b, g, r: Byte; end; PPixelArray = ^TPixelArray; var dx: integer; dy: integer; i: integer; begin try BitBlt(hTempDc, 0, 0, 256, nHeight, DC, 256, 0, SRCCOPY); //' Fade The Data. for dy := 0 to nHeight - 1 do begin for dx := 0 to 255 do begin i := PPixelArray(pAddr)[dy, dx].b - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy, dx].b := i; i := PPixelArray(pAddr)[dy, dx].g - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy, dx].g := i; i := PPixelArray(pAddr)[dy, dx].r - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy, dx].r := i; end; end; //' Blit The Faded Image To The Back Buffer. BitBlt(DC, 0, 0, 256, nHeight, hTempDc, 256, 0, SRCCOPY); except end; end; Das problem ist aber das dx innerhalb des Array an die RGB werte gekoppelt sind also max 255 Jemand eine Idee wie ich das problem beheben kann ? gruss Emil |
Re: WaveFade
da es eh nur 256 Pixel pro Zeile gibt, existiert natürlich keine Spalte für dx=256
aber da gab's ja noch die Möglichkeit ein Eindimensionales Array über das ganze Bild zu legen.
Delphi-Quellcode:
TPixelArray = packed array[0..0] of packed record
b, g, r: Byte; end; PPixelArray(pAddr)[dy * 256 + dx] [add] dein Wunsch würde ja diesem entsprechen
Delphi-Quellcode:
type TPixelArray = packed array[0..0, 0..255] of packed record
PPixelArray(pAddr)[dy + dx div 256, dx mod 256] dx=256 => PPixelArray(pAddr)[dy + 1, 0] dx=300 => PPixelArray(pAddr)[dy + 1, 44] |
Re: WaveFade
Zitat:
Delphi-Quellcode:
BASS_ChannelGetData(stream, @SampleData, 1024);
For intI := 0 To 511 do WaveData[intI] := SampleData[intI];
Delphi-Quellcode:
512 Sample Maximal für Wave mehr stellt die SDK nicht zur verfügung.
TRA: array[1..512] of single;
TIA: array[1..512] of single; Könnte Theoretisch auch 1024 nehmen nur dann wären es 512 für den rechten und 512 für den linken Kanal. gruss Emil |
Re: WaveFade
du hattest aber vorher ein Array mit 768 Bytes pro Zeile
und bei 3 Farben macht das dann 256 Pixel bei 512 wären es natürlich dann 0..511
Delphi-Quellcode:
type TPixelArray = packed array[0..0, 0..511] of packed record
... oder wenn variabel dann:
Delphi-Quellcode:
TPixelArray = packed array[0..0] of packed record
b, g, r: Byte; end; PPixelArray(pAddr)[dy * Spalten + dx] |
Re: WaveFade
Wenn ich dich richtig verstanden habe dann so!
Delphi-Quellcode:
Leider kracht es gewaltig ;)
//' Fade The Data.
for dy := 0 to nHeight - 1 do begin for dx := 0 to 255 do begin i := PPixelArray(pAddr)[dy + dx div 256, dx mod 256].b - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy + dx div 256, dx mod 256].b := i ; i := PPixelArray(pAddr)[dy + dx div 256, dx mod 256].g - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy + dx div 256, dx mod 256].g := i ; i := PPixelArray(pAddr)[dy + dx div 256, dx mod 256].r - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy + dx div 256, dx mod 256].r := i ; end; end; gruss Emil |
Re: WaveFade
Hmm will irgendwie nicht..
Sehe schon muss noch einiges lernen. :mrgreen: Hat sich erledigt.. gruss EMil |
Re: WaveFade
Kleines Update
Die Flames wurden jetzt der richtigen Bildhöhe angepaßt und die weite auf 512 gesetzt. Hab dann ein Menü addiert und die RadioGroup entfernt. Meine das sieht jetzt besser aus. gruss Emil |
AW: WaveFade
Hat vielleicht jemand von euch den Quelltext noch irgendwo auf seiner Platte oder Archiviert?
Hab meinen verloren. gruss |
AW: WaveFade
Hat sich erledigt habe es neu geschrieben..
Es gibt noch 6 andere Farben.. :) PS: Es wäre nett wenn mal jemand meinen FFT gegenprüfen würde, habe ab und an einen Gleitkomma überlauf. @Michael II ?? :)
Delphi-Quellcode:
Wenn nötig stelle ich dafür den Quelltext des Projekts zur Verfügung.
procedure TBassPlayer.XFFT(FR, FI: array of single; Sign, Sample, SampleCount: Integer);
// Wave Daten glätten var Q, J, M, L, le, le1, ip: integer; tr, ti, s, ur, ur1, ui, wr, wi: single; begin J := 1; for Q := Sample to SampleCount do begin if Q < J then begin s := FR[Q]; FR[Q] := FR[J]; FR[J] := s; s := FI[Q]; FI[Q] := FI[J]; FI[J] := s; end; M := ((SampleCount + 1) div 2); while M < J do begin J := J - M; M := M div 2; end; J := J + M; end; for L := 1 to 8 do begin le := trunc(Power(2, L)); le1 := le div 2; ur := 1; ui := 0; wr := Cos(PI / le1); wi := Sign * Sin(PI / le1); for J := 1 to le1 do begin Q := J; while Q <= (SampleCount + 1) do begin ip := Q + le1; tr := FR[ip] * ur - FI[ip] * ui; ti := FR[ip] * ui + FI[ip] * ur; FR[ip] := FR[Q] - tr; FI[ip] := FI[Q] - ti; FR[Q] := FR[Q] + tr; FI[Q] := FI[Q] + ti; Q := Q + le; end; ur1 := ur * wr - ui * wi; ui := ur * wi + ui * wr; ur := ur1; end; end; for Q := Sample to (SampleCount + 1) do begin FR[Q] := FR[Q] * DivN; FI[Q] := FI[Q] * DivN; end; end; gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 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 by Thomas Breitkreuz