Sorry, that was from your first copy-paste, not your second.
A couple of things here:
1. your array ends up with entries such as “TWENTY ONE” which is actually just re-adding the words “TWENTY” and “ONE” to your array with a slightly higher probability of appearing together. This isn’t what you want here; you want to add “TWENTYONE” if that is really the result you want. You should consider creating this as a grammar instead of a language model:
2. Please search for the keyword “numbers” on these forums to read more about problems in speech recognition with performing speech recognition on lists of numbers.
3. secondsOfSilenceToDetect is much too short and it will cause much more recognition of intermittent noise. .5 is an acceptable small value.
4. If your environment is noisy enough to regularly cause recognition from non-speech noise, raise the vadThreshold higher than 3.0.
Realistically, sometimes speech or noise near the device will cause recognition to occur and with a small vocabulary this will result in your vocabulary words being recognized. Check out Rejecto to reject out-of-vocabulary utterances.