public int processAudio(AudioBuffer ab) { int dstBuffSize = ab.getSampleCount(); int NN; FIRFilter ff; // grab filter and NN synchronized (lock) { ff = filt; NN = N; } if (chunk == null || overBuffSize != dstBuffSize * NN) { overBuffSize = dstBuffSize * NN; chunk = new AudioBuffer("oversampled", 1, overBuffSize, ab.getSampleRate() * NN); } chunk.makeSilence(); src.processAudio(chunk); ff.processAudio(chunk); float upa[] = chunk.getChannel(0); for (int chn = 0; chn < ab.getChannelCount(); chn++) { float a[] = ab.getChannel(chn); for (int i = 0; i < dstBuffSize; i++) { a[i] = upa[NN * i]; } } return AUDIO_OK; }