private static final int MIC_FETCH_SIZE = 480; // 0.12 seconds
This is far too small a buffer size for reliable
performance. At 16 bit mono, it represents just 240 sound samples. Make
it something more like 16000 samples, or:
private static final int MIC_FETCH_SIZE = 32000; // 2 seconds of
Note: Java Sound will not guarantee that amount is
read, and will instead return the number of bytes that are
actually read. The point is, to allow the opportunity to read
up to 2 seconds of data (if it is available).
I think this should solve most of the problems described above.