@Override public StreamFrame process(StreamFrame inFrame) { if (inFrame == null) return null; if (!(inFrame instanceof RawAudioFrame)) throw new RuntimeException("Wrong frame type"); RawAudioFrame audioFrame = (RawAudioFrame) inFrame; if (!firstPeakImpulseFound) { short[] audioData = audioFrame.audioData.clone(); int peakIndex = -1; ImpulseFrame features = feature.process(inFrame); if (features != null && features.peakMagnitudes.length > 0) { peakIndex = feature.timeToSampleOffset(features.peakOffsets[0]); } if (peakIndex == -1) { audioData = null; } else { firstPeakImpulseFound = true; short[] nAudioData = new short[audioData.length - peakIndex]; // TODO: Use array copy for (int i = 0; i < (audioData.length - peakIndex); i++) nAudioData[i] = audioData[i + peakIndex]; audioData = nAudioData; } audioFrame.audioData = audioData; } return audioFrame; }