Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws1415:projekte_im_wintersemester_2014_15:bildzutondokumentation [2015/03/16 00:29] mr.lazy |
ws1415:projekte_im_wintersemester_2014_15:bildzutondokumentation [2016/05/10 14:46] (aktuell) |
||
---|---|---|---|
Zeile 17: | Zeile 17: | ||
* Tonerzeugungs-Algorithmus wurde nun weiter verbessert - Nun können Sinuswellen auch ohne Pause aneinandergehängt werden. Da beide Sinuswellen an den Rändern gegen 0 streben, entsteht am Übergang eine Pause. Dies kann jedoch verhindert werden, indem man beide Sinuswellen in einem Grenzbereich überlappen lässt. | * Tonerzeugungs-Algorithmus wurde nun weiter verbessert - Nun können Sinuswellen auch ohne Pause aneinandergehängt werden. Da beide Sinuswellen an den Rändern gegen 0 streben, entsteht am Übergang eine Pause. Dies kann jedoch verhindert werden, indem man beide Sinuswellen in einem Grenzbereich überlappen lässt. | ||
* Neues Überdenken der Melodieerzeugung: Ein Bild Pixel für Pixel abzuspielen, mag vielleicht am Anfang relativ sinnvoll erscheinen. Jedoch wird relativ schnell klar, dass bei Bildern mit mehr als 600 Pixeln die Melodie durchaus recht lang werden kann, was relativ unpraktisch ist. Die neue Idee ist, das Bild spaltenweise durchzugehen und aus jeder Spalte einen Ton zu generieren. | * Neues Überdenken der Melodieerzeugung: Ein Bild Pixel für Pixel abzuspielen, mag vielleicht am Anfang relativ sinnvoll erscheinen. Jedoch wird relativ schnell klar, dass bei Bildern mit mehr als 600 Pixeln die Melodie durchaus recht lang werden kann, was relativ unpraktisch ist. Die neue Idee ist, das Bild spaltenweise durchzugehen und aus jeder Spalte einen Ton zu generieren. | ||
- | * Um jedoch die Menge der verschiedenen Informationen zu verringern, haben wir Farbräume eingeführt - dabei wird der RGB-Farbwürfel in $n^3$ kleinere Würfel zerlegt, und jede mögliche Farbe liegt somit in einem dieser kleineren Würfel. Statt Tripeln mit Werten von 0-255 hat man nun also einfach $n^3$ verschiedene Zahlen. | + | * Um jedoch die Menge der verschiedenen Informationen zu verringern, haben wir Farbräume eingeführt - dabei wird der RGB-Farbwürfel in $n^3$ kleinere Würfel zerlegt, und jede mögliche Farbe liegt somit in einem dieser kleineren Würfel. Statt Tripeln mit Werten von 0-255 hat man nun also einfach $n^3$ verschiedene Zahlen. Siehe hierzu die [[bildzutoncode#Farbräume|Farbraum-Methode]] |
=== 18.Dezember 2014 === | === 18.Dezember 2014 === | ||
* Erstellen einer Funktion, die aus einer Liste von Pixeln eine Liste macht, in dem nun für jeden Pixel der zugehörige Farbraum eingetragen ist. | * Erstellen einer Funktion, die aus einer Liste von Pixeln eine Liste macht, in dem nun für jeden Pixel der zugehörige Farbraum eingetragen ist. | ||
- | * | + | * Weiterhin haben wir darüber nachgedacht, wie man nun aus dieser Liste eine Melodie erzeugt. Da die Melodie außerdem nicht länger als 2 Minuten sein soll, mussten wir uns eine Möglichkeit überlegen, wie man die Informationen aus mehreren Tönen zusammen fassen kann. Dabei war unsere erste Idee, einfach den Mittelwert zu bilden. |
===08.Januar 2015=== | ===08.Januar 2015=== | ||
- | * Beginn der neuen Methode für Tonerzeugung mit Begleitung und Melodie abhängig von den überwiegenden Farben im Bild | + | * Unser Ziel ist es jetzt, zunächst eine Methode zu schreiben, die uns aus unserem Bild eine Melodie erzeugt, welche etwa 2 Minuten lang ist. Danach soll noch eine passende Begleitung dazu generiert werden. |
- | * Beginn der Programmierung einer Synthesizer-Methode | + | * Beginn der Programmierung einer Synthesizer-Methode, mit der man verschiedene Instrumente imitieren kann. Erstaunlicherweise muss man dafür nur bestimmte Obertöne eines Tones mitspielen. Nehmen wir als beispielhafte Erklärung für Obertöne den Kammerton 'a' mit einer Frequenz von 440 Hz. Dann ist der erste Oberton eine Oktave höher ($440*2$), der zweite noch eine Quinte höher ($440*3$), etc. Allgemein gilt das der n-te Oberton eine Frequenz von $n*440$ Hz hat. Wenn man nun auf einem Instrument einen Ton spielt, so wird nämlich nicht nur ein Ton dieser Frequenz gespielt (sonst klänge es wie ein Sinuston), sondern auch nur viele dieser Obertöne. Je nach Zusammensetzung der Obertöne entsteht eine andere Klangfarbe. Man kann dann die Obertonspektren verschiedener Instrumente analysieren und sie imitieren, indem man jedem Ton genau dieses Spektrum hinzufügt. |
===15.Januar 2015=== | ===15.Januar 2015=== | ||
- | * Weiterarbeiten an den o.g. | + | * Wir haben eine Methode geschrieben, welche ausrechnet, wie viele Spalten man zusammen fassen muss, damit man insgesamt 240 zusammengefasste Spalten hat. |
- | * Orgelähnliche Töne können nun erzeugt werden. Dazu spielt man zusätzlich zum 'Sinus-Grundton' zusätzlich noch höhere Oktaven und Quinten (Obertöne) ab. | + | * Orgelähnliche Töne können nun erzeugt werden. Dazu spielt man zusätzlich zum 'Sinus-Grundton' zusätzlich noch höhere Oktaven, Quinten und Terzen (Obertöne) ab. Außerdem kann man beliebige Obertöne mit beliebiger Lautstärke angeben, dafür muss man allerdings manuell einen String schreiben. Siehe dazu die [[bildzutoncode#Synthesizer|tune-Methode]], welche dieses Problem löst. |
- | * Definition der Farbräume | + | |
===22.Januar 2015=== | ===22.Januar 2015=== | ||
- | * Weiterarbeiten an den o.g. | + | * Auf einmal erscheint wieder ein Knacken in der Melodie, wenn Töne aneinandergefügt werden. Da wir dachten, wir hätten diesen Fehler beseitigt, waren wir einigermaßen verwirrt und brauchten leider einige Zeit, um das Problem zu beheben |
- | * plötzliches Auftauchen vom Knacken führt zu einer Anzahl an neuen, seltsamen Fehlern | + | * Deshalb haben wir sonst nicht viel erreicht und unsere Methode zur Erzeugung der Melodie ist leider nicht vorangekommen. |
===29.Januar 2015=== | ===29.Januar 2015=== | ||
- | * Weiterarbeiten an o.g. | + | * Wir haben eine weitere Methode geschrieben, welches die Pixelmatrix des Bildes, die die Dimension Höhe*Breite hatte, in eine neue Matrix überführt, welche genau 240 Spalten hat. Dabei werden eventuell überstehende Spalten, welche sich nicht ohne Rest aufteilen ließen, abgeschnitten. Im Moment soll unsere Melodie aus 240 Tönen bestehen, welche etwa 0.5 Sekunden lang sind. Dies ergibt eine Melodie, welche etwa 2 Minuten lang ist. |
===05.Februar 2015=== | ===05.Februar 2015=== | ||
- | * Nachdem das Ausmitteln für die Suche nach den überwiegenden Farben im Bild eine starke Vereinheitlichung des Bildes ergibt, haben wir doch noch auf die Fourier-Analyse zur Bildinterpretation zurück gegriffen. Im Fourier-transformierten Bild erkennt man Stellen der größten Veränderungen im Bild. | + | * Heute haben wir endlich unsere Methode fertiggestellt, die aus unserem Bild eine Liste mit 240 Einträgen zwischen 0 und 7 erzeugt. Jedoch stehen wir vor dem Problem, dass sich ausmitteln von Spalten als eine schlechte Methode herausstellt, da das Mittel aufeinanderfolgender Spalten in etwa gleich ist und so keine abwechslungsreiche Melodie entstehen kann. Stefan hatte uns nun den Tipp gegeben, es mit dem Fouriertransformierten Bild zu versuchen. Dieses ist nämlich wesentlich abwechslungsreicher als das Original und enthält dabei aber noch wichtige Informationen des Originals. JPEG-Kompression bedient sich beispielsweise auch der Fouriertransformation. |
===12.Februar 2015=== | ===12.Februar 2015=== | ||
+ | * Wir haben es geschafft, eine halbwegs abwechslungsreiche Melodie zu erzeugen. Allerdings ist die Generierung aus den Bildinformationen so komplex, dass es fast gar nichts mehr damit zu tun hat, wie das Bild aussieht. Wir haben Stefan gefragt, ob er uns vielleicht ein paar Tipps geben kann; er hat gesagt, wir sollten es mal mit Markov-Ketten versuchen. | ||
===27.Februar 2015=== | ===27.Februar 2015=== | ||
- | * Auf der Suche nach einer neuen Methode zur Melodieerzeugung hat Stefan uns die Markov- Ketten vorgestellt. | + | * Heute haben wir uns nocheinmal eingehender mit Markov-Ketten auseinandergesetzt und sie scheinen der Schlüssel zu unserem Problem zu sein: Das Ganze funktioniert nämlich folgendermaßen: Man hat im ein quadratische Matrix und verschieden Zustände (Bei uns zum Beispiel verschiedene Töne). Dann ist in der Matrix gespeichert, mit welchen Wahrscheinlichkeiten man von Zustand A in Zustand B, C etc. übergeht. |
- | * Erstellung der Methode [[bildzutoncode#MARKOV|MARKOV]], mit der wir aus dem Fourier-transformierten Bild Informationen für die Töne der Melodie gewinnen. | + | Beispiel: |
- | * Markov-Ketten geben die Wahrscheinlichkeiten für den Übergang von einem zu anderen möglichen Zuständen an. | + | | ^ Zustand A ^ Zustand B ^ Zustand C ^ |
- | * Erstellung der Methode [[bildzutoncode#Zufallszahlen|Zufallszahlen]] für die Auswahl des Endzustandes aus den Markov-Möglichkeiten über die Berechnung der normierten Varianz der Farbwerte innerhalb einer Spalte. | + | ^ Zustand A | 0.2 | 0.1 | 0.3 | |
+ | ^ Zustand B | 0.5 | 0.1 | 0.3 | | ||
+ | ^ Zustand C | 0.3 | 0.8 | 0.4 | | ||
+ | Die Summe jeder Spalte muss 1 betragen. Sagen wir nun, wir wären in Zustand B. Dann würden wir mit einer Wahrscheinlichkeit von 0.1 in Zustand B bleiben, mit 0.1 in A wechseln und mit 0.8 in C setzen. So eine Matrix kann man natürlich auch für wesentlich mehr Zustände generieren (wir haben 24 Töne genommen, um 3 Oktaven abzudecken). Das Schöne dabei ist, dass es unglaublich einfach zu implementieren ist, und dass man, wenn man das notwendige statistische Material hätte, damit verschiedene andere Komponisten imitieren kann, indem man zählt, welche Töne wie oft nach welchen Anderen kommen. | ||
+ | * Wir haben uns dafür entschieden, die Markov-Matrix aus dem Fouriertransformierten Bild zu generieren und haben dafür die Methode [[bildzutoncode#MARKOV|MARKOV]] geschrieben. | ||
+ | * Weiterhin hatte uns Stefan geraten, anstelle des Mittelwertes die Varianz (also die Abweichung vom Mittelwert) zu verwenden, um die Melodieliste zu generieren. | ||
+ | * Erstellung des Moduls [[bildzutoncode#Zufallszahlen|Zufallszahlen]] für die Auswahl des Endzustandes aus den Markov-Möglichkeiten über die Berechnung der normierten Varianz der Farbwerte innerhalb einer Spalte. Obwohl die Methode zufallszahlen heißt, handelt es sich hierbei keineswegs um Zufallszahlen, sie machen allerdings einen sehr zufälligen Eindruck. | ||
===28.Februar 2015=== | ===28.Februar 2015=== | ||
- | * Erstellung einer Methode für den Rhythmus der Melodie [[bildzutoncode#rhythm|Rhythmus]] aus der Markov-Matrix des Fourier-transformierten Bild bzw. auf Basis einiger Werke von J.S.Bach | + | * Erstellung einer Methode für den Rhythmus der Melodie mithilfe von Markovketten. Die oben beschriebenen Markovketten kann man nämlich auch zur Generierung von Rhythmen benutzen. Hierbei haben wir einige Werke Bachs analysiert und daraus die Matrix generiert - das Ziel ist damit natürlich, einen bachähnlichen Rhythmus zu erzeugen, was uns auch gelungen ist. |
- | * Erste Überlegungen für eine Methode für die Begleitstimme mit bestimmten Bausteinen, die auf Basis von Wahrscheinlichkeiten und Abhängig vom Ton der Melodie errechnet wird. | + |