Hi,
ich habe dich geschichte mit dem Scrollen und Zoomen bis jetzt soweit selber hinbekommen.
Hinter eine Sache bin ich bis jetzt allerdings noch nicht gekommen und zwar wodurch sich die maximal mögliche Auflösung in Pixel ergibt.
In der beschreibung des Custloop Beispiels ist ja angegeben, dass die GetLevel function 20ms scannt. Darauf würde sich dann ja ergeben das eine Sekunde Lied auf maximal 50px gezeichnet werden kann, verstehe ich das richtig ?
Wenn ja, dann würde mich allerdings interessieren wie oder besser wodurch sich diese 20ms zum Scannen mit GetLevel ergeben.
In der ScanPeaks function ist das ganze ja in einer while Schleife. Kann man es sich so vorstellen, dass beim scannen der Peaks das Lied praktisch "abgespielt" wird und während dieser Zeit die GetLevel function permanent die Werte abholt und dieser Vorgang dann halt 20ms dauert. (Somit dann alle 20ms ein Scan erfolgt) ?
Wenn ja ist das ganze dann nicht recht ungenau, denn ich möchte bezweifeln, dass die GetLevel Funktion wirklich exakt 20ms braucht.
Mir ist beispielsweise aufgefallen, dass wenn ich die Breite des zu scannenden Bereich extrem hoch setze dieser Codeteil:
Delphi-Quellcode:
bpp := BASS_ChannelGetLength(chan, BASS_POS_BYTE) div (Buffer.Width + zoom); // stream bytes per pixel
if (bpp < BASS_ChannelSeconds2Bytes(chan, 0.02)) then // minimum 20ms per pixel (BASS_ChannelGetLevel scans 20ms)
bpp := BASS_ChannelSeconds2Bytes(chan, 0.02);
zwar aufgeht, sprich bpp ist größer als BASS_ChannelSeconds2Bytes(chan, 0.02) trotzdem scheinbar nicht alle Peaks gescannt werden, sprich bis zum pixel X wird dann das komplette Spectrum korrekt gezeichnet, allerdings nicht über die komplette Breite (Buffer.Width + zoom), ab Pixel X enthält das Array mit den Peaktdaten dann keine Werte mehr.
Kann dabei jemand helfen ?
Mfg Yannic