![]() |
Pointer verschieben
Meine Ausgangsposition..
Delphi-Quellcode:
function TBassPlayer.BassChannelGetWavData: PSmallInt;
var fft: array [0 .. 511] of single; begin FillChar(fft[0], sizeof(single) * 256, 0); if (gnAudioChannel <> 0) then BASS_ChannelGetData(gnAudioChannel, @fft[0], 1024); result := @fft[0]; end;
Delphi-Quellcode:
Ich hole die WaveDaten über BassChannelWaveData
var
pInt: PSmallInt; begin pInt := BassPlayer.BassChannelWaveData; for x := 0 to (Width - 1) do begin if (x mod 8) <> 0 then continue; end; inc(pInt, 9); end; Danach zeichne ich das Bitmap auf dem Screen Anschließend möchte ich den Pointer um den Faktor 9 verschieben. Mein Problem! Es wird aber jeweils immer nur der erste Ausschlag visualisiert das verschieben des Pointer funktioniert irgendwie nicht richtig. Was mach ich falsch? Es müsste sich eigentlich die Y Position des nächsten Balken verändern abhängig vom verschobenen Pointer und den Inhalt der Wave Daten an dieser Position. Wie man sehen kann werden alle Bars korrekt gezeichnet Blau unten aber nur die erste wird visualisiert. PS: Auch wenn ich den Pointer entferne also den wert von SmallInt verschiebe ändert es nichts.
Delphi-Quellcode:
inc(pInt^, 9);
gruss |
AW: Pointer verschieben
Zitat:
Delphi-Quellcode:
Tfft = array[0..511] of Single;
function TBassPlayer.BassChannelGetWavData: Tfft; |
AW: Pointer verschieben
Danke..
Ja so mache ich das normaler weise auch..
Delphi-Quellcode:
bsp.
function TBassPlayer.BassChannelGetWaveData: TWaveData;
begin if gnAudioPause = FALSE then begin if gnAudioChannel <> 0 then BASS_ChannelGetData(gnAudioChannel, @result[0], 1024); end; end; Wenn ich TWaveData zurückgebe wie soll ich dann den Pointer inkrementieren?
Delphi-Quellcode:
EDIT:
var
pInt: array [0..511] of TWaveData; begin y := Height - ((( pInt[0] div 2) + $7FFF) div YFactor); end; Ok ich habs..
Delphi-Quellcode:
Das inkrementieren kann ich mir dann sparen da ich direkt mit x auf die gewünschte Position springe.
pInt: TWaveData;
y := Height - ((( pInt[x] div 2) + $7FFF) div YFactor); Danke für den Tip manchmal hat man nur ein Brett vorm Kopf. So ist die Lösung!
Delphi-Quellcode:
Werde pInt noch nach WaveData umbenennen.. ;)
pInt := BassPlayer.BassChannelGetWaveData;
for x := 0 to (Width - 1) do begin if (x mod 8) <> 0 then continue; y := Height - ((( pInt[x] div 2) + $7FFF) div YFactor); gruss |
AW: Pointer verschieben
Hey, konnte auf deine PM btw. nicht antworten, weil dein Postfach voll ist oder du PMs deaktiviert hast :)
|
AW: Pointer verschieben
Zitat:
PS: Auf der anderen Seite kein Problem habe die Zeichnungsroutine verworfen.. Verwende jetzt meine alte neu geschrieben die ein Bitmap entsprechend der Wave Daten weich glättet.. (Faded) Trotzdem Danke für die Rückmeldung. ![]() Nicht das wahre aber bis ich den Fehler analysiert habe geht das so. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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