/* Here is where the algorithm determining * how much to shift each pitch will be. * there are multiple ways we can implement this... * * We can either shift each pitch to the nearest semitone or * shift it in the context of a certain key. The problem with * shifting it to the nearest semitone is that the output would * most likely be atonal, which is not likely to be desirable for * someone needing autotune. If we shift in the context of a * certain key, then we can match it to some predetermined * key inputted by the user or by the first (or first several) notes * of the inputted file. We could determine what semitone to * match to by comparing it to an array of notes (their Hz values) * in that key and finding the closest one. } */ public SampleBuffer getTuned() { PitchShift shifty = new PitchShift(Obuffer.OBUFFERSIZE); // System.out.println("Got here"); // double[] doubleData = ShortAndDouble(data); // System.out.println("Got here"); shifty.setPitchShift(this.pitchToShift); // System.out.println("Got here"); // System.out.println(shifty.gOutFIFO); shifty.smbPitchShift(data, data, 0, length); SampleBuffer rewritten = new SampleBuffer(sample.getSampleFrequency(), sample.getChannelCount()); return rewritten; // shifty.setOversampling(4); // shifty.setSampleRate(sampleRate); // shifty.setFftFrameSize(2048); // shifty./*setAllTheRelevantParametersÉ*/ // shifty.smbPitchShift(/*relevant data from sample and header */); // return (/*relevant data from sample and header now changed */); }