@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;
  }
 @Override
 public StreamHeader init(StreamHeader inHeader) {
   if (!(inHeader instanceof RawAudioHeader)) throw new RuntimeException("Wrong header type");
   firstPeakImpulseFound = false;
   rawAudioHeader = (RawAudioHeader) inHeader;
   feature = new FeatureStreamModule();
   feature.init(inHeader);
   return rawAudioHeader;
 }
 @Override
 public void close() {
   feature.close();
 }
 private void augmentedAudio(String fname) throws Exception {
   feature.augmentedAudio(fname);
   // feature.rafs.setHeader(rawAudioHeader);
 }