AW: Optimierung von Pixel
Übrigens: Der Buffer-Overflow schlägt gnadenlos auf das Scanlines-Array zu. Der Code funktioniert nur, wenn man
Delphi-Quellcode:
verwendet.
SetLength(Buffer, 256);
|
AW: Optimierung von Pixel
Zitat:
Delphi-Quellcode:
Aufruf.
BASS_ChannelGetData(Channel, Pointer(Buffer), BASS_DATA_FFT512)
Zitat:
Nach eine generelle Frage: Würde es nicht mehr Sinn machen, nur die ersten paar Sekunden zu visualisieren und danach on-demand jeweils die nächsten paar Sekunden ab aktueller Abspielposition? |
AW: Optimierung von Pixel
Zitat:
|
AW: Optimierung von Pixel
Zitat:
Ich bin nur von meinem Code ausgegangen die Bass.dll hat mich dabei weniger interessiert ;) Gut das macht die Profis (Informatiker) aus. Letztendlich habe ich mich nur um meinen Code gekümmert so das dieser Fehlerfrei läuft. Wie oder ob die Bass.dll das abfängt liegt nicht in meinem ermessen. Zumindest werden keine Exception geworfen. Zitat:
Und ja wird verwendet.
Delphi-Quellcode:
SetLength(Buffer, BUFFER_SIZE);
Zitat:
Ich möchte nicht zur Laufzeit in Realzeit Rendern sondern erst das komplette Bitmap erstellen deshalb dieses Example. Also ich möchte erst sehen wie das Spectrogram aussieht und dann mit "LineTo" anzeigen wo man sich gerade an welcher Position im Stream befindet. Mit einem Loop könnte man dann später einen bestimmten Bereich immer wieder spielen. (Dafür muss ich aber vorher schon sehen wo ich mich befinde) Realzeit Render, was ich nicht möchte ;)
Delphi-Quellcode:
begin
OffsetX := 2; // normal 256x512 for i := 0 to pred(Height) do begin MagLn := round(Sqrt(FFTData[i + 1]) * 3 * Width); k := Height - i - 1; x := BuffBMP.ScanLine[k]; if bRTLScroll then begin //copy original scanline Move(x[OffsetX], x[0], (Width - OffsetX)); //draw new pixels for m := 0 to pred(OffsetX) do x[Width - OffsetX + m] := MagLn; end else //Left to right begin //copy original scanline Move(x[0], x[OffsetX], (Width - OffsetX)); //draw new pixels for m := 0 to pred(OffsetX) do x[m] := MagLn; end; end; end; Zitat:
Ich könnte das Bitmap noch verkleinern\zusammenschrumpfen und zusätzlich noch interpolieren Aber ich möchte jedes Pixel sehen (etwas fürs Auge) und nicht alles zusammenstauchen nur damit es auf dem Bitmap beliebiger länge passt. Mir ist auch klar das ich nur die ersten 512 Blöcke verwende und diese nicht den gesamten Frequenzbereich zurückgeben. Deshalb kann ich für 44100 Hz, den Bereich von 22,5 kHz bis 0 (Nyquist-Transformation) nicht anzeigen. Aber das sind bekannte Probleme. Wichtiger ist erst mal die Performance (Geschwindigkeit) Andere frage kann es sein das ScanLine nicht richtig funktioniert weil das Spectrogram vertikal zeichnet und ScanLine horizontal arbeitet? gruss |
AW: Optimierung von Pixel
Zitat:
Zitat:
|
AW: Optimierung von Pixel
Zitat:
Habe das Bitmap auf 256 hochgesetzt dauert jetzt zwar 5 Sek länger aber was soll's Ich denke da kann man noch an verschiedenen stellen schrauben. Wenn ich analysiert habe warum ScanLine nicht das gewünschte Ergebnis liefert. wenn Pixel und ScanLine das gleiche liefern +- 1 Sec kann was nicht stimmen. gruss |
AW: Optimierung von Pixel
Zitat:
Zitat:
SetPixel: 4,0 s ScanLine: 1,5 s ohne Grafik: 1,3 s Rechnet man die Basiszeit von 1,3 s runter, ergeben sich 2,7 Sekunden bei SetPixel und 0,2 Sekunden bei Scanline. Das ist immerhin ein Faktor von 13,5! |
AW: Optimierung von Pixel
Zitat:
Wenn ja wie sieht die Aktualisierung aus? Mariah Carey - Breakdown.mp3 320k, 10,8 MB Pixel 5:97 sec (liegt daran weil mein Bitmap jetzt 256 Hoch ist) ScanLine kann ich im Moment nicht testen.. muss erst den Fehler vom Medium Code beheben. Fehler "Bereichsüberschreitung bei ZeilenIndex" wenn mein Buffer 256 groß ist. gruss |
AW: Optimierung von Pixel
Zitat:
|
AW: Optimierung von Pixel
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz