The Dynamic error detection is implemented in the general checking function:
BEGIN
if (previous note should have been accentuated)
Error_next = played_velocity < next_velocity + accent_threshold
Error_previous = played_velocity < previous_velocity + accent_threshold
if (first note)
error = error_next
else if (last note)
error = error_previous
else
error = error_next && error_previous
endif
if (error)
error = Type ACCENT
else
if (played_velocity > expected_velocity + threshold)
Error = type TOO LOUD
else if(played_velocity < expected_velocity - threshold)
Error = type TOO SOFT
endif
endif
END