2017-02-02:

Wir haben uns weiter mit der Visualisierung beschäftigt. Inzwischen existiert ein Programm, welches durch den Input von verschiedenen Frequenzen, Kreise, in Abhängigkeit der Frequenzen, ausgibt. Diese variieren in der Größe und haben unterschiedliche Farben.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  test_moving_circles.py
#  
# 
#  
#  
#  
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=[]
 
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
	print z[2048]/1000000.0
	circ.set_radius(z[186]/1000000.0)	##1000 Hz (?)
	circ2.set_radius(z[19]/10000000.0)	##100 Hz (?)
	circ3.set_radius(z[1115]/50000.0)	##6000 Hz (?)
    #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.5))
circ2 = Circle(win, pos=(x2,y2),radius = 0.1, color=(0,1,0,0.5))
circ3 = Circle(win, pos=(x3,y3),radius = 0.1, color=(0,0,1,0.5))
 
while True:
	win.set_action(action, objects)
	#print z[0]
	win.run()