@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); }