Class MultiGen

java.lang.Object
net.paulhertz.pixelaudio.PixelMapGen
net.paulhertz.pixelaudio.MultiGen

public class MultiGen extends PixelMapGen
A PixelMapGen child class that combines multiple PixelMapGen instances with a single signal path. The signal path is not necessarily continuous over a 4-connected grid, i.e., the bitmap used by a PixelAudioMapper instance initialized with a MultiGen, but it may be.
  • Field Details

  • Constructor Details

    • MultiGen

      public MultiGen(int width, int height, AffineTransformType transform)
      Default constructor, creates two DiagonalZigzagGens.
      Parameters:
      width - total width of the MultiGen in pixels
      height - total height of the MultiGen in pixels
      transform - an AffineTransformType to apply the coordinates of the MultiGen
    • MultiGen

      public MultiGen(int width, int height)
      Calls the default constructor with AffineTransformType.NADA as the third parameter.
      Parameters:
      width - total width of the MultiGen in pixels
      height - total height of the MultiGen in pixels
    • MultiGen

      public MultiGen(int width, int height, int rows, int columns, ArrayList<PixelMapGen> genList)
      Given an ArrayList of PixelMapGens, orders then in rows and columns to create a MultiGen.
      Parameters:
      width - total width of the MultiGen in pixels
      height - total height of the MultiGen in pixels
      rows - number of rows of PixelMapGens
      columns - number of columns of PixelMapGens
      genList - an ArrayList of PixelMapGens, where genList.size() == rows * columns
    • MultiGen

      public MultiGen(int width, int height, ArrayList<int[]> offsetList, ArrayList<PixelMapGen> genList)
      Given an ArrayList of PixelMapGens and an ArrayList of coordinate offsets, arranges the upper left corner of each gen at the corresponding coordinate offset over the width and height of the MultiGen.
      Parameters:
      width - total width of the MultiGen in pixels
      height - total height of the MultiGen in pixels
      offsetList - a list of coordinate pairs, offsets to the upper left corner of each PixelMapGen in genList
      genList - an ArrayList of PixelMapGens, where genList.size() == offsetList.size()
  • Method Details

    • describe

      public String describe()
      Specified by:
      describe in class PixelMapGen
      Returns:
      A String describing the mapping generated by your class and any initialization requirements.
    • validate

      public boolean validate(int width, int height)
      Specified by:
      validate in class PixelMapGen
      Returns:
      true if the width and height parameters are valid for creating a mapping with this generator, otherwise, false.
    • generate

      public int[] generate()
      Initialize this.coords, this.pixelMap, this.sampleMap.
      Specified by:
      generate in class PixelMapGen
      Returns:
      this.pixelMap, the value for PixelAudioMapper.signalToImageLUT.
    • generateCoordinates

      private ArrayList<int[]> generateCoordinates()
      Generically-named method that calls the custom coordinate generation method (here, generateMultiCoordinates). Consider putting additional initializations here, if required by your coordinate generation method, rather than in the generate() method, which will then only handle coords initialization and the built-in pixelMap and sampleMap initializations.
      Returns:
      An ArrayList of int[]: bitmap coordinates in the order the signal mapping would visit them.
    • generateMultiCoordinates

      private ArrayList<int[]> generateMultiCoordinates(int width, int height)
      The coordinate generation method for this class. Both lookup tables are derived from the coordinate list created by this method.
      Parameters:
      width - width of the 2D bitmap pixel array
      height - height of the 2D bitmap pixel array
      Returns:
      an array of coordinate pairs
    • translateCoords

      public ArrayList<int[]> translateCoords(ArrayList<int[]> coordList, int tx, int ty)
    • getRows

      public int getRows()
    • getColumns

      public int getColumns()
    • getGenList

      public ArrayList<PixelMapGen> getGenList()
    • getOffsetList

      public ArrayList<int[]> getOffsetList()
    • hilbertZigzagLoop6x4

      public static MultiGen hilbertZigzagLoop6x4(int genW, int genH)
      This method creates a MultiGen consisting of a mix of zigzag and Hilbert curves in 6 columns and 4 rows arranged to provide a continuous loop. The resulting MultiGen will be 6 * genW wide by 4 * genH high, where genW == genH and genW is a power of 2 (required for Hilbert gens). Shows how to use arrays of gens, coordinate pairs, and affine transforms to create a MultiGen, probably the most useful general strategy.
      Parameters:
      genW - width of each gen, must be a power of 2 and equal to genW
      genH - height of each gen, must be a power of 2 and equal to genW
      Returns: