AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer verschieben

Ein Thema von EWeiss · begonnen am 19. Jun 2019 · letzter Beitrag vom 20. Jun 2019
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Pointer verschieben

  Alt 19. Jun 2019, 19:17
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:
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;
Ich hole die WaveDaten über BassChannelWaveData
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.
inc(pInt^, 9);

gruss

Geändert von EWeiss ( 9. Jul 2019 um 08:31 Uhr)
  Mit Zitat antworten Zitat
HintByError

Registriert seit: 13. Dez 2018
Ort: Marburg
20 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Pointer verschieben

  Alt 19. Jun 2019, 20:06
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;
Wenn die Methode BassChannelGetWavData beendet wird, dann wird auf dem Stack "fft" freigegeben und das Ergebnis mit der Adresse am Anfang der Variable wird ungültig. Der Ergebniszeiger zeigt auf einen Bereich, der nicht mehr der Variablen zugeordnet ist. Die Prozedur sollte "fft" als Ergebnis zurückgeben. Etwa wie folgt
Delphi-Quellcode:
Tfft = array[0..511] of Single;

function TBassPlayer.BassChannelGetWavData: Tfft;
Wolfgang Sauer
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Pointer verschieben

  Alt 19. Jun 2019, 20:20
Danke..

Ja so mache ich das normaler weise auch..
Delphi-Quellcode:
function TBassPlayer.BassChannelGetWaveData: TWaveData;
begin

  if gnAudioPause = FALSE then
  begin
    if gnAudioChannel <> 0 then
      BASS_ChannelGetData(gnAudioChannel, @result[0], 1024);
  end;
end;
bsp.
Wenn ich TWaveData zurückgebe wie soll ich dann den Pointer inkrementieren?

Delphi-Quellcode:
var
  pInt: array [0..511] of TWaveData;
  
begin

  y := Height - ((( pInt[0] div 2) + $7FFF) div YFactor);
end;
EDIT:
Ok ich habs..

Delphi-Quellcode:
  pInt: TWaveData;
  y := Height - ((( pInt[x] div 2) + $7FFF) div YFactor);
Das inkrementieren kann ich mir dann sparen da ich direkt mit x auf die gewünschte Position springe.
Danke für den Tip manchmal hat man nur ein Brett vorm Kopf.

So ist die Lösung!
Delphi-Quellcode:
    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);
Werde pInt noch nach WaveData umbenennen..
gruss

Geändert von EWeiss (19. Jun 2019 um 20:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Pointer verschieben

  Alt 20. Jun 2019, 20:05
Hey, konnte auf deine PM btw. nicht antworten, weil dein Postfach voll ist oder du PMs deaktiviert hast
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Pointer verschieben

  Alt 20. Jun 2019, 20:09
Hey, konnte auf deine PM btw. nicht antworten, weil dein Postfach voll ist oder du PMs deaktiviert hast
sorry sollte jetzt gehen habe da letztens rumgepfuscht.

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.

Habe zwar hier noch ein kleines Problem (Lösung Gleitkomma Prüfung ausschalten).
Nicht das wahre aber bis ich den Fehler analysiert habe geht das so.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:58 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 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