Class Argosy

java.lang.Object
net.paulhertz.pixelaudio.Argosy

public class Argosy extends Object
Author:
Paul Hertz

Argosy provides tools for shifting pixel patterns along the signal path of an image. One way to generate the pixel patterns is with the Lindenmayer class. The patterns are generated by arrays of numbers ("argosy patterns") and arrays of colors, with a gap in between each repeated pattern. The patterns could also be interpreted as rhythmic values in music, and the colors as timbre or instrumentation. Both music and visual patterns can be generated by a Lindenmayer pattern or "L-system."

The Argosy class create pixel patterns ordered by the signal path of a PixelAudioMapper. Argosy patterns consist of an array of numbers (argosyArray), an array of colors (argosyColors), a gap between patterns (unitSize * argosyGapScale) and a color for the gap (argosyGapColor). Each number in the pattern array determines the length of a run of pixels in a color specified by the color array. The Argosy pattern maker steps through the pattern, scaling it by unitSize, and assigns it the current color in the argosyColors, which it also steps through. The arrays do not have to be the same size.

TODO implement pixel offset TODO interpolating version of Argosy patterns, with floating point pattern values TODO dynamic functional version of patterns and other parameters TODO perhaps filling should permit one less gap than repetitions of pattern -- the first and last pattern will abut more precisely, we should provide conditions for partial filling (but not in version 1).

  • Field Details

    • mapper

      PixelAudioMapper that provides values for several variables and maps bigArray to bitmaps or audio signals
    • argosyArray

      int[] argosyArray
      Array of color values used for animation by rotating the array left or right
    • argosyUnitSize

      int argosyUnitSize
      the number of pixels in an argosy unit
    • argosyStep

      int argosyStep
      number of pixels in a shiftLeft animation Step
    • animStepDivisor

      float animStepDivisor
      subunit divisor for animStep
    • bgColor

      int bgColor
      background color, fills the argosy array before colors are added
    • argosyColors

      int[] argosyColors
      default colors for argosy units
    • argosyGapScale

      float argosyGapScale
      scaling for number of units in gap between argosies
    • argosyGap

      int argosyGap
      number of pixels in the gap between argosy patterns
    • argosyGapColor

      int argosyGapColor
      color of pixels in the gap
    • argosyReps

      int argosyReps
      how many times to repeat the pattern, 0 to fill array
    • maxReps

      int maxReps
      maximum number of repetitions, used internally
    • argosyMargin

      int argosyMargin
      margin on either side of the argosy patterns
    • argosyPattern

      int[] argosyPattern
      current pattern to fill bigArray
    • argosySize

      int argosySize
      sum of values in argosy pattern
    • isCentered

      boolean isCentered
      center the argosy patterns in the big array
    • argosyIntervals

      int[] argosyIntervals
      array of number of pixels in each element of the expanded argosy pattern
    • argosyPixelShift

      int argosyPixelShift
      the number of pixels the array has shifted from its initial state
    • isCountShift

      boolean isCountShift
      do we count the shift or not?
    • argosyShiftStep

      int argosyShiftStep
      count the number of unit shifts
    • argosyOffset

      int argosyOffset
      pixel count by which to shift the argosy pixels at initialization
    • argosy55

      public static final int[] argosy55
  • Constructor Details

    • Argosy

      public Argosy(PixelAudioMapper mapper, int unitSize, int reps, boolean isCentered)
      Parameters:
      mapper - PixelAudioMapper
      unitSize - size of a unit of the argosy
      reps - number of repetitions of the argosy pattern, pass in 0 for maximum that fit
      isCentered - true if argosy array should be centered in bigArray
    • Argosy

      public Argosy(PixelAudioMapper mapper, int unitSize, int reps, boolean isCentered, int[] colors, int gapColor, float gapScale, int[] pattern)
      Parameters:
      mapper - PixelAudioMapper
      unitSize - size of a unit of the argosy
      reps - number of repetitions of the argosy pattern, pass in 0 for maximum that fit
      isCentered - true if argosy array should be centered in bigArray
      colors - an array of colors for the argosy patterns
      gapColor - a color for the spaces between argosy patterns
      gapScale - scaling for number of units in gap between argosies
      pattern - a pattern of numbers, will be copied to argosyPattern
    • Argosy

      public Argosy(PixelAudioMapper mapper, int[] pattern, int unitSize, int reps, boolean isCentered, int[] colors, int gap, int gapColor, int animStep)
      Parameters:
      mapper - PixelAudioMapper
      pattern - a pattern of numbers, will be copied to argosyPattern
      unitSize - size of a unit of the argosy
      reps - number of repetitions of the argosy pattern, pass in 0 for maximum that fit
      isCentered - true if argosy array should be centered in bigArray
      colors - an array of colors for the argosy patterns
      gap - number of pixels in gap between pattern repeats (argosyGapScale * argosyUnitSize)
      gapColor - a color for the spaces between argosy patterns
      animStep - number of pixels on each animation step, when calling shiftLeft() or shiftRight()
  • Method Details

    • initArgosy

      public void initArgosy()
      Sets up the argosy array and fills it with colors using the argosy pattern.
    • argosyFill

      public void argosyFill()
      Fills argosyArray with colors from argosyColors following the argosy pattern stored in argosyIntervals. Tbis method is generally called from initArgosy(), which fills argosyArray with the bgColor pixels.
    • rotateLeft

      public void rotateLeft(int d)
      Rotates bigArray left by d values. Uses efficient "Three Rotation" algorithm.
      Parameters:
      d - number of elements to shift
    • reverseArray

      private void reverseArray(int[] arr, int l, int r)
      Reverses an arbitrary subset of an array.
      Parameters:
      arr - array to modify
      l - left bound of subset to reverse
      r - right bound of subset to reverse
    • shiftRight

      public void shiftRight()
      basic animation, rotate right by animStep pixels, decrement the step counter argosyShiftStep
    • shiftLeft

      public void shiftLeft()
      basic animation, rotate left by animStep pixels, increment the step counter argosyShiftStep
    • getArgosyPixelShift

      public int getArgosyPixelShift()
      Returns:
      the argosyPixelShift, save this if you want to reshift
    • setArgosyPixelShift

      public void setArgosyPixelShift(int newShift)
    • zeroArgosyPixelShift

      public void zeroArgosyPixelShift()
    • shift

      public void shift(int pixelShift, boolean isCounted)
      Shifts left by a specified number of pixels, summing them to argosyPixelShift if isCounted is true. This is the most flexible animation method with animation steps set externally. The other methods, shiftLeft() and shiftRight(), use this.animStep to determine pixel shift.
      Parameters:
      pixelShift -
      isCounted -
    • getArgosyArray

      public int[] getArgosyArray()
      Returns:
      argosyArray, not a copy
    • getArgosyArrayCopy

      public int[] getArgosyArrayCopy()
      Returns:
      a copy of argosyArray
    • setArgosyArray

      public void setArgosyArray(int[] newArgosyArray)
      Parameters:
      newArgosyArray - the int[] array to set, must be same length as this.argosyArray.
    • getArgosySignal

      public float[] getArgosySignal()
    • getArgosySignal

      public float[] getArgosySignal(PixelAudioMapper.ChannelNames chan)
    • getArgosySignal

      public float[] getArgosySignal(float scale)
    • getArgosySignal

      public float[] getArgosySignal(PixelAudioMapper.ChannelNames chan, float scale)
    • getArgosySize

      public int getArgosySize()
      Returns:
      argosySize, the number of argsoyUnits in argosyPattern
    • getUnitSize

      public int getUnitSize()
      Returns:
      the unitSize
    • setUnitSize

      public void setUnitSize(int unitSize)
      Sets unitSize and triggers a call to initArgosy() to reset the pattern in argosyArray.
      Parameters:
      unitSize - the new unitSize
    • getArgosyStep

      public int getArgosyStep()
      Returns:
      the animStep, number of pixels to shift in an animation
    • setArgosyStep

      public void setArgosyStep(int argoStep)
      Set the animStep, with no side effects (but animation calls will use the new value)
      Parameters:
      argoStep -
    • getArgosyColors

      public int[] getArgosyColors()
      Returns:
      the array of colors for the argosy pattern elements
    • setArgosyColors

      public void setArgosyColors(int[] argosyColors)
      Sets new argosyColors and triggers a call to initArgosy() to reset the pattern in argosyArray.
      Parameters:
      argosyColors -
    • getArgosyGapScale

      public float getArgosyGapScale()
      Returns:
      the argosyGapScale
    • setArgosyGapScale

      public void setArgosyGapScale(float argosyGapScale)
      Sets argosyGapScale and triggers a call to initArgosy() to reset the pattern in argosyArray.
      Parameters:
      argosyGapScale -
    • getArgosyGap

      public int getArgosyGap()
      Returns:
      the argosyGap, number of pixels between iterations of the argosy pattern
    • setArgosyGap

      public void setArgosyGap(int argosyGap)
      Sets argosyGap and triggers a call to initArgosy() to reset the pattern in argosyArray. Usually it's better to set the argosyGapScale, but if you want a gap that isn't a multiple of unitSize, this is the way to do it.
      Parameters:
      argosyGap -
    • getArgosyGapColor

      public int getArgosyGapColor()
      Returns:
      the argosyGapColor
    • setArgosyGapColor

      public void setArgosyGapColor(int argosyGapColor)
      Sets argosyGapColor and triggers a call to argosyFill() to reset the pattern in bigArray.
      Parameters:
      argosyGapColor -
    • getArgosyReps

      public int getArgosyReps()
      Returns:
      argosyReps, the number of repetitions of the argosy pattern in the array, set by argosyFill().
    • setArgosyReps

      public void setArgosyReps(int newReps)
    • getMapper

      public PixelAudioMapper getMapper()
      Returns:
      the PixelAudioMapper associated with this Argosy
    • getArgosyMargin

      public int getArgosyMargin()
      Returns:
      argosyMargin, the left and right margin to argosy patterns in the array, set by argosyFill().
    • getArgosyOffset

      public int getArgosyOffset()
    • setArgosyOffset

      public void setArgosyOffset(int argosyOffset)
    • getMaxReps

      public int getMaxReps()
    • getArgosyPattern

      public int[] getArgosyPattern()
      Returns:
      the argosyPattern, an array with a numeric pattern.
    • setArgosyPattern

      public void setArgosyPattern(int[] pattern)
      Sets a new argosy pattern and triggers a call to argosyFill() to reset the pattern in bigArray.
      Parameters:
      pattern -
    • setNewColors

      public void setNewColors(int[] argosyColors, int argosyGapColor)
      Sets new argosy colors and argosy gap color, triggers a call to argosyFill().
      Parameters:
      argosyColors -
      argosyGapColor -
    • getAnimStepDivisor

      public float getAnimStepDivisor()
    • setAnimStepDivisor

      public void setAnimStepDivisor(float animStepDivisor)
    • getBgColor

      public int getBgColor()
    • setBgColor

      public void setBgColor(int bgColor)
    • fibo

      public static ArrayList<String> fibo(int depth, boolean verbose)
      An L-System generator for Fibonacci trees represented as a sequence of 0s and 1s. There are two generation rules: 0 -> 1; 1 -> 01. The initial state is 0.
      Parameters:
      depth - depth of iteration of the L-System. A depth of 8 gets you an ArrayList with 34 elements.
      verbose - Keep me informed. Or not.
      Returns:
      an ArrayList of String values "1" and "0".
    • fibonacciPattern

      public static int[] fibonacciPattern(int depth, int v1, int v2, boolean verbose)
      Generates an argosy pattern based on a Fibonacci tree. Depth 8 gets you a 34 element sequence, and so Fibonacci forth. For example: int[] testPattern = argosyGen(8, 5, 8, true);
      Parameters:
      depth - depth of iteration of the L-System. A depth of 8 gets you an array with 34 elements.
      v1 - value to substitute for a "0" in the ArrayList returned by fibo()
      v2 - value to substitute for a "1" in the ArrayList return by fibo()
      verbose - if true, tells the console what's up
      Returns:
      an array of ints determined by a Fibonacci tree generator and your inputs v1 and v2