/** * Returns the sample rate of the data. * * @return the sample rate of the data */ public int getSampleRate() { return data.getSampleRate(); }
/** * 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; } }
sampleRate != input.getSampleRate()) { numberFftPoints = (in.length - 1) << 1; sampleRate = input.getSampleRate(); buildCriticalBandFilterbank(); buildEqualLoudnessScalingFactors(); (outputPLPSpectralArray, input.getSampleRate(), input.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; }
double[] in = input.getValues(); if (filter == null || sampleRate != input.getSampleRate()) { numberFftPoints = (in.length - 1) << 1; sampleRate = input.getSampleRate(); buildFilterbank(numberFftPoints, numberFilters, minFreq, maxFreq); } else if (in.length != ((numberFftPoints >> 1) + 1)) {
if (data instanceof DoubleData) { sampleRate = ((DoubleData) data).getSampleRate(); double[] values = ((DoubleData) data).getValues();
/** * 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()); } }
/** * 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()); }
@Test public void test8KhzSource() throws DataProcessingException, URISyntaxException { AudioFileDataSource dataSource = ConfigurationManager .getInstance(AudioFileDataSource.class); // Test simple WAV. File file = new File(getClass().getResource("test8k.wav").toURI()); dataSource.setAudioFile(file, null); assertThat(dataSource.getData(), instanceOf(DataStartSignal.class)); Data d = dataSource.getData(); assertThat(dataSource.getData(), instanceOf(DoubleData.class)); assertThat(((DoubleData) d).getSampleRate(), equalTo(8000)); while ((d = dataSource.getData()) instanceof DoubleData); assertThat(d, instanceOf(DataEndSignal.class)); }
/** * 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())); } }
createWindow(data.getSampleRate());
@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; } }
/** * 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; }
assert sampleRate == doubleData.getSampleRate(); DoubleData extendedData = new DoubleData(extFeatures, doubleData.getSampleRate(), firstSampleNumber);
currentCepstrum.getSampleRate(), currentCepstrum.getFirstSampleNumber()));
currentCepstrum.getSampleRate(), currentCepstrum.getFirstSampleNumber()));
(outputSpectrum, input.getSampleRate(), input.getFirstSampleNumber());
feature = new DoubleData (doubleLastFeature.getValues(), doubleLastFeature.getSampleRate(), doubleLastFeature.getFirstSampleNumber());
currentCepstrum.getSampleRate(), currentCepstrum.getFirstSampleNumber()));