AGB  ·  Datenschutz  ·  Impressum  







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

wieder konvertierungs problem

Ein Thema von EWeiss · begonnen am 21. Mär 2007 · letzter Beitrag vom 25. Mär 2007
Antwort Antwort
Seite 3 von 4     123 4      
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#21

Re: wieder konvertierungs problem

  Alt 24. Mär 2007, 11:20
Hallo Emil,

wenn ich mir die Doku zur BASS.DLL anschaue, dann kommt mir der Verdacht, dass du mit deinem byteweisen Zugriff falsche Werte verarbeitest. Wenn du die Samples nicht explizit umschaltest, dann werden 16-bit Integer-Werte (SmallInt) geliefert. Prüfe das doch erstmal.

Freundliche Grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#22

Re: wieder konvertierungs problem

  Alt 24. Mär 2007, 11:36
Zitat von marabu:
Hallo Emil,

wenn ich mir die Doku zur BASS.DLL anschaue, dann kommt mir der Verdacht, dass du mit deinem byteweisen Zugriff falsche Werte verarbeitest. Wenn du die Samples nicht explizit umschaltest, dann werden 16-bit Integer-Werte (SmallInt) geliefert. Prüfe das doch erstmal.

Freundliche Grüße
Hallo Achim

Ja habe ich schon.
Du darfst nicht von Bass ausgehen
Sondern was du nicht wissen kannst du mußt von Winamp ausgehen
dort werden die Wavedaten als byte übergeben genauso wie in meinen Plugin Wrapper für Winamp Plugins.

Delphi-Quellcode:
  TWinAMPVisModule = record
    Description : PChar;
    hWNDParent : HWND;
    hDLLInstance : HINST;
    sRate : Integer;
    nCh : Integer;
    LatencyMs : Integer;

    DelayMs : Integer;
    SpectrumNch : Integer;
    WaveformNch : Integer;

    SpectrumData : array[0..1,0..575] of byte;
    WaveformData : array[0..1,0..575] of byte;
    Config : procedure(This_Mod: PWinAMPVisModule); cdecl;
    Init : function(This_Mod: PWinAMPVisModule): Integer; cdecl;
    Render : function(This_Mod: PWinAMPVisModule): Integer; cdecl;
    Quit : procedure(This_Mod: PWinAMPVisModule); cdecl;
    UserData : Pointer;
  end;
Deshalb habe ich auch die beiden Datentypen >
Delphi-Quellcode:
  TSpectrumData = Array[0..575] Of byte;
  PSpectrumData = ^TSpectrumData;

  TWaveData = Array[0..575] Of byte;
  PWaveData = ^TWaveData;
als byte declariert.

Ich habe das problem das die berechnung des exakten Bogenmaß irgendwie nicht
mit den übergebenen werten von WaveData verglichen werden.
Der effekt für das richtige Pendeln soll über

meterlphi := meterlphi+(lphi - meterlphi)*(dt*10.0); emuliert werden..
wobei dt
dt := currenttime - lastcurrenttime; eine art zeitverschiebung bewirken soll abhängig von
Delphi-Quellcode:
function GetTimes: single;

begin

   if (StartMilliseconds = 0) then
     StartMilliseconds := GetTickCount();


    CurrentMilliseconds := GetTickCount();
    Result := (CurrentMilliseconds - StartMilliseconds) / 1000.0;
end;
Delphi-Quellcode:
        specdata := @This_Mod^.spectrumData[0][0];
        wavedata := @This_Mod^.WaveformData[0][0];

          lastcurrenttime := currenttime;
         currenttime := GetTimes();
danach wird das rendern ausgeführt.

So wie es zur zeit ist funktioniert es zwar aber wie schon gesagt
hat das nichts mit einen VU Meter zu tun.
Das Teil schleicht nur so vor sich hin und reagiert nicht wirklich auf
die übergebenen Sample Daten.

Das originale Plugin 'StarflightAnalyze' (Quelltext habe ich vor Jahren vom Author bekommen(Marc Schneider))
funktioniert einwandfrei und wurde eigentlich auch richtig nach Delphi portiert.
Verstehe nicht das es hier nicht richtig läuft.

gruss Emil
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#23

Re: wieder konvertierungs problem

  Alt 24. Mär 2007, 21:11
Hallo Emil,

diese Player-Projekte sind nicht so richtig meine Welt, deshalb musst du alles was ich so von mir gebe sehr kritisch betrachten. Auf deinen Bildern erkenne ich, dass du für jeden Stereokanal ein 270-Grad Rundinstrument einsetzt. Der Grad-Winkel phi gibt dann zwar den Ausschlag an, aber der "echte" Winkel ergibt sich ja erst durch Addition auf den Startwinkel des Rundinstruments (225 Grad). Ob du diese Umrechnung zu Fuß richtig gemacht hast, das kannst du mit der Rechentechnik (DegToRad) aus diesem Beitrag überprüfen: drehpoti zeichnen

