public void Update(double timestamp, double duration, float[] magnitudes, float[] phases){
    		final GraphicsContext context = display.getGraphicsContext2D();
    		display.setWidth(width);
    		display.setHeight(height);
    		context.setFill(backgroundColor);
    		context.fillRect(0, 0, display.getWidth(), display.getHeight());
        	int size = centers.size();
        	timeSinceColorUpdate += duration;
    		if(timeSinceColorUpdate >= COLOR_UPDATE_FREQUENCY) {
    			timeSinceColorUpdate = 0;
    			incrementColors();
    		}
    		int[] heights = processHeights(magnitudes, timestamp);
        	for(int i = 0; i < size; i++){
        		int xcent = ((int) centers.get(i).getX());
        		int ycent = ((int) centers.get(i).getY());
        		double[] ypos = new double[NUMPOINTS];
        		double[] xpos = new double[NUMPOINTS];
    			context.beginPath();
	    		for(int j=0;j<NUMPOINTS;j++) {
					ypos[j] = ycent+(heights[j]*Math.sin((360/NUMPOINTS)*j)+RADIUS+CLICK_ADJUSTMENT);
					xpos[j] = xcent+(heights[j]*Math.cos((360/NUMPOINTS)*j)+RADIUS+CLICK_ADJUSTMENT);
        			if(j == 0){
    					context.moveTo(xpos[j], ypos[j]);
    				}else if(j%3 == 0 && !(j >= 92)){
    					context.bezierCurveTo(xpos[j-2], ypos[j-2], xpos[j-1], ypos[j-1], xpos[j], ypos[j]);
    				}
	    		}
    			context.setFill(new RadialGradient(0, 0, 0.5, 0.5, 0.1, true, CycleMethod.REPEAT,new Stop(0.0, topColor),new Stop(1.0, bottomColor)));
    			context.fill();
    			context.closePath();
        		context.setFill(new RadialGradient(0, 0, 0.5, 0.5, 0.1, true, CycleMethod.REPEAT,new Stop(0.0, topColor),new Stop(1.0, bottomColor)));
        		context.fillOval((xcent + 50), (ycent + 50), RADIUS, RADIUS);
        	}
        }