Class MultiGenLookupTables

java.lang.Object
processing.core.PApplet
net.paulhertz.pixelaudio.example.MultiGenLookupTables
All Implemented Interfaces:
processing.core.PConstants

public class MultiGenLookupTables extends processing.core.PApplet
Extends the LookupTables example to show how LUTs function in a MultiGen. A lookup table connects a 1D audio signal with a 2D bitmap, putting audio samples and RGB pixels in one-to-one correspondence. This sketch shows how a lookup table functions for MultiGens, which consist of multiple PixelMapGens.

Because they are in one-to-one correspondence, the audio signal and image pixel arrays have the same number of entries. Imagine the audio signal as path that visits every pixel in a bitmap: the signal's lookup table for pixels is a list of the array indices of the pixels it visits, in the order it visits them. In PixelAudio documentation we refer to this path as the "signal path" over the image. By convention, pixel array coordinates start at (0,0) in the upper left corner of a bitmap, and proceed in "row major" order, left to right, top to bottom. We could call this the "image path" over the image. Unlike the signal path, the image path pixel order is fixed. The image has a corresponding lookup table, where the array indices of the audio signal are stored in the order of the pixel coordinates. The signal and bitmap lookup tables are inverses of each other, so that the signal can be mapped to the bitmap and the bitmap can be mapped to the signal. PixelAudio classes that implement the abstract PixelMapGen class just have to provide the coordinates of the signal path, then PixelMapGen will generate the lookup tables for the signal and the image. The coordinates may be generated by mathematical functions, but they only need to be calculated once.

This example also shows basic affine transforms of PixelMapGen objects, such as rotation and reflection, how to change the PixelMapGen a PixelAudioMapper instance is using, and basic animation using array rotation.

Signal path index numbers are small white numbers, bitmap index numbers are big black numbers. Read the imageToSignalLUT values by following the pixel index order and reading the white numbers. Read the signalToImageLUT values by following the signal path order and reading the black numbers. Read the imageToSignalLUT values by following the black pixel numbers in order and reading the white numbers.

This example can be a good place to test your own MultiGen creation methods.

 KEY COMMANDS
 
 Press 'a' or 'A' to rotate the array of colors one step left or right.
 Press 'g' to display a different generator.
 Press 'n' to hide or show numbers.
 Press 'l' to hide or show lines.
 Press 'd' to print a description of the current generator to the console.
 Press 'k' to print the imageToSignalLUT and the signalToImageLUT to the console.
 Press 't' to print affine maps to the console.
 Press 'r' to rotate 180 degress.
 Press 'x' to flip x-coordinates (reflect on y-axis).
 Press 'y' to flip y-coordinates (reflect on x-axis).
 Press 'h' to show this help text in the console.
 
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    (package private) int
     
    (package private) ArrayList<int[]>
     
    (package private) int
     
    (package private) AffineTransformType
     
    (package private) int
     
     
     
     
     
    (package private) PixelMapGen
     
    (package private) int
     
    (package private) int
     
    (package private) PixelMapGen
     
    (package private) int
     
    (package private) int[]
     
    (package private) int
     
    (package private) boolean
     
    (package private) boolean
     
    (package private) boolean
     
    (package private) boolean
     
    (package private) boolean
     
    (package private) PixelAudioMapper
     
    (package private) int
     
    (package private) int
     
    (package private) PixelMapGen
     
     
    (package private) processing.core.PGraphics
     
    (package private) int
     
    (package private) PixelAudio
     
     
     
     
    (package private) PixelMapGen
     
    (package private) int
     
    (package private) int
     
    (package private) int
     
    (package private) int
     
    (package private) int[]
     
    (package private) int
     
    (package private) int[]
     
    (package private) float
     
    (package private) PixelMapGen
     

    Fields inherited from class processing.core.PApplet

    args, ARGS_BGCOLOR, ARGS_DISABLE_AWT, ARGS_DISPLAY, ARGS_EDITOR_LOCATION, ARGS_EXTERNAL, ARGS_FULL_SCREEN, ARGS_HIDE_STOP, ARGS_LOCATION, ARGS_PRESENT, ARGS_SKETCH_FOLDER, ARGS_STOP_COLOR, ARGS_UI_SCALE, ARGS_WINDOW_COLOR, DEFAULT_HEIGHT, DEFAULT_WIDTH, disableAWT, displayHeight, displayWidth, dmouseX, dmouseY, emouseX, emouseY, exitCalled, EXTERNAL_MOVE, EXTERNAL_STOP, finished, firstMouse, focused, frameCount, frameRate, frameRateLastNanos, g, height, insideDraw, javaPlatform, javaVersion, javaVersionName, key, keyCode, keyEvent, keyPressed, keyRepeatEnabled, looping, matchPatterns, mouseButton, mouseEvent, mousePressed, mouseX, mouseY, pixelDensity, pixelHeight, pixels, pixelWidth, platform, pmouseX, pmouseY, ratioLeft, ratioScale, ratioTop, recorder, redraw, rheight, rmouseX, rmouseY, rwidth, surface, useNativeSelect, width, windowX, windowY

    Fields inherited from interface processing.core.PConstants

    ADD, ALPHA, ALT, AMBIENT, ARC, ARGB, ARROW, BACKSPACE, BASELINE, BEVEL, BEZIER_VERTEX, BLEND, BLUR, BOTTOM, BOX, BREAK, BURN, CENTER, CHATTER, CHORD, CLAMP, CLOSE, CODED, COMPLAINT, CONTROL, CORNER, CORNERS, CROSS, CURVE_VERTEX, CUSTOM, DARKEST, DEG_TO_RAD, DELETE, DIAMETER, DIFFERENCE, DILATE, DIRECTIONAL, DISABLE_ASYNC_SAVEFRAME, DISABLE_BUFFER_READING, DISABLE_DEPTH_MASK, DISABLE_DEPTH_SORT, DISABLE_DEPTH_TEST, DISABLE_KEY_REPEAT, DISABLE_NATIVE_FONTS, DISABLE_OPENGL_ERRORS, DISABLE_OPTIMIZED_STROKE, DISABLE_STROKE_PERSPECTIVE, DISABLE_STROKE_PURE, DISABLE_TEXTURE_MIPMAPS, DODGE, DOWN, DXF, ELLIPSE, ENABLE_ASYNC_SAVEFRAME, ENABLE_BUFFER_READING, ENABLE_DEPTH_MASK, ENABLE_DEPTH_SORT, ENABLE_DEPTH_TEST, ENABLE_KEY_REPEAT, ENABLE_NATIVE_FONTS, ENABLE_OPENGL_ERRORS, ENABLE_OPTIMIZED_STROKE, ENABLE_STROKE_PERSPECTIVE, ENABLE_STROKE_PURE, ENABLE_TEXTURE_MIPMAPS, ENTER, EPSILON, ERODE, ESC, EXCLUSION, FX2D, GIF, GRAY, GROUP, HALF_PI, HAND, HARD_LIGHT, HINT_COUNT, HSB, IMAGE, INVERT, JAVA2D, JPEG, LANDSCAPE, LEFT, LIGHTEST, LINE, LINE_LOOP, LINE_STRIP, LINES, LINUX, MACOS, MACOSX, MAX_FLOAT, MAX_INT, MIN_FLOAT, MIN_INT, MITER, MODEL, MODELVIEW, MOVE, MULTIPLY, NORMAL, OPAQUE, OPEN, OPENGL, ORTHOGRAPHIC, OTHER, OVERLAY, P2D, P3D, PATH, PDF, PERSPECTIVE, PI, PIE, platformNames, POINT, POINTS, POLYGON, PORTRAIT, POSTERIZE, PROBLEM, PROJECT, PROJECTION, QUAD, QUAD_BEZIER_VERTEX, QUAD_STRIP, QUADRATIC_VERTEX, QUADS, QUARTER_PI, RAD_TO_DEG, RADIUS, RECT, REPEAT, REPLACE, RETURN, RGB, RIGHT, ROUND, SCREEN, SHAPE, SHIFT, SOFT_LIGHT, SPAN, SPHERE, SPOT, SQUARE, SUBTRACT, SVG, TAB, TARGA, TAU, TEXT, THIRD_PI, THRESHOLD, TIFF, TOP, TRIANGLE, TRIANGLE_FAN, TRIANGLE_STRIP, TRIANGLES, TWO_PI, UP, VERTEX, WAIT, WHITESPACE, WINDOWS, X, Y, Z
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
     
    void
    Draw the signal path lines.
    void
    Draw the numbers for image path and signal path.
    void
    Draw background squares.
    int[]
    getColors(int size)
    Creates an array of colors in rainbow (spectrum) order.
    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.
    void
     
    void
     
    void
     
    (package private) void
    Get a list of available displays and output information about them to the console.
    void
    Load a new PixelMapGen
    static void
    main(String[] args)
     
    void
    Print the LUTs and gen coordinates to the console.
    void
    Toggles display window size between initial dimensions and fit to screen dimensions.
    void
     
    void
    setScaling(boolean isVerbose)
    Calculates window sizes for displaying mapImage at actual size and at full screen.
    void
     
    void
     
    void
     
    void
    stepAnimation(int step)
     
    void
     
    void
     

    Methods inherited from class processing.core.PApplet

    abs, abs, acos, alpha, ambient, ambient, ambient, ambientLight, ambientLight, append, append, append, append, append, append, applyMatrix, applyMatrix, applyMatrix, applyMatrix, applyMatrix, arc, arc, arraycopy, arraycopy, arraycopy, arrayCopy, arrayCopy, arrayCopy, asin, atan, atan2, attrib, attrib, attrib, attribColor, attribNormal, attribPosition, background, background, background, background, background, background, background, beginCamera, beginContour, beginPGL, beginRaw, beginRaw, beginRecord, beginRecord, beginShape, beginShape, bezier, bezier, bezierDetail, bezierPoint, bezierTangent, bezierVertex, bezierVertex, binary, binary, binary, binary, blend, blend, blendColor, blendMode, blue, box, box, brightness, calcSketchPath, camera, camera, ceil, checkAlpha, checkExtension, choice, choice, circle, clear, clip, color, color, color, color, color, color, color, color, colorMode, colorMode, colorMode, colorMode, concat, concat, concat, concat, concat, concat, concat, constrain, constrain, copy, copy, copy, cos, createFont, createFont, createFont, createGraphics, createGraphics, createGraphics, createImage, createInput, createInput, createInputRaw, createOutput, createOutput, createPath, createPath, createPrimaryGraphics, createReader, createReader, createReader, createShape, createShape, createShape, createWriter, createWriter, createWriter, cursor, cursor, cursor, cursor, curve, curve, curveDetail, curvePoint, curveTangent, curveTightness, curveVertex, curveVertex, dataFile, dataPath, day, debug, degrees, delay, dequeueEvents, desktopFile, desktopPath, die, die, directionalLight, displayDensity, displayDensity, dispose, dist, dist, edge, ellipse, ellipseMode, emissive, emissive, emissive, endCamera, endContour, endPGL, endRaw, endRecord, endShape, endShape, exec, exec, exit, exitActual, exitCalled, exp, expand, expand, expand, expand, expand, expand, expand, expand, expand, expand, expand, expand, expand, expand, expand, expand, expand, expand, fill, fill, fill, fill, fill, fill, filter, filter, filter, floor, flush, focusGained, focusLost, frameMoved, frameRate, frustum, fullScreen, fullScreen, fullScreen, fullScreen, get, get, get, getExtension, getGraphics, getMatrix, getMatrix, getMatrix, getSurface, green, handleDraw, handleKeyEvent, handleMethods, handleMouseEvent, hex, hex, hex, hex, hideMenuBar, hint, hour, hue, image, image, image, imageMode, initSurface, insertFrame, isLooping, join, join, keyPressed, keyReleased, keyReleased, keyTyped, keyTyped, launch, lerp, lerpColor, lerpColor, lightFalloff, lights, lightSpecular, line, line, link, listFiles, listFiles, listPaths, loadBytes, loadBytes, loadBytes, loadFont, loadImage, loadImage, loadJSONArray, loadJSONArray, loadJSONObject, loadJSONObject, loadPixels, loadShader, loadShader, loadShape, loadShape, loadStrings, loadStrings, loadStrings, loadStrings, loadTable, loadTable, loadXML, loadXML, log, loop, mag, mag, main, main, main, makeGraphics, map, mask, match, matchAll, max, max, max, max, max, max, method, millis, min, min, min, min, min, min, minute, modelX, modelY, modelZ, month, mouseClicked, mouseClicked, mouseDragged, mouseDragged, mouseEntered, mouseEntered, mouseExited, mouseExited, mouseMoved, mouseMoved, mousePressed, mousePressed, mouseReleased, mouseReleased, mouseWheel, mouseWheel, nf, nf, nf, nf, nf, nf, nfc, nfc, nfc, nfc, nfp, nfp, nfp, nfp, nfs, nfs, nfs, nfs, noClip, noCursor, noFill, noise, noise, noise, noiseDetail, noiseDetail, noiseSeed, noLights, noLoop, norm, normal, noSmooth, noStroke, noTexture, noTint, orientation, ortho, ortho, ortho, parseBoolean, parseBoolean, parseBoolean, parseBoolean, parseByte, parseByte, parseByte, parseByte, parseByte, parseByte, parseByte, parseByte, parseChar, parseChar, parseChar, parseChar, parseFloat, parseFloat, parseFloat, parseFloat, parseFloat, parseFloat, parseFloat, parseInt, parseInt, parseInt, parseInt, parseInt, parseInt, parseInt, parseInt, parseInt, parseInt, parseInt, parseInt, parseJSONArray, parseJSONObject, parseXML, parseXML, pause, perspective, perspective, pixelDensity, point, point, pointLight, pop, popMatrix, popStyle, postEvent, postWindowMoved, postWindowResized, pow, print, print, print, print, print, print, print, print, print, printArray, printCamera, println, println, println, println, println, println, println, println, println, println, println, printMatrix, printProjection, printStackTrace, push, pushMatrix, pushStyle, quad, quadraticVertex, quadraticVertex, radians, random, random, randomGaussian, randomSeed, rect, rect, rect, rectMode, red, redraw, registerMethod, requestImage, requestImage, resetMatrix, resetShader, resetShader, resume, reverse, reverse, reverse, reverse, reverse, reverse, reverse, rotate, rotate, rotateX, rotateY, rotateZ, round, runSketch, runSketch, runSketch, saturation, save, saveBytes, saveBytes, saveBytes, saveFile, saveFrame, saveFrame, saveJSONArray, saveJSONArray, saveJSONObject, saveJSONObject, savePath, saveStream, saveStream, saveStream, saveStream, saveStream, saveStrings, saveStrings, saveStrings, saveTable, saveTable, saveXML, saveXML, scale, scale, scale, screenX, screenX, screenY, screenY, screenZ, second, selectCallback, selectFolder, selectFolder, selectFolder, selectInput, selectInput, selectInput, selectOutput, selectOutput, selectOutput, set, set, setMatrix, setMatrix, setMatrix, setSize, shader, shader, shape, shape, shape, shapeMode, shearX, shearY, shell, shininess, shorten, shorten, shorten, shorten, shorten, shorten, shorten, showDepthWarning, showDepthWarningXYZ, showMethodWarning, showMissingWarning, showSurface, showVariationWarning, sin, size, size, size, sketchDisplay, sketchFile, sketchFullScreen, sketchHeight, sketchOutputPath, sketchOutputStream, sketchPath, sketchPath, sketchPixelDensity, sketchRenderer, sketchSmooth, sketchWidth, sketchWindowColor, smooth, smooth, sort, sort, sort, sort, sort, sort, sort, sort, sort, sort, specular, specular, specular, sphere, sphereDetail, sphereDetail, splice, splice, splice, splice, splice, splice, splice, splice, splice, splice, splice, splice, splice, split, split, splitTokens, splitTokens, spotLight, sq, sqrt, square, start, startSurface, stop, str, str, str, str, str, str, str, str, str, str, stroke, stroke, stroke, stroke, stroke, stroke, strokeCap, strokeJoin, strokeWeight, style, subset, subset, subset, subset, subset, subset, subset, subset, subset, subset, subset, subset, subset, subset, subset, subset, subset, subset, tan, text, text, text, text, text, text, text, text, text, text, text, textAlign, textAlign, textAscent, textDescent, textFont, textFont, textLeading, textMode, textSize, texture, textureMode, textureWrap, textWidth, textWidth, textWidth, thread, tint, tint, tint, tint, tint, tint, translate, translate, triangle, trim, trim, unbinary, unhex, unregisterMethod, updatePixels, updatePixels, urlDecode, urlEncode, vertex, vertex, vertex, vertex, vertex, windowMove, windowMoved, windowRatio, windowResizable, windowResize, windowResized, windowTitle, year

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • pixelaudio

      PixelAudio pixelaudio
    • hilb6x4Loop

      PixelMapGen hilb6x4Loop
    • mixGen

      PixelMapGen mixGen
    • zz6x4Loop

      PixelMapGen zz6x4Loop
    • randoBou

      PixelMapGen randoBou
    • gen

    • mapper

    • spectrum

      int[] spectrum
    • coords

      ArrayList<int[]> coords
    • imageLUT

      int[] imageLUT
    • signalLUT

      int[] signalLUT
    • imageWidth

      int imageWidth
    • imageHeight

      int imageHeight
    • genW

      int genW
    • genH

      int genH
    • drawingScale

      int drawingScale
    • offset

      int offset
    • bigTextSize

      int bigTextSize
    • smallTextSize

      int smallTextSize
    • coordsSize

      int coordsSize
    • isHideNumbers

      boolean isHideNumbers
    • isHideLines

      boolean isHideLines
    • offscreen

      processing.core.PGraphics offscreen
    • r270

      public static AffineTransformType r270
    • r90

      public static AffineTransformType r90
    • r180

      public static AffineTransformType r180
    • flipx

      public static AffineTransformType flipx
    • fx270

      public static AffineTransformType fx270
    • fx90

      public static AffineTransformType fx90
    • flipy

      public static AffineTransformType flipy
    • nada

      public static AffineTransformType nada
    • currentTransform

      AffineTransformType currentTransform
    • isOversize

      boolean isOversize
    • isFitToScreen

      boolean isFitToScreen
    • maxWindowWidth

      int maxWindowWidth
    • maxWindowHeight

      int maxWindowHeight
    • scaledWindowWidth

      int scaledWindowWidth
    • scaledWindowHeight

      int scaledWindowHeight
    • windowScale

      float windowScale
    • isSecondScreen

      boolean isSecondScreen
    • screen2x

      int screen2x
    • screen2y

      int screen2y
  • Constructor Details

    • MultiGenLookupTables

      public MultiGenLookupTables()
  • Method Details

    • main

      public static void main(String[] args)
    • settings

      public void settings()
      Overrides:
      settings in class processing.core.PApplet
    • setup

      public void setup()
      Overrides:
      setup in class processing.core.PApplet
    • setDrawingVars

      public void setDrawingVars()
    • hilbertZigzagLoop6x4

      public 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. This method shows one approach to mixing different PixelMapGens in a MultiGen. We use "gen" as an abbreviated name for a PixelMapGen.
      Parameters:
      genW -
      genH -
      Returns:
    • initGens

      public void initGens()
    • initMapper

      public void initMapper(PixelMapGen gen)
    • updateMapper

      public void updateMapper(PixelMapGen gen)
    • updateWindow

      public void updateWindow()
    • draw

      public void draw()
      Overrides:
      draw in class processing.core.PApplet
    • keyPressed

      public void keyPressed()
      Overrides:
      keyPressed in class processing.core.PApplet
    • loadNewGen

      public void loadNewGen(PixelMapGen newGen)
      Load a new PixelMapGen
    • getColors

      public int[] getColors(int size)
      Creates an array of colors in rainbow (spectrum) order.
      Parameters:
      size - size of the desired array
      Returns:
      an array of colors in rainbow (spectrum) order
    • printLUTs

      public void printLUTs()
      Print the LUTs and gen coordinates to the console.
    • drawSquares

      public void drawSquares()
      Draw background squares.
    • drawLines

      public void drawLines()
      Draw the signal path lines.
    • drawNumbers

      public void drawNumbers()
      Draw the numbers for image path and signal path.
    • stepAnimation

      public void stepAnimation(int step)
    • showHelp

      public void showHelp()
    • listDisplays

      void listDisplays()
      Get a list of available displays and output information about them to the console. Sets screen2x, screen2y, displayWidth and displayHeight from dimensions of a second display.
    • setScaling

      public void setScaling(boolean isVerbose)
      Calculates window sizes for displaying mapImage at actual size and at full screen. Press the 'r' key to resize the display window. This method will result in display on a second screen, if one is available. If mapImage is smaller than the screen, mapImage is displayed at size on startup and resizing zooms the image. If mapImage is bigger than the display, mapImage is fit to the screen on startup and resizing shows it at full size, partially filling the window.
      Parameters:
      isVerbose - if true, post comments to the console
    • resizeWindow

      public void resizeWindow()
      Toggles display window size between initial dimensions and fit to screen dimensions.