Die Schwingungsdämpfung (Pendeleffekt) habe ich noch nicht ganz durchschaut. Ich stelle mir das so vor, dass der Wechsel zwischen diskreten Skalenwerten durch interpolierte Werte weich-gezeichnet wird. Ist das alles schon Bestandteil der C-Lösung, die du portierst oder ist das jetzt Neuland?

Diese GetTimes-Routine kommt mir etwas seltsam vor. Stammt die von dir? Kannst du beschreiben, was du damit erreichen möchtest? Beim ersten Durchlauf wird 0 geliefert, später ein gebrochener Sekundenabstand.

Der einzige Aufruf von DrawMeters() geschieht wohl in GLDraw() - und diese Prozedur wird vom Timer-Event alle 25 Millisekunden aufgerufen. Damit wird aber immer alles gezeichnet. Kann man denn das Zeichnen der Nadelausschläge und des eigentlichen Rundinstrumentes nicht voneinander trennen?

Freundliche Grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#24

Re: wieder konvertierungs problem

  Alt 24. Mär 2007, 21:37
Zitat von marabu:
Hallo Emil,

diese Player-Projekte sind nicht so richtig meine Welt, deshalb musst du alles was ich so von mir gebe sehr kritisch betrachten. Auf deinen Bildern erkenne ich, dass du für jeden Stereokanal ein 270-Grad Rundinstrument einsetzt. Der Grad-Winkel phi gibt dann zwar den Ausschlag an, aber der "echte" Winkel ergibt sich ja erst durch Addition auf den Startwinkel des Rundinstruments (225 Grad). Ob du diese Umrechnung zu Fuß richtig gemacht hast, das kannst du mit der Rechentechnik (DegToRad) aus diesem Beitrag überprüfen: drehpoti zeichnen

Die Schwingungsdämpfung (Pendeleffekt) habe ich noch nicht ganz durchschaut. Ich stelle mir das so vor, dass der Wechsel zwischen diskreten Skalenwerten durch interpolierte Werte weich-gezeichnet wird. Ist das alles schon Bestandteil der C-Lösung, die du portierst oder ist das jetzt Neuland?

Diese GetTimes-Routine kommt mir etwas seltsam vor. Stammt die von dir? Kannst du beschreiben, was du damit erreichen möchtest? Beim ersten Durchlauf wird 0 geliefert, später ein gebrochener Sekundenabstand.

Der einzige Aufruf von DrawMeters() geschieht wohl in GLDraw() - und diese Prozedur wird vom Timer-Event alle 25 Millisekunden aufgerufen. Damit wird aber immer alles gezeichnet. Kann man denn das Zeichnen der Nadelausschläge und des eigentlichen Rundinstrumentes nicht voneinander trennen?

Freundliche Grüße
Hi Achim
Das weichzeichnen ist Bestandteil der C-Lösung wird aber durch GetTimes routine wieder aufgelößt
dt .. der gebrochene Sekundenabstand wie du es nennst(Single) 0,xx werte wird zu den ausschlagwerten multipliziert
dadurch entsteht der effekt das der Pendel in der zwichenzeit wieder auf 0 sinken kann.
Durch den Schub dt*10.0 (dt=gebrochene Sekundenteil) bekommt das Pegel wieder eine aufwärtzbewegung plus der WaveDaten
die in den moment ankommen.
Dies geschieht aber nicht!
Ob das nun an der berechnung des Winkel liegt muss ich nochmal prüfen.

Da ich den Source in C++ persönlich vom Author bekommen habe werde ich ihn mal hochladen.
Kannst dir das mal anschauen wenn du die zeit dazu hast...
Wieder gelöscht !
Kann ihn bei bedarf über PN zusenden.


Wie gesagt da funktioniert alles!
EDIT:
Die berechnung lass mal hingestellt sein ob sie richtig ist!
lphi := (lmax/270.0*128.0*13.5)/20.0; geschieht eigentlich schon im vorfeld beim c++ source
Ich habe sie nur deshalb eingefügt weil ich lmax nicht zu single habe konvertieren können.

original gibt es nur lphi := lmax;
Nix anderes .. da sind der effekt des Pendelausschlag und die Daten für Wavedata schon enthalten.

PS: Das zeichnen kann man nicht trennen muss man auch nicht da OpenGl schnell genug ist
damit fertig zu werden.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#25

