The "buzzing sound" and "slower than expected audio" is produced outside this algorithm.
The algorithm processes exactly 882 input samples and produces 160 output samples. So, prior to each call of downSample() you have to fill this.readBuffer with exactly 882 new short values, and after returning from downSample() you have to concatenate the resulting 160 short values to the already processed samples.
The integrated low-pass "filter" is just a simple averaging over 5 or 6 input samples, so you can't get rid of all aliasing, but on the other hand it is not the slowest solution to the downsampling problem.