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:bildzutoncode [2015/03/29 15:54] mr.lazy [Farbräume] |
ws1415:projekte_im_wintersemester_2014_15:bildzutoncode [2016/05/10 14:46] (aktuell) |
||
---|---|---|---|
Zeile 461: | Zeile 461: | ||
konvpixel.append((rl,gl,bl)) | konvpixel.append((rl,gl,bl)) | ||
return [farbraume.index(tupel) for tupel in konvpixel] | return [farbraume.index(tupel) for tupel in konvpixel] | ||
+ | </code> | ||
+ | ==== Synthesizer ==== | ||
+ | <code python> | ||
+ | def tune(f, d, r=44100, mode='sinus'): | ||
+ | vol = 1 | ||
+ | waves = [] | ||
+ | waves.append(sinewave(f, r, d)) | ||
+ | if mode == 'organ': | ||
+ | while vol >= 0.1: | ||
+ | vol *= 0.7 | ||
+ | waves.append(sinewave(f*freq.getRatio('quinte'), r, d, vol=vol/2)) | ||
+ | f *= freq.getRatio('oktave') | ||
+ | waves.append(sinewave(f, r, d, vol = vol)) | ||
+ | if '#' in mode: #bei #a-z1,b-z2,c-z3,d-z4,g-z5,t-z6,e-z7 wird der a-te, b-te, ..., e-te oberton hinzugefügt mit z1, z2,..., z7 % lautstärke | ||
+ | toene = mode[1:].split(',') | ||
+ | for ton in toene: | ||
+ | waves.append(sinewave(f*2**int(ton[:ton.index('-')]), r, d, vol=int(ton[ton.index('-'):])/100)) | ||
+ | |||
+ | return wave | ||
</code> | </code> | ||
==== MARKOV ==== | ==== MARKOV ==== | ||
Zeile 548: | Zeile 567: | ||
Zufallszahlen für Markov-ketten | Zufallszahlen für Markov-ketten | ||
<code python> | <code python> | ||
+ | # -*- coding: cp1252 -*- | ||
+ | #Zufallszahl für Markov-Kette | ||
+ | |||
+ | #-*- coding: utf-8 -*- | ||
+ | from __future__ import division | ||
+ | from PIL import Image | ||
+ | import random | ||
+ | from bild import Bild | ||
+ | import numpy as np | ||
+ | |||
+ | def spaltenBreite(bild, spalten = 240): | ||
+ | '''Spaltenbreite der Pixel die zusammengefasst wird!''' | ||
+ | n = bild.bBreite() | ||
+ | b = int((n-(n%spalten))/spalten) | ||
+ | if b == 0: | ||
+ | return 1 | ||
+ | return b | ||
+ | |||
+ | def spalten(bild, spaltenum = 240): | ||
+ | spalten = [] | ||
+ | pic = bild.rasterList(bild.farbraume(4)) | ||
+ | sBreite = spaltenBreite(bild, spaltenum) | ||
+ | ende = bild.bBreite()-bild.bBreite()%sBreite | ||
+ | if ende == 0: | ||
+ | ende = bild.bBreite() | ||
+ | for i in range(0, ende, sBreite): | ||
+ | spalte = [] | ||
+ | for x in range(sBreite): | ||
+ | if (i+x < len(pic)): | ||
+ | spalte += pic[i+x] | ||
+ | spalten.append(spalte) | ||
+ | return spalten | ||
+ | |||
+ | def zufallsZahl(bild, spaltenum = 240): | ||
+ | n = bild.bBreite() | ||
+ | b = spaltenBreite(bild, spaltenum) | ||
+ | l = int(bild.bHohe()) | ||
+ | r = b * l | ||
+ | |||
+ | spalter = [] | ||
+ | spaltenliste = spalten(bild, spaltenum) | ||
+ | | ||
+ | for spalte in spaltenliste: | ||
+ | spalter.append(sum(spalte)/len(spalte)) | ||
- | | + | zZahl = [] |
+ | for spalte in range(len(spalter)): | ||
+ | varianz = 0 | ||
+ | for y in range(r): | ||
+ | x1 = spalter[spalte] | ||
+ | x2 = spaltenliste[spalte][y] | ||
+ | varianz += 1/r*(x1 - x2)**2 | ||
+ | zZahl.append(varianz) | ||
+ | maximum = max(zZahl) | ||
+ | return [num/maximum for num in zZahl] | ||
</code> | </code> |