Re: wieder konvertierungs problem

  Alt 24. Mär 2007, 23:30
Achtung!

Code:
for (i=0; i<576;i++) // Stelle "A"
{
  //
}
ist nicht das gleiche wie

Delphi-Quellcode:
for i := 0 to 576 do // Stelle "B"
begin
  //
end;
sondern entweder:
An Stelle A das schreiben:
Code:
for (i=0; i <= 576;i++)
Code:
for (i=0; i < 577;i++)
oder an Stelle B das schreiben:
for i := 0 to 575 do
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#26

Re: wieder konvertierungs problem

  Alt 25. Mär 2007, 09:56
Zitat von xZise:
Achtung!

oder an Stelle B das schreiben:
for i := 0 to 575 do
Danke Fabian
Habe ich schon geändert in Delphi
Sind ja ansonsten 1 byte zuviel.

Gruss Emil
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#27

Re: wieder konvertierungs problem

  Alt 25. Mär 2007, 11:35
Moin Emil,

nach einer kurzen Diskussion mit Waldteufel komme ich zu dem Schluss, dass du die Wave-Daten eventuell falsch interpretierst. Du müsstest ein array of ShortInt definieren und nicht ein array of Byte. Nur so ist uns erklärlich, warum deine Portierung einen ständigen Vollausschlag produziert. Eine fehlerhafte Interpretation eines vorzeichenbehafteten Bytes würde genau diesen Effekt produzieren: Leise Passagen (-5 < 0 < +5) liefern Datenwerte bei 250, die du auf 128 begrenzt und laute Passsagen liefern Werte bei 128. Deshalb hatte ich dich nach der Mittellage bei 128 gefragt.

Nachdenkliche Grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#28

Re: wieder konvertierungs problem

  Alt 25. Mär 2007, 11:49
Zitat von marabu:
Moin Emil,

nach einer kurzen Diskussion mit Waldteufel komme ich zu dem Schluss, dass du die Wave-Daten eventuell falsch interpretierst. Du müsstest ein array of ShortInt definieren und nicht ein array of Byte. Nur so ist uns erklärlich, warum deine Portierung einen ständigen Vollausschlag produziert. Eine fehlerhafte Interpretation eines vorzeichenbehafteten Bytes würde genau diesen Effekt produzieren: Leise Passagen (-5 < 0 < +5) liefern Datenwerte bei 250, die du auf 128 begrenzt und laute Passsagen liefern Werte bei 128. Deshalb hatte ich dich nach der Mittellage bei 128 gefragt.

Nachdenkliche Grüße
Moin Achim
Waldteufel ? Wer ist das kenne ich nicht.
Aber auch dahin viele grüße

Das ist interessant werde umschreiben und vom Erfolg berichten.

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#29

Re: wieder konvertierungs problem

  Alt 25. Mär 2007, 12:41
So!
Erst mal danke an alle die sich mit dem problem beschäftigt haben.
Dank der info ShortInt .. funktioniert nun alles Top so wie es sein soll.

Delphi-Quellcode:
  TSpectrumData = Array[0..575] Of ShortInt;
  PSpectrumData = ^TSpectrumData;

  TWaveData = Array[0..575] Of ShortInt;
  PWaveData = ^TWaveData;
Delphi-Quellcode:
   lmax := 0;
   rmax := 0;

   for i := 0 to 575 do
      ltemp := wavedata[i];
      if (ltemp > lmax) then
      lmax := ltemp;

   for i := 0 to 575 do
      rtemp := wavedata[i+575];
      if (rtemp > rmax) then
      rmax := rtemp;

   lphi := lmax;
   rphi := rmax;

   meterlphi := meterlphi+(lphi - meterlphi)*(dt*10.0);
   meterrphi := meterrphi+(rphi - meterrphi)*(dt*10.0);

  meterlphi := Max(Min(meterlphi, 128.0), 0.0);
  meterrphi := Max(Min(meterrphi, 128.0), 0.0);
Es muss nichts extra berechnet werden da nun die richtigen werte in lmax,rmax enthalten sind.
Auch das Oscilloscop sieht nun ganz anders bei der Visualisierung aus.

Hier ein kleines Pic aus meiner Desktop collection (ich kann auch malen)

Gruss Emil
Miniaturansicht angehängter Grafiken
unbenannt_279.jpg  
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#30

Re: wieder konvertierungs problem

  Alt 25. Mär 2007, 12:57
off-topic: Malst du solche Bilder wirklich selbst? Entschuldige den mitschwingenden Zweifel, aber bei mir entartet immer alles in naive Kunst, sobald Fauna, Flora oder gar Menschen das Motiv bereichern sollen.

Beeindruckte Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 05:01 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