Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TPCMDrawer - Bilder hören statt sehen (https://www.delphipraxis.net/126624-tpcmdrawer-bilder-hoeren-statt-sehen.html)

Dunkel 29. Dez 2008 19:40


TPCMDrawer - Bilder hören statt sehen
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo zusammen!

Ja, interessanter Thread-Titel, nicht wahr? :wink:

Was verbirgt sich hinter dem TPCMDrawer? Und wie, zum Belzebub, kann man Bilder hören?


Ein wenig zur Vorgeschichte:
Der werte User delfiphan hat, im Konkurenzforum *hüstel*, vor ziemlich genau 2 Jahren ein Rätsel gepostet. Vor 2 Tagen habe ich, beim Stöbern im (Konkurenz- *hüstel) Forum, genau diese MP3-Datei entdeckt, runtergeladen, mir angehört - und ich war baff, als ich die Auflösung des Rätsels von ihm gesehen habe.
Nach dem dann die Faszination ein wenig nachgelassen hat und ich wieder klar denken konnte :wink: habe ich mich mit der BASS.dll dran gemacht, ähnliche Töne zu kreieren. Das hat auch irgendwann (nach studieren der RIFF WAVE-Spezifikationen, aufarbeiten der theoretischen Hintergründe, ziemlich viel Verzweiflung, ein Schubs in die richtige Richtung von delfiphan [vielen Dank nochmal dafür!] und einer Nacht drüber schlafen) recht gut geklappt. Dann habe ich aus dem Projekt, welches die BASS.dll benötigt eine 190-Zeilen-Klasse ohne irgendwelche externen Abhängigkeiten (DLLs, Units, etc.) gebastelt.

Und genau diese PCMDrawer.pas, mit der man ohne großen Aufwand recht nett anzuhörende/anzusehende Audio-Dateien erstellen kann, stelle ich der OpenSource-Gemeinde, unter der "Creative Commons Attribution-ShareAlike (CC by-sa)"-Lizenz zur Verfügung. Kurz gesagt: Ihr könnt alles damit machen, solange Ihr meine Wenigkeit in Euren Resultaten erwähnt und die Projekte in ähnlicher Form verbereitet werden.

Im Anhang befindet sich die PCMDrawerDemo.zip, in der sich der komplette Sourcecode inklusive einer Demo-Echse und einem Kompilat der Demo befindet. In der Beispiel.zip befindet sich eine Bitmap-Datei und das (zu einer MP3 komprimierte) Ergebnis der Demo.


Zum Ansehen der Töne empfehle ich, wie auch delfiphan im zitierten Thread, http://www.tyberis.com/download/SAnalyze.exe

Viel Spaß damit!

Grüße
Michael

omata 29. Dez 2008 20:48

Re: TPCMDrawer - Bilder hören statt sehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wirklich sehr interessant.
Habe mal ein paar Veränderungen vorgenommen...

Dunkel 29. Dez 2008 21:41

Re: TPCMDrawer - Bilder hören statt sehen
 
Ah, an ähnliches habe ich auch schon gedacht. Wird ASAP (As Slow As Possible; oder wie war das? :stupid: ) mit meinem lokalen Versionsstand abgeglichen und im Start-Posting upgedated. Danke!

rollstuhlfahrer 29. Dez 2008 23:19

Re: TPCMDrawer - Bilder hören statt sehen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Sieht toll aus. Nen Tipp noch:
Im Eingangsposting wird auf SAnalyser verwiesen. Wenn man jetzt bei dem netten Link auch noch den Letzten Punkt aus der Adresse entfernen würde, würde imho der Zugriff auf die Datei auch gewährleistet sein.

Bernhard

EDIT: Aber an der Funktionsweise hapert es noch ein bisschen. (Siehe Anhang)
Auch die erstellte Datei wollte sich überhaupt nicht mit WMP öffnen lassen, da WMP einen Codec wollte. Seit wann braucht man für simples WAVE einen speziellen Codec?

Dunkel 29. Dez 2008 23:28

Re: TPCMDrawer - Bilder hören statt sehen
 
Zitat:

Zitat von rollstuhlfahrer
Sieht toll aus.

Muchas Gracias! :-D

Zitat:

Zitat von rollstuhlfahrer
Nen Tipp noch:
Im Eingangsposting wird auf SAnalyser verwiesen. Wenn man jetzt bei dem netten Link auch noch den Letzten Punkt aus der Adresse entfernen würde, würde imho der Zugriff auf die Datei auch gewährleistet sein.

Mea Culpa, ist berichtigt.

Neutral General 30. Dez 2008 00:01

Re: TPCMDrawer - Bilder hören statt sehen
 
Hi,

Hört sich interessant an, sieht interessant aus :mrgreen:

Allerdings erstellt bei mir deine Demo-exe keine abspielbaren wav Dateien.
Woran kann das liegen?

Florian H 30. Dez 2008 00:19

Re: TPCMDrawer - Bilder hören statt sehen
 
Bei mir erstellt sie Wav-Dateien, die zumindest in VLC keinen Mucks von sich geben.. also nicht wirklich "Bilder hören".

Dunkel 30. Dez 2008 00:28

Re: TPCMDrawer - Bilder hören statt sehen
 
Hmmm... anscheinend halte ich mich doch an einigen Punkten nicht an die RIFF WAVE - Spezifikationen, so dass der WMP die Datei nicht abspielen kann (maybe vice versa?). Ich werd' mal schaun', was sich da machen lässt; ist wahrscheinlich nur eine Kleinigkeit im Header.
VLC spielt die erstellten Dateien bei mir problemlos ab. Hab' ich bei mir ein Codec installiert, den sonst niemand hat?! :|

WinAmp macht da keine Probleme. Auch mein AudioPlayer AudioDB (siehe meine Sig.) kann diese Dateien wiedergeben und solch ein Sonagramm zeichnen (zugegebener Maßen ein wenig verzerrt, da die Auflösung wesentlich höher ist); vielleicht könnt Ihr es ja damit mal probieren.


Edit: Jo, liegt am Header. Das kommt davon, wenn man sowas nur mit einem Player (WinAmp) ausprobiert...

Dunkel 30. Dez 2008 01:26

Re: TPCMDrawer - Bilder hören statt sehen
 
So, ich hoffe, dass die Version 0.11 jetzt auch WMP- und VLC-kompatible Wave-Dateien generiert; bei mir funktioniert es zumindest.
Desweiteren kann TPCMDrawer jetzt auch "Graustufen" darstellen, vorher wurden nur alle schwarzen [RGB(0,0,0)] Pixel hörbar gemacht. Alle Änderungen vom omata wurden übernommen. Die Klasse ist jetzt von TThread abgeleitet, ob es auch so funktioniert wie es funktionieren soll - keine Ahnung, ich hab jetzt auch kein Bock mehr das ausgiebig zu testen :lol: .

Der Download im ersten Beitrag wurde entsprechend aktualisiert.

rollstuhlfahrer 30. Dez 2008 19:38

Re: TPCMDrawer - Bilder hören statt sehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt siehts schon weit besser aus. Es fehlt nur noch die Funktion, aus dem Ton ein Bild zurückzuholen

Bernhard

Dunkel 30. Dez 2008 20:48

Re: TPCMDrawer - Bilder hören statt sehen
 
Zitat:

Zitat von rollstuhlfahrer
Es fehlt nur noch die Funktion, aus dem Ton ein Bild zurückzuholen

Ich könnte den Sonagramm-Visualisierungs-Teil aus AudioDB extrahieren und mit in die Klasse (in eine neue Klasse) packen. Mal schaun'.
Momentan bastle ich an einem GUI dafür, da könnte man dann auch ein "Livebild" während der Konvertierung anzeigen lassen.

Dunkel 1. Jan 2009 18:11

Re: TPCMDrawer - Bilder hören statt sehen
 
Ich hab' mal ein wenig dran weitergebastelt.

Das Demoprojekt ist jetzt auch endlich erwachsen, Laden von Bitmaps und JPEGs funktioniert via Drag&Drop aus dem Explorer, die Bilder können verkleinert/vergrößert werden, an diversen Einstellungen kann nach Lust und Laune herumgespielt werden, Threading ist endlich implementiert.

ToDos: Geschwindigkeit! Mal gucken, ob man Multithreading implementieren kann.

Viel Spaß damit!

omata 1. Jan 2009 23:55

Re: TPCMDrawer - Bilder hören statt sehen
 
Zitat:

Zitat von Dunkel
ToDos: Geschwindigkeit! ...

Schau dir doch mal Bitmap.ScanLine an, wenn du das anstelle von Canvas.Pixels verwendest, dann wird es kein Geschwindigkeitsproblem mehr geben.

Dunkel 2. Jan 2009 01:37

Re: TPCMDrawer - Bilder hören statt sehen
 
Zitat:

Zitat von omata
Zitat:

Zitat von Dunkel
ToDos: Geschwindigkeit! ...

Schau dir doch mal Bitmap.ScanLine an, wenn du das anstelle von Canvas.Pixels verwendest, dann wird es kein Geschwindigkeitsproblem mehr geben.

Ist schon implementiert. Entweder mache ich da was falsch oder es bringt doch nicht so viel.
Delphi-Quellcode:
procedure TPCMDrawerWorker.ReadPictureData;
type
  pixel = array[0..2] of byte;
var
  p : ^pixel;
  i: integer;
  r, g, b, c: byte;
  color, v: integer;
begin
  p := fBitmap.ScanLine[fBitmapPosCounter];
  for i := 0 to fBitmap.Width -1 do
  begin
    r := Byte(p^[0]);
    g := Byte(p^[1]);
    b := Byte(p^[2]);

    if fReverseColors then
      c := 255 - ((r+b+g) div 3)
    else
      c := ((r+b+g) div 3);

    v:= Trunc(c / 255 * fAmplitude);
    if v >= cIgnoreColorLower then
      fPixelData[i].Amplitude := v
    else
      fPixelData[i].Amplitude := 0;

    inc(p);
  end;
  Inc(fBitmapPosCounter);
end;
Multithreading (sprich das Aufteilen des Bildes in mehrere Abschnitte, welche dann autark bearbeitet werden) bringt auf meinem DualCore mit 2 Threads ungefähr 40 - 45 % mehr Geschwindigkeit. Immerhin... :cyclops:

Dunkel 23. Jan 2009 22:20

Re: TPCMDrawer - Bilder hören statt sehen
 
Lange nicht mehr dran weitergebastelt und doch ist zwischenzeitlich das Projekt gewachsen. :)

Ich hab mal ein neues ZIP-Archiv an den ersten Beitrag gepinnt. In ihr befindet sich ein etwas ausgereifter Editor, um Geräusche aus Bildern zu kreieren. Mit integriert ist auch eine Sonagramm-Visualisierung.

Den Quelltext der TPCMDrawer-Klasse muss ich noch ein wenig "schönschreiben", dann werde ich ihn auch im ersten Beitrag aktualisieren.

xZise 25. Jan 2009 18:20

Re: TPCMDrawer - Bilder hören statt sehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mir die "PCMDrawerDemoV0_2.zip", welche zwar mehrere Threads hat, aber nur ein Kern auslastet (22 - 25 %).

Außerdem dauert es 38 von 12 Sekunden? Abgesehen davon, sind das (wenns andersherum ist), fast 33 %, obwohl die Progressbar noch nicht mal etwas zeigt.

Ansonsten kann ich erstmal dazu nichts sagen.

MfG
xZise

Dunkel 31. Jan 2009 00:35

Re: TPCMDrawer - Bilder hören statt sehen
 
Zitat:

Zitat von xZise
Ich habe mir die "PCMDrawerDemoV0_2.zip", welche zwar mehrere Threads hat, aber nur ein Kern auslastet (22 - 25 %).

Außerdem dauert es 38 von 12 Sekunden? Abgesehen davon, sind das (wenns andersherum ist), fast 33 %, obwohl die Progressbar noch nicht mal etwas zeigt.

Ansonsten kann ich erstmal dazu nichts sagen.

MfG
xZise

Die Version, welche Du hast, kann zwar (theoretisch) mehr als einen Kern auslasten; diese tut es (auf Deinem Quad-Core) aber nicht!

Und das Problem, dass die vorhergesagte Laufzeit nicht stimmt, ist mir bekannt. Für's Beheben müsste ich Delphi starten: mal schaun', wann ich das das nächste Mal mache...

xZise 1. Feb 2009 00:51

Re: TPCMDrawer - Bilder hören statt sehen
 
Okay mit der PCMDrawerEditor.zip sind es immrhin 60 - 70 % :thumb:

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz