AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TPCMDrawer - Bilder hören statt sehen
Thema durchsuchen
Ansicht
Themen-Optionen

TPCMDrawer - Bilder hören statt sehen

Ein Thema von Dunkel · begonnen am 29. Dez 2008 · letzter Beitrag vom 31. Jan 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Dunkel
Dunkel
Registriert seit: 26. Mär 2007
Hallo zusammen!

Ja, interessanter Thread-Titel, nicht wahr?

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 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
Angehängte Dateien
Dateityp: zip beispiel_191.zip (459,4 KB, 107x aufgerufen)
Dateityp: zip pcmdrawerdemov0_2_866.zip (312,3 KB, 71x aufgerufen)
Dateityp: zip pcmdrawereditor_157.zip (411,6 KB, 42x aufgerufen)
Es ist zu wahr um schön zu sein...
 
Benutzerbild von Dunkel
Dunkel

 
Delphi 2007 Enterprise
 
#11
  Alt 30. Dez 2008, 19:48
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.
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

 
Delphi 2007 Enterprise
 
#12
  Alt 1. Jan 2009, 17:11
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!
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#13
  Alt 1. Jan 2009, 22:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

 
Delphi 2007 Enterprise
 
#14
  Alt 2. Jan 2009, 00:37
Zitat von omata:
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...
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

 
Delphi 2007 Enterprise
 
#15
  Alt 23. Jan 2009, 21:20
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.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#16
  Alt 25. Jan 2009, 17:20
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
Miniaturansicht angehängter Grafiken
pcm_153.jpg  
Fabian
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

 
Delphi 2007 Enterprise
 
#17
  Alt 30. Jan 2009, 23:35
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...
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#18
  Alt 31. Jan 2009, 23:51
Okay mit der PCMDrawerEditor.zip sind es immrhin 60 - 70 %

MfG
xZise
Fabian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:22 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