public void update(long dt, float ratioY) {
		double step = 2 * Math.PI / POINTS_PER_CIRCLE;
		angle += dt * BUBBLE_D_ANGLE;
		float fromX = startX + (float) (0.05f * Math.sin(angle));
		float toX = fromX + size;
		float fromY = this.fromY + dt * speed;
		float toY = fromY + size;
		centerY += dt * virtualSpeed;
		getColor()[3] = (TOP_Y - centerY / TOP_Y);
		vertexBuffer.put(0, Utils.normalizeGl(0, fromX, toX));
		vertexBuffer.put(1, Utils.normalizeGl(centerY * ratioY, fromY, toY));
		for (int i=1; i<=POINTS_PER_CIRCLE; i++) {
			vertexBuffer.put(COORDS_PER_VERTEX * i, Utils.normalizeGl((float) Math.sin(-Math.PI + step * i), fromX, toX));
			vertexBuffer.put(COORDS_PER_VERTEX * i + 1, Utils.normalizeGl((float) Math.cos(-Math.PI + step * i) * ratioY, fromY, toY));
		}
		this.fromY = fromY;
	}
Update position of bubble.
@param dt time elapsed from last calculations
@param ratioY aspect ratio for Y coordinates
library/src/main/java/com/cleveroad/audiovisualization/GLBubble.java