/** * Returns the position of the first sample in the original data. The very first sample number is zero. * * @return the position of the first sample in the original data */ public long getFirstSampleNumber() { return data.getFirstSampleNumber(); }
private boolean isAudioStreamContinuous(Data input) { if (input instanceof DoubleData) { DoubleData d = (DoubleData) input; if (lastSampleNum != -1 && lastSampleNum != d.getFirstSampleNumber()) { return false; } lastSampleNum = d.getFirstSampleNumber() + d.getValues().length; } else if (input instanceof DataStartSignal) lastSampleNum = -1; return true; } }
/** * Process data, adding dither * * @param input a frame * @return processed frame * @throws IllegalArgumentException */ private DoubleData process(Data input) throws IllegalArgumentException { DoubleData output; assert input instanceof DoubleData; double[] inFeatures; DoubleData doubleData = (DoubleData) input; inFeatures = doubleData.getValues(); double[] outFeatures = new double[inFeatures.length]; for (int i = 0; i < inFeatures.length; ++i) { outFeatures[i] = r.nextFloat() * 2 * ditherMax - ditherMax + inFeatures[i]; outFeatures[i] = max(min(outFeatures[i], maxValue), minValue); } output = new DoubleData(outFeatures, doubleData.getSampleRate(), doubleData.getFirstSampleNumber()); return output; } }
/** * Converts a given Data-object into a <code>FloatData</code> if possible. * @param data data to convert * @return converted data */ public static FloatData toFloatData(Data data) { FloatData convertData; if (data instanceof FloatData) convertData = (FloatData) data; else if (data instanceof DoubleData) { DoubleData dd = (DoubleData) data; convertData = new FloatData(MatrixUtils.double2float(dd.getValues()), dd.getSampleRate(), dd.getFirstSampleNumber()); } else throw new IllegalArgumentException("data type '" + data.getClass() + "' is not supported"); return convertData; } }
@Test public void testUsualInput() throws DataProcessingException { int sampleRate = 1000; input.add(new DataStartSignal(sampleRate)); input.addAll(createDataInput(600, 120, sampleRate, 0)); input.add(new DataEndSignal(0)); List<Data> output = collectOutput(100); Assert.assertEquals(output.size(), 6); Assert.assertEquals(201, ((DoubleData) output.get(2)).getFirstSampleNumber()); Assert.assertTrue(hasIncreasingOrder(output, 600)); }
/** * Converts FloatData object to DoubleData. * @param data data to convert * @return converted data */ public static FloatData DoubleData2FloatData(DoubleData data) { int numSamples = data.getValues().length; float[] floatData = new float[numSamples]; double[] values = data.getValues(); for (int i = 0; i < values.length; i++) { floatData[i] = (float) values[i]; } return new FloatData(floatData, data.getSampleRate(), data.getFirstSampleNumber()); } }
@Test public void skipLastSamples() throws DataProcessingException { int sampleRate = 1000; input.add(new DataStartSignal(sampleRate)); input.addAll(createDataInput(500, 500, sampleRate, 0)); input.addAll(createDataInput(300, 300, sampleRate, 500)); input.add(new DataEndSignal(0)); List<Data> output = collectOutput(250); Assert.assertEquals(output.size(), 3); Assert.assertEquals(501, ((DoubleData) output.get(2)).getFirstSampleNumber()); Assert.assertTrue(hasIncreasingOrder(output, 750)); }
/** * Process data, creating the mel cepstrum from an input spectrum frame. * * @param input a MelSpectrum frame * @return a mel Cepstrum frame * @throws IllegalArgumentException */ private DoubleData process(DoubleData input) throws IllegalArgumentException { double[] melspectrum = input.getValues(); if (melcosine == null) { numberMelFilters = melspectrum.length; computeMelCosine(); } else if (melspectrum.length != numberMelFilters) { throw new IllegalArgumentException ("MelSpectrum size is incorrect: melspectrum.length == " + melspectrum.length + ", numberMelFilters == " + numberMelFilters); } // first compute the log of the spectrum for (int i = 0; i < melspectrum.length; ++i) { melspectrum[i] = Math.log(melspectrum[i] + LOG_FLOOR); } double[] cepstrum; // create the cepstrum by apply the melcosine filter cepstrum = applyMelCosine(melspectrum); return new DoubleData(cepstrum, input.getSampleRate(), input.getFirstSampleNumber()); }
/** * Computes the next feature. Advances the pointers as well. * * @return the feature Data computed */ @Override protected Data computeNextFeature() { DoubleData currentCepstrum = cepstraBuffer[currentPosition]; float[] feature = new float[(window * 2 + 1) * currentCepstrum.getValues().length]; int j = 0; for (int k = -window; k <= window; k++) { int position = (currentPosition + k + cepstraBufferSize) % cepstraBufferSize; double[] buffer = cepstraBuffer[position].getValues(); for (double val : buffer) { feature[j++] = (float)val; } } currentPosition = (currentPosition + 1) % cepstraBufferSize ; return (new FloatData(feature, currentCepstrum.getSampleRate(), currentCepstrum.getFirstSampleNumber())); } }
/** * Process data, creating the power spectrum from an input audio frame. * * @param input input power spectrum * @return power spectrum * @throws java.lang.IllegalArgumentException */ private DoubleData process(DoubleData input) throws IllegalArgumentException { double[] in = input.getValues(); int windowLength = (in.length - 1) << 1; if (filters == null || sampleRate != input.getSampleRate()) { sampleRate = input.getSampleRate(); buildFilterbank(windowLength, numberFilters, minFreq, maxFreq); } else if (in.length != ((windowLength >> 1) + 1)) { throw new IllegalArgumentException("Window size is incorrect: in.length == " + in.length + ", numberFftPoints == " + ((windowLength >> 1) + 1)); } double[] output = new double[numberFilters]; for (int i = 0; i < numberFilters; i++) output[i] = filters[i].apply(in); DoubleData outputMelSpectrum = new DoubleData(output, sampleRate, input.getFirstSampleNumber()); return outputMelSpectrum; }
long firstSampleNumber = doubleData.getFirstSampleNumber() + numInsertedSamples; long lastSampleNumber = doubleData.getFirstSampleNumber() + doubleData.getValues().length - 1; if (nextInsertionPoint >= doubleData.getFirstSampleNumber() && nextInsertionPoint <= lastSampleNumber) { int insertLength = Math.min(r.nextInt((int) maxRepeatedSamples) + 1, inFeatures.length); int startIndex = (int) (nextInsertionPoint - doubleData.getFirstSampleNumber());
@Override public Data getData() throws DataProcessingException { Data d = getPredecessor().getData(); if (d instanceof DoubleData && convMode.equals(CONVERT_D2F)) { DoubleData dd = (DoubleData) d; d = new FloatData(MatrixUtils.double2float(dd.getValues()), dd.getSampleRate(), dd.getFirstSampleNumber()); } else if (d instanceof FloatData && convMode.equals(CONVERT_F2D)) { FloatData fd = (FloatData) d; d = new DoubleData(MatrixUtils.float2double(fd.getValues()), fd.getSampleRate(), fd.getFirstSampleNumber()); } return d; } }
sampleRate, input.getFirstSampleNumber()); return outputMelSpectrum;
@Test public void testInsertAtBlockEnd() { RandomSampleRepeater rsr = ConfigurationManager.getInstance(RandomSampleRepeater.class); rsr.randStreamStart = true; rsr.useRandSeed = false; rsr.initialize(); rsr.maxRepeatedSamples = 3; rsr.numInsertedSamples = 20; rsr.nextInsertionPoint = 9; // create a dummy DoubleData double[] data = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; DoubleData dd = new DoubleData(data, 16000, 0); DoubleData extData = rsr.process(dd); double[] expectedData = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 10}; Assert.assertEquals(extData.getFirstSampleNumber(), 20, 0); Assert.assertEquals(extData.getValues().length, expectedData.length); for (int i = 0; i < expectedData.length; i++) { Assert.assertEquals(extData.getValues()[i], expectedData[i], 0); } }
@Test public void testInsertAtZero() { RandomSampleRepeater rsr = ConfigurationManager.getInstance(RandomSampleRepeater.class); rsr.randStreamStart = true; rsr.useRandSeed = false; rsr.initialize(); rsr.maxRepeatedSamples = 5; rsr.numInsertedSamples = 20; rsr.nextInsertionPoint = 5; // create a dummy DoubleData double[] data = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; DoubleData dd = new DoubleData(data, 16000, 0); DoubleData extData = rsr.process(dd); double[] expectedData = new double[]{1, 2, 3, 4, 5, 1, 2, 6, 7, 8, 9, 10}; Assert.assertEquals(extData.getFirstSampleNumber(), 20, 0); Assert.assertEquals(extData.getValues().length, expectedData.length); for (int i = 0; i < expectedData.length; i++) { Assert.assertEquals(extData.getValues()[i], expectedData[i], 0); } }
@Test public void testInsertAt4() { RandomSampleRepeater rsr = ConfigurationManager.getInstance(RandomSampleRepeater.class); rsr.randStreamStart = true; rsr.useRandSeed = false; rsr.initialize(); rsr.maxRepeatedSamples = 3; rsr.numInsertedSamples = 20; rsr.nextInsertionPoint = 5; // create a dummy DoubleData double[] data = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; DoubleData dd = new DoubleData(data, 16000, 0); DoubleData extData = rsr.process(dd); double[] expectedData = new double[]{1, 2, 3, 4, 5, 1, 2, 6, 7, 8, 9, 10}; Assert.assertEquals(extData.getFirstSampleNumber(), 20, 0); Assert.assertEquals(extData.getValues().length, expectedData.length); for (int i = 0; i < expectedData.length; i++) { Assert.assertEquals(extData.getValues()[i], expectedData[i], 0); } }
/** * Process data, creating the PLP cepstrum from an input audio frame. * * @param input a PLP Spectrum frame * @return a PLP Data frame * @throws IllegalArgumentException */ private Data process(DoubleData input) throws IllegalArgumentException { double[] plpspectrum = input.getValues(); if (plpspectrum.length != numberPLPFilters) { throw new IllegalArgumentException ("PLPSpectrum size is incorrect: plpspectrum.length == " + plpspectrum.length + ", numberPLPFilters == " + numberPLPFilters); } // power law compress spectrum double[] compressedspectrum = powerLawCompress(plpspectrum); // compute autocorrelation values double[] autocor = applyCosine(compressedspectrum); LinearPredictor LPC = new LinearPredictor(LPCOrder); // Compute LPC Parameters LPC.getARFilter(autocor); // Compute LPC Cepstra double[] cepstrumDouble = LPC.getData(cepstrumSize); DoubleData cepstrum = new DoubleData (cepstrumDouble, input.getSampleRate(), input.getFirstSampleNumber()); return cepstrum; }
currentCepstrum.getFirstSampleNumber()));
currentCepstrum.getFirstSampleNumber()));