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/02/28 16:22] sophieluheidig_95 |
ws1415:projekte_im_wintersemester_2014_15:bildzutondokumentation [2016/05/10 14:46] (aktuell) |
||
---|---|---|---|
Zeile 7: | Zeile 7: | ||
* Erstellen des [[bildzutoncode#BILDINFO|BILDINFO]]-Moduls, um grundlegende Bildinformationen zu ermitteln. | * Erstellen des [[bildzutoncode#BILDINFO|BILDINFO]]-Moduls, um grundlegende Bildinformationen zu ermitteln. | ||
* Erstellen des [[bildzutoncode#FREQUENZEN|FREQUENZEN]]-Moduls, in dem im wesentlichen die Frequenzen gespeichert werden. | * Erstellen des [[bildzutoncode#FREQUENZEN|FREQUENZEN]]-Moduls, in dem im wesentlichen die Frequenzen gespeichert werden. | ||
- | * Nachdenken über das erste Konzept zur Umwandlung von Schall in Ton: Über das die Farbkomponente, die in einem Pixel maximal ist, wird einfach nur bestimmt, welcher Dreiklang ausgegeben wird (Tonika, Dominante, Subdominante). | + | * Nachdenken über das erste Konzept zur Umwandlung von Schall in Ton: Das Bild wird Pixel für Pixel abgearbeitet und für jeden Pixel ein Ton generiert. Dabei werden im Moment alle drei Farbwerte (rot, grün und blau) verglichen und dann je nachdem, welcher den größten Wert annimmt, die Tonika, Subdominante oder Dominante gespielt. Gibt es keinen größten Wert, so wird zufällig ein Akkord gespielt. |
+ | * Dreiklänge lassen sich relativ einfach zu jedem beliebigem Grundton generieren, da sich die Frequenz von z.B. der Terz nach oben zu einem beliebigen Ton sich errechnen lässt, indem man die Frequenz des Grundtons mit $\frac{5}{4}$ multipliziert. | ||
+ | * Leider ist zwischen den Tönen ein Knacken zu hören, welches folgendermaßen entsteht: Angenommen wir generieren eine einsekündige Sinus-Welle. Dann muss sie allerdings nicht notwendigerweise im Punkt $x=1$ den Wert 0 annehmen. Dadurch entsteht dann ein Sprung zur nächsten Sinuswelle und somit entsteht das Knacken. Damit unser Ton nämlich ohne Knacken abspielbar ist, muss die Sinuswelle an jeder Stelle differenzierbar sein - das heißt, keine Sprünge, keine Ecken und keine Amplitude mit einem Wert größer 1 - denn alles, was größer als eins ist, wird abgeschnitten und somit entsteht eine (undifferenzierbare) Lücke. | ||
=== 04.Dezember 2014 === | === 04.Dezember 2014 === | ||
- | * Erreichen des ersten Zwischenziels: Wir können jetzt das Windows Logo abspielen. Dazu haben wir die [[bildzutoncode#Dreiklaenge|Dreiklang]]-Klasse, die aus den Pixeln des Bildes jeweils einen Dreiklang erzeugt. | + | * Erreichen des ersten Zwischenziels: Wir können jetzt das Windows Logo abspielen. Dazu haben wir die [[bildzutoncode#Dreiklaenge|Dreiklang]]-Klasse, die aus den Pixeln des Bildes jeweils einen Dreiklang erzeugt. |
- | * Verändern des Tonerzeugungs-Algorithmus, sodass das "Knacken" verschwindet. Um dies zu erreichen, haben wir das [[bildzutoncode#Schallwerkzeuge]]-Modul von Stefan um die $\texttt{Window}$-Methode erweitert, die Schallwellen am Anfang und Ende auf Null rundet - so wird das Knacken verhindert, weil es nun keinen 'Sprung' mehr gibt. | + | * Verändern des Tonerzeugungs-Algorithmus, sodass das "Knacken" verschwindet. Um dies zu erreichen, haben wir das [[bildzutoncode#Schallwerkzeuge]]-Modul von Stefan um die $\texttt{Window}$-Methode erweitert, die Schallwellen am Anfang und Ende auf Null rundet - so wird das Knacken verhindert, weil es nun keinen 'Sprung' mehr gibt. |
* Außerdem haben wir den Code besser strukturiert - es gibt jetzt ein [[bildzutoncode#Sound|Sound]]-Modul, indem soundbezogene Methoden gespeichert werden und ein [[bildzutoncode#Bild|Bild]]-Modul, indem bildbezogene Methoden gespeichert werden. | * Außerdem haben wir den Code besser strukturiert - es gibt jetzt ein [[bildzutoncode#Sound|Sound]]-Modul, indem soundbezogene Methoden gespeichert werden und ein [[bildzutoncode#Bild|Bild]]-Modul, indem bildbezogene Methoden gespeichert werden. | ||
=== 11.Dezember 2014 === | === 11.Dezember 2014 === | ||
- | * Tonerzeugungs-Algorithmus funktioniert jetzt ohne "knacken". Siehe dafür im [[bildzutoncode#Soundv2|Soundv2]]-Modul die Methode $\texttt{appendSound()}$, in der zwei Schallwellen ohne Pause und knacken aneinander gehangen werden. | + | * 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. |
- | * Festlegen des Systems der Tonerzeugung. (Melodielinien, Erklärung folgt später) | + | * 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. |
- | * Festlegen von Farbräumen. | + | * 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 für die Zuweisung der Farbräume, ergo der zu spielenden Töne | + | * 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. |
- | * Festlegen einer Abspielreihenfolge | + | * 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. |
- | * Überarbeitung der Funktion der Tonerzeugung (wegen der nicht-Stetigkeit) | + | |
===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|Zufalleszahlen]] 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. | + |