Dies ist eine alte Version des Dokuments!
test-moving-circles_b1206-alpha_defining new circles ist ein Programm, welches 20 Kreise, welche eine zufällige Farbe und eine in 0,01er Schritten steigenden Radius besitzen, übereinander zeichnet.
from __future__ import division import numpy as np import moving_circles from scipy.fftpack import * from moving_circles import Canvas, Circle from microlistener import MicroListener from random import randint # chose 'VISPY' or 'MATPLOTLIB' PREFERRED_BACKEND = 'MATPLOTLIB_WX' ###################################################### # One possible use case: # Use timer event of backend to change graphic objects. # Here 10 circles are created and a callback function # action(...) is registered to be called at each timer # event. ###################################################### ###micolistener### CHANNELS=2 RATE=44100 CHUNK=2**11 z=[] last_values1 = (0,0,0) last_values2 = (0,0,0) last_values3 = (0,0,0) def micro_callback(in_data, frame_count, time_info,status): global z y=np.array(np.fromstring(in_data,dtype=np.short),dtype=np.float) yf = fft(y) xf = np.linspace(0.0, (2.0*RATE), CHUNK/2) if CHANNELS==2: y=y.reshape((y.shape[0]//2,2)) else: y=y.reshape((y.shape[0],1)) #print int(np.linalg.norm(y[:,0])/2000.)*'*' z=np.abs(yf) return (in_data, status) listen=MicroListener(RATE,CHANNELS,CHUNK,micro_callback) ### l_kreise=[] def action(objects, event): global z, last_values1, last_values2, last_values3 n = 50 #print z[2048]/1000000.0 last_values1 = (last_values1[1], last_values1[2], sum(z[186:186+n])/(n*100000.0)) ##1000 Hz (?) # last_values2 = (last_values2[1], last_values2[2], sum(z[19:19+n])/(n*1000000.0)) ##100 Hz (?) # last_values3 = (last_values3[1], last_values3[2], sum(z[1115:1115+n])/(n*10000.0)) ##6000 Hz (?) # circ.set_radius(sum(last_values1)/3) # circ2.set_radius(sum(last_values2)/3) # circ3.set_radius(sum(last_values3)/3) #dt, elapsed = event.dt, event.elapsed #for i,circ in enumerate(objects): # circ.move(0.7*dt*np.sin(elapsed*(i+1)), 0.7*dt*np.cos(elapsed*(i+1))) # circ.set_color( (np.abs(np.sin(elapsed*(i+1))),np.abs(np.sin(elapsed*2*(i+1))), np.abs(np.sin(elapsed*3*(i+1))),0.3) ) i = 0.01 for circ_temp in l_kreise: circ_temp.set_radius(i) i+=0.01 # create objects, register callback and start program. win = Canvas() objects = [] #for i in range(10): # circ = Circle(win, pos=(-0.6+0.05*i,0), radius=0.1,color = (1,0,0,0.2)) # objects.append(circ) #coordinates x1=0.0 y1=0.25 x2=-0.5/np.sqrt(5) y2=-0.25/np.sqrt(5) x3=0.5/np.sqrt(5) y3=-0.25/np.sqrt(5) for i in range(20): l_kreise.append(Circle(win,pos=(0,0),radius=0, color=(randint(0,10)/10,randint(0,10)/10,randint(0,10)/10,0.2))) #circ = Circle(win, pos=(x1,y1),radius = 0.1, color=(1,0,0,0.2)) #circ2 = Circle(win, pos=(x2,y2),radius = 0.1, color=(0,1,0,0.2)) #circ3 = Circle(win, pos=(x3,y3),radius = 0.1, color=(0,0,1,0.2)) while True: win.set_action(action, objects) #print z[0] win.run()
Außerdem haben wir test-moving-circles b1205 moving-average entwickelt, welches im Gegensatz zu test_moving_circles_1.2_4-Kreise-Frequenzband jeweils die letzten drei Ergebnisse nimmt und den daraus resultierenden gleitenden Mittelwert benutzt. <code python> from future__ import division
import numpy as np import moving_circles from scipy.fftpack import * from moving_circles import Canvas, Circle from microlistener import MicroListener
# chose 'VISPY' or 'MATPLOTLIB'
PREFERRED_BACKEND = 'MATPLOTLIB_WX'
###################################################### # One possible use case: # Use timer event of backend to change graphic objects. # Here 10 circles are created and a callback function # action(…) is registered to be called at each timer # event. ###################################################### ###micolistener### CHANNELS=2 RATE=44100 CHUNK=2**11 z=[] last_values1 = (0,0,0) last_values2 = (0,0,0) last_values3 = (0,0,0)
def micro_callback(in_data, frame_count, time_info,status):
global z y=np.array(np.fromstring(in_data,dtype=np.short),dtype=np.float) yf = fft(y) xf = np.linspace(0.0, (2.0*RATE), CHUNK/2) if CHANNELS==2: y=y.reshape((y.shape[0]//2,2)) else: y=y.reshape((y.shape[0],1)) #print int(np.linalg.norm(y[:,0])/2000.)*'*' z=np.abs(yf) return (in_data, status)
listen=MicroListener(RATE,CHANNELS,CHUNK,micro_callback) ###
def action(objects, event):
global z, last_values1, last_values2, last_values3 n = 50 #print z[2048]/1000000.0 last_values1 = (last_values1[1], last_values1[2], sum(z[186:186+n])/(n*100000.0)) ##1000 Hz (?) last_values2 = (last_values2[1], last_values2[2], sum(z[19:19+n])/(n*1000000.0)) ##100 Hz (?) last_values3 = (last_values3[1], last_values3[2], sum(z[1115:1115+n])/(n*10000.0)) ##6000 Hz (?) circ.set_radius(sum(last_values1)/3) circ2.set_radius(sum(last_values2)/3) circ3.set_radius(sum(last_values3)/3) #dt, elapsed = event.dt, event.elapsed #for i,circ in enumerate(objects): # circ.move(0.7*dt*np.sin(elapsed*(i+1)), 0.7*dt*np.cos(elapsed*(i+1))) # circ.set_color( (np.abs(np.sin(elapsed*(i+1))),np.abs(np.sin(elapsed*2*(i+1))), np.abs(np.sin(elapsed*3*(i+1))),0.3) )
# create objects, register callback and start program.
win = Canvas() objects = []
#for i in range(10): # circ = Circle(win, pos=(-0.6+0.05*i,0), radius=0.1,color = (1,0,0,0.2)) # objects.append(circ)
#coordinates x1=0.0 y1=0.25 x2=-0.5/np.sqrt(5) y2=-0.25/np.sqrt(5) x3=0.5/np.sqrt(5) y3=-0.25/np.sqrt(5)
circ = Circle(win, pos=(x1,y1),radius = 0.1, color=(1,0,0,0.2)) circ2 = Circle(win, pos=(x2,y2),radius = 0.1, color=(0,1,0,0.2)) circ3 = Circle(win, pos=(x3,y3),radius = 0.1, color=(0,0,1,0.2))
while True:
win.set_action(action, objects) #print z[0] win.run()
</code>