Class PAGranularInstrumentDirector
java.lang.Object
net.paulhertz.pixelaudio.granular.PAGranularInstrumentDirector
The top-level entry point for Granular Synthesis in the PixelAudio library, PAGranularInstrumentDirector
acts as a facade to
PAGranularInstrument, calling PAGranularInstrument.play(...)
with a PABurstGranularSource instance as a PASource and all necessary gesture and timing data.
Calling chain: PAGranularInstrumentDirector -> PAGranularInstrument -> PAGranularSampler -> PAGranularVoice, with
PABurstGranularSource handling the complexities of the granular synthesis sample by sample.
See the scheduleEvents method, below, for details.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate long[]private static final ddf.minim.analysis.WindowFunctionprivate final PAGranularInstrumentprivate GestureGranularParamsprivate GestureScheduleprivate GestureScheduleprivate floatprivate intprivate GestureScheduleprivate final float -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static GestureScheduleapplyTimeTransform(GestureSchedule rawSchedule, GestureGranularParams ggParams) voidvoidprivate static floatclampPan(float p) voidprivate static floateaseInOutPow(float u, float exp) private voidensureCache(GestureSchedule sched, GestureGranularParams params) private static floatlerp(float a, float b, float u) private static longmsToSamples(float ms, float sr) voidplayGestureAtSampleTime(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, int[] startIndices, float[] panValues, long startSampleTime) voidplayGestureAtSampleTime(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, int[] startIndices, long startSampleTime) voidplayGestureAtSampleTime(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, GestureEventParams evtParams, long startSampleTime) voidplayGestureAtSampleTimeTransformed(float[] monoBuf, GestureSchedule transformedSchedule, GestureGranularParams params, GestureEventParams evtParams, long startSampleTime) voidplayGestureNow(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, int[] startIndices) voidplayGestureNow(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, int[] startIndices, float[] panValues) voidplayGestureNow(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, GestureEventParams evtParams) prepareSchedule(GestureSchedule rawSchedule, GestureGranularParams params) voidprivate static GestureScheduleresampleToCount(GestureSchedule in, int targetCount) Placeholder resampler: you likely already have something better.private static ddf.minim.analysis.WindowFunctionprivate static GestureSchedulescaleToDuration(GestureSchedule in, float targetDurationMs) private voidscheduleEvents(float[] monoBuf, GestureSchedule sched, GestureGranularParams params, GestureEventParams evtParams, ddf.minim.analysis.WindowFunction wf, long startSampleTime) private static GestureSchedulewarpScheduleTimesMs(GestureSchedule in, GestureGranularParams.WarpShape shape, float exponent) private static floatwarpU(float u, GestureGranularParams.WarpShape shape, float exponent)
-
Field Details
-
instrument
-
sampleRate
private final float sampleRate -
lastScheduleSize
private int lastScheduleSize -
lastScheduleEndMs
private float lastScheduleEndMs -
cachedEventOffsetsSamples
private long[] cachedEventOffsetsSamples -
lastRawScheduleRef
-
lastOffsetsParamsRef
-
lastTransformedScheduleRef
-
lastOffsetsScheduleRef
-
DEFAULT_GRAIN_WINDOW
private static final ddf.minim.analysis.WindowFunction DEFAULT_GRAIN_WINDOW
-
-
Constructor Details
-
PAGranularInstrumentDirector
-
-
Method Details
-
resolveGrainWindow
-
playGestureNow
public void playGestureNow(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, int[] startIndices) -
playGestureNow
public void playGestureNow(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, int[] startIndices, float[] panValues) -
playGestureNow
public void playGestureNow(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, GestureEventParams evtParams) -
playGestureAtSampleTime
public void playGestureAtSampleTime(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, int[] startIndices, long startSampleTime) -
playGestureAtSampleTime
public void playGestureAtSampleTime(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, int[] startIndices, float[] panValues, long startSampleTime) -
playGestureAtSampleTime
public void playGestureAtSampleTime(float[] monoBuf, GestureSchedule schedule, GestureGranularParams params, GestureEventParams evtParams, long startSampleTime) -
playGestureAtSampleTimeTransformed
public void playGestureAtSampleTimeTransformed(float[] monoBuf, GestureSchedule transformedSchedule, GestureGranularParams params, GestureEventParams evtParams, long startSampleTime) -
scheduleEvents
private void scheduleEvents(float[] monoBuf, GestureSchedule sched, GestureGranularParams params, GestureEventParams evtParams, ddf.minim.analysis.WindowFunction wf, long startSampleTime) - Parameters:
monoBuf- a buffer of floating point values in audio signal range (-1.0 to 1.0)sched-params-evtParams-wf-startSampleTime-
-
ensureCache
-
applyTimeTransform
private static GestureSchedule applyTimeTransform(GestureSchedule rawSchedule, GestureGranularParams ggParams) - Parameters:
rawSchedule-ggParams-- Returns:
-
prepareSchedule
-
msToSamples
private static long msToSamples(float ms, float sr) -
resampleToCount
Placeholder resampler: you likely already have something better. Replace this with your existing GestureScheduleBuilder logic. -
scaleToDuration
-
warpScheduleTimesMs
private static GestureSchedule warpScheduleTimesMs(GestureSchedule in, GestureGranularParams.WarpShape shape, float exponent) -
warpU
-
easeInOutPow
private static float easeInOutPow(float u, float exp) -
lerp
private static float lerp(float a, float b, float u) -
clampPan
private static float clampPan(float p) -
getInstrument
-
clearScheduled
public void clearScheduled() -
releaseAll
public void releaseAll() -
cancelAndStopAll
public void cancelAndStopAll() -
cancelAndReleaseAll
public void cancelAndReleaseAll()
-