private double getLevel(Hand hand) {
    	FingerList figs = null;
    	
        // if we get here, there is no level hand in the frame
        if (hand == null || (figs = hand.fingers()) == null || figs.isEmpty()){
        	deadLevelFrames++;
        	// if we get here, there is no pitch hand in the frame
        	if (deadLevelFrames <= MAXDEADFRAMES){
        		// play last known pitch

        		return graphicsModel.getVolume();
        	} else {
        		graphicsModel.setVolume(0.0);
            	return 0;
        	}
        }

        deadLevelFrames = 0;
        assert(figs != null);
        
        float Yval = figs.get(0).tipPosition().getY();
        if(Yval > 660) { // this is max leap motion Y sensitivity
        	Yval = 660;
        } else if(Yval < OFFSET) {
        	Yval = (float) (OFFSET + 1);
        }
        printDebug("Y VAL: " + Yval);

        // Volume formula = C * log(height - offset)
        // The formula should pin the height of OFFSET to 0 db
        // Levels beyond 0 are computed logarithmically and scaled with a
        // constant
        double level = 14 * Math.log(Yval - OFFSET);

        // 100 db will be the limit on volume
        if (level > 100.0) {
            level = 100.0;
        }

        // communicate with graphics
        HandData data = new HandData(level, Yval);
        graphicsModel.setLeftHand(data);
        // return value
        return level;
    }