public void AddPianoRollItem(SongEvent e, float futureTick)
    {
        Vector3[] keyWidth = PianoDescriptor.getPianoDescriptor().getKeyWidth(e.KeyID, false);
        float     girth    = .5f * (keyWidth[0] - keyWidth[1]).magnitude;
        float     duration = Note.GetDuration(e.NoteType);
        float     length   = PIXELPERBEAT * duration;

        float center  = e.EndPoint - Timing.CurrentMeasure - (duration / 2f);
        float z_depth = center * PIXELPERBEAT;

        Vector3 midpoint = ((keyWidth[0] + keyWidth[1]) / 2f);
        float   x_center = midpoint.x;
        float   y_center = midpoint.y;

        GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);

        cube.GetComponent <MeshRenderer>().sharedMaterial = PianoRollMatRef;
        cube.name = "rolling" + e.KeyID.ToString().PadLeft('0');
        cube.tag  = "PianoRoll";

        PianoRoll r = cube.AddComponent <PianoRoll>();

        r.e          = e;
        r.endPoint   = e.EndPoint;
        r.duration   = duration;
        r.startPoint = e.StartPoint;

        cube.transform.parent        = pianoRollContainer.transform;
        cube.transform.localPosition = new Vector3(x_center, y_center, z_depth);
        cube.transform.localScale    = new Vector3(girth, 0.01f, length);
        cube.transform.rotation      = GameObject.Find("MainApp").gameObject.transform.rotation;
    }
    // Use this for initialization
    void Start()
    {
        p = PianoDescriptor.getPianoDescriptor();
        GameObject leftAnchor  = GameObject.Find("leftAnchor");
        GameObject rightAnchor = GameObject.Find("rightAnchor");

        print(rightAnchor);
        stage = GameObject.Find("MainApp");
        pianoRollContainer = GameObject.Find("PianoRollContainer");

        start = stage.transform.InverseTransformPoint(leftAnchor.transform.position); //start and end are relative to stage after all.
        end   = stage.transform.InverseTransformPoint(rightAnchor.transform.position);
        print(start);
        print(end);

        p.setUpPiano(start, end);

        //Vector3 length = end - start;
        //Vector3 lengthCentered = length * ((float)p.NumKeys / (p.NumKeys - 1));
        //print(lengthCentered);
        //length = start + lengthCentered;
        ////try to extend from start to end, but not reach end.
        //Vector3 halflength = (end - length) / (float)2.0;


        //end = halflength + length;
        //start = start + halflength;
        //print(end);
        //print(start);

        for (int i = 0; i < keyIsHighlighted.Length; i++)
        {
            keyIsHighlighted[i] = false;
        }
    }
 /// <summary>
 /// Static function return a Piano Descriptor singleton.
 /// </summary>
 /// <returns></returns>
 public static PianoDescriptor getPianoDescriptor()
 {
     if (descriptor == null)
     {
         descriptor = new PianoDescriptor();
     }
     return(descriptor);
 }