cannam@95: /* Copyright Chris Cannam - All Rights Reserved */ cannam@95: cannam@95: package com.breakfastquay.rubberband; cannam@95: cannam@95: public class RubberBandStretcher cannam@95: { cannam@95: public RubberBandStretcher(int sampleRate, int channels, cannam@95: int options, cannam@95: double initialTimeRatio, cannam@95: double initialPitchScale) { cannam@95: handle = 0; cannam@95: initialise(sampleRate, channels, options, cannam@95: initialTimeRatio, initialPitchScale); cannam@95: } cannam@95: cannam@95: public native void dispose(); cannam@95: cannam@95: public native void reset(); cannam@95: cannam@95: public native void setTimeRatio(double ratio); cannam@95: public native void setPitchScale(double scale); cannam@95: cannam@95: public native int getChannelCount(); cannam@95: public native double getTimeRatio(); cannam@95: public native double getPitchScale(); cannam@95: cannam@95: public native int getLatency(); cannam@95: cannam@95: public native void setTransientsOption(int options); cannam@95: public native void setDetectorOption(int options); cannam@95: public native void setPhaseOption(int options); cannam@95: public native void setFormantOption(int options); cannam@95: public native void setPitchOption(int options); cannam@95: cannam@95: public native void setExpectedInputDuration(long samples); cannam@95: public native void setMaxProcessSize(int samples); cannam@95: cannam@95: public native int getSamplesRequired(); cannam@95: cannam@95: //!!! todo: setKeyFrameMap cannam@95: cannam@95: public native void study(float[][] input, int offset, int n, boolean finalBlock); cannam@95: public void study(float[][] input, boolean finalBlock) { cannam@95: study(input, 0, input[0].length, finalBlock); cannam@95: } cannam@95: cannam@95: public native void process(float[][] input, int offset, int n, boolean finalBlock); cannam@95: public void process(float[][] input, boolean finalBlock) { cannam@95: process(input, 0, input[0].length, finalBlock); cannam@95: } cannam@95: cannam@95: public native int available(); cannam@95: cannam@95: public native int retrieve(float[][] output, int offset, int n); cannam@95: public int retrieve(float[][] output) { cannam@95: return retrieve(output, 0, output[0].length); cannam@95: } cannam@95: cannam@95: private native void initialise(int sampleRate, int channels, int options, cannam@95: double initialTimeRatio, cannam@95: double initialPitchScale); cannam@95: private long handle; cannam@95: cannam@95: public static final int OptionProcessOffline = 0x00000000; cannam@95: public static final int OptionProcessRealTime = 0x00000001; cannam@95: cannam@95: public static final int OptionStretchElastic = 0x00000000; cannam@95: public static final int OptionStretchPrecise = 0x00000010; cannam@95: cannam@95: public static final int OptionTransientsCrisp = 0x00000000; cannam@95: public static final int OptionTransientsMixed = 0x00000100; cannam@95: public static final int OptionTransientsSmooth = 0x00000200; cannam@95: cannam@95: public static final int OptionDetectorCompound = 0x00000000; cannam@95: public static final int OptionDetectorPercussive = 0x00000400; cannam@95: public static final int OptionDetectorSoft = 0x00000800; cannam@95: cannam@95: public static final int OptionPhaseLaminar = 0x00000000; cannam@95: public static final int OptionPhaseIndependent = 0x00002000; cannam@95: cannam@95: public static final int OptionThreadingAuto = 0x00000000; cannam@95: public static final int OptionThreadingNever = 0x00010000; cannam@95: public static final int OptionThreadingAlways = 0x00020000; cannam@95: cannam@95: public static final int OptionWindowStandard = 0x00000000; cannam@95: public static final int OptionWindowShort = 0x00100000; cannam@95: public static final int OptionWindowLong = 0x00200000; cannam@95: cannam@95: public static final int OptionSmoothingOff = 0x00000000; cannam@95: public static final int OptionSmoothingOn = 0x00800000; cannam@95: cannam@95: public static final int OptionFormantShifted = 0x00000000; cannam@95: public static final int OptionFormantPreserved = 0x01000000; cannam@95: cannam@95: public static final int OptionPitchHighSpeed = 0x00000000; cannam@95: public static final int OptionPitchHighQuality = 0x02000000; cannam@95: public static final int OptionPitchHighConsistency = 0x04000000; cannam@95: cannam@95: public static final int OptionChannelsApart = 0x00000000; cannam@95: public static final int OptionChannelsTogether = 0x10000000; cannam@95: cannam@95: public static final int DefaultOptions = 0x00000000; cannam@95: public static final int PercussiveOptions = 0x00102000; cannam@95: cannam@95: static { cannam@95: System.loadLibrary("rubberband"); cannam@95: } cannam@95: }; cannam@95: