Class PAGranularInstrument

java.lang.Object
net.paulhertz.pixelaudio.granular.PAGranularInstrument

public class PAGranularInstrument extends Object
PAGranularInstrument High-level granular instrument wrapper. Mirrors PASamplerInstrument but uses: PAGranularSampler → PAGranularVoice → PASource. Provides: - Global pan - Global gain scaling - Default ADSR envelope - Looping option for granular paths - Thread-safe play() methods Does NOT manage MultiChannelBuffer. PASource encapsulates its data. Now also exposes helpers to schedule playback at sample-accurate times via the underlying PAGranularSampler.
  • Field Details

    • sampler

      private final PAGranularSampler sampler
    • out

      private final ddf.minim.AudioOutput out
    • defaultEnv

      private ADSRParams defaultEnv
    • globalPan

      private float globalPan
    • globalGain

      private float globalGain
    • isClosed

      private boolean isClosed
  • Constructor Details

    • PAGranularInstrument

      public PAGranularInstrument(ddf.minim.AudioOutput out, ADSRParams defaultEnv, int maxVoices)
    • PAGranularInstrument

      public PAGranularInstrument(ddf.minim.AudioOutput out)
  • Method Details

    • play

      public long play(PASource src, float amp, float pan, ADSRParams env, boolean looping)
      Main granular play() method.
      Parameters:
      src - PASource (BasicIndexGranularSource, PathGranularSource, ...)
      amp - amplitude
      pan - stereo pan (-1..+1)
      env - envelope (or null → default)
      looping - loop the grain path
      Returns:
      voiceId or -1
    • play

      public long play(PASource src, float amp, float pan)
      Convenience: uses default envelope, no looping.
    • play

      public long play(PASource src, float amp)
      Convenience: default pan, default envelope.
    • play

      public long play(PASource src)
      Convenience: default env and global pan.
    • playLooping

      public long playLooping(PASource src, float amp, float pan)
      Convenience: looping version.
    • startAtSampleTime

      public void startAtSampleTime(PASource src, float amp, float pan, ADSRParams env, boolean looping, long startSample)
      Schedule playback of a PASource at an absolute sample time.
      Parameters:
      src - PASource
      amp - amplitude
      pan - stereo pan
      env - envelope (or null → default)
      looping - loop flag
      startSample - absolute sample index at which to start
    • startAtSampleTime

      public void startAtSampleTime(PASource src, float amp, float pan, ADSRParams env, boolean looping, long startSample, ddf.minim.analysis.WindowFunction grainWindow, int grainLenSamples)
      Schedule playback of a PASource at an absolute sample time. Called by PAGranularInstrumentDirector
      Parameters:
      src - PASource
      amp - amplitude
      pan - stereo pan
      env - envelope (or null → default)
      looping - loop flag
      startSample - absolute sample index at which to start
      grainWindow - a WindowFunction
      grainLenSamples - number of samples in one grain
    • startAfterDelaySamples

      public void startAfterDelaySamples(PASource src, float amp, float pan, ADSRParams env, boolean looping, long delaySamples)
      Schedule playback after a delay in samples relative to "now".
      Parameters:
      src - PASource
      amp - amplitude
      pan - stereo pan
      env - envelope (or null → default)
      looping - loop flag
      delaySamples - how many samples from "now"
    • startNow

      public void startNow(PASource src, float amp, float pan, ADSRParams env, boolean looping)
      Convenience: schedule using current instrument cursor as "now".
      Parameters:
      src - PASource
      amp - amplitude
      pan - pan
      env - envelope (or null → default)
      looping - loop flag
    • stopAll

      public void stopAll()
    • setDefaultEnvelope

      public void setDefaultEnvelope(ADSRParams env)
    • getDefaultEnvelope

      public ADSRParams getDefaultEnvelope()
    • setGlobalPan

      public void setGlobalPan(float pan)
    • getGlobalPan

      public float getGlobalPan()
    • setGlobalGain

      public void setGlobalGain(float g)
    • getGlobalGain

      public float getGlobalGain()
    • getSampleRate

      public float getSampleRate()
    • getSampler

      public PAGranularSampler getSampler()
    • getSampleCursor

      public long getSampleCursor()
    • close

      public void close()
    • clampPan

      private static float clampPan(float p)