Package net.paulhertz.pixelaudio.example

# Class BigWaveSynth

java.lang.Object
processing.core.PApplet
net.paulhertz.pixelaudio.example.BigWaveSynth

All Implemented Interfaces:
  `processing.core.PConstants`

public class BigWaveSynth extends processing.core.PApplet
BigWaveSynth shows how you can load a WaveSynth into the pixel array of a MultiGen. MultiGen is child class of PixelMapGen that allows you to use multiple PixelMapGens to cover a single image with a single signal path through them. This example also allows you to load JSON files in this example's data folder to reconfigure the WaveSynth. Initially, we call initWaveDataList() to create a WaveData array with two operators.

     Press ' ' to turn animation on or off.
     Press 'g' to step through PixelMapGen instances hilb3x2Gen, bGen, and zGen.
     Press 'o' to open a JSON file that defines a WaveSynth .
     Press 'O' to reopen JSON file, if one is already open, or open a new JSON file.
     Press 'j' or 'J' to save WaveSynth data to a JSON file.
     Press 'f' to print the frameRate to the console.
     Press 'r' to animation step to 0.
     Press 'v' or 'V' to toggle video recording.
     Press 'h' to show help and key commands.

See WaveSynthEditor for the complete set of WaveSynth parameters you can edit in a GUI, load and save to files, and output as video.
See also: BigWaveSynthAudio, WaveSynthSequencer.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `(package private) int`
  `animSteps`
  `(package private) int`
  `animStop`
  `(package private) BoustropheGen`
  `bGen`
  `(package private) int`
  `columns`
  `(package private) String`
  `comments`
  `(package private) File`
  `currentDataFile`
  `(package private) String`
  `currentFileName`
  `(package private) PixelMapGen`
  `gen`
  `(package private) int`
  `genHeight`
  `(package private) int`
  `genWidth`
  `(package private) MultiGen`
  `hilb3x2Gen`
  `(package private) boolean`
  `isAnimating`
  `(package private) boolean`
  `isLooping`
  `(package private) boolean`
  `isRecordingVideo`
  `(package private) processing.data.JSONObject`
  `json`
  `(package private) String`
  `jsonFolder`
  `(package private) PixelAudioMapper`
  `mapper`
  `(package private) float`
  `myGamma`
  `(package private) boolean`
  `oldIsAnimating`
  `(package private) PixelAudio`
  `pixelaudio`
  `(package private) int`
  `rows`
  `(package private) int`
  `step`
  `(package private) processing.core.PImage`
  `synthImage`
  `(package private) String`
  `videoFilename`
  `(package private) com.hamoid.VideoExport`
  `videx`
  `(package private) WaveSynth`
  `wavesynth`
  `(package private) ArrayList<WaveData>`
  `wdList`
  `(package private) DiagonalZigzagGen`
  `zGen`

  ### 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
  `BigWaveSynth()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `draw()`
  `void`
  `fileSelectedOpen(File selection)`
  `void`
  `fileSelectedWrite(File selection)`
  `MultiGen`
  `hilbertLoop3x2(int genW, int genH)`
  Generates a looping fractal signal path consisting of 6 HilbertGens, arranged 3 wide and 2 tall, to fit a 3 * genW by 2 * genH image.
  `ArrayList<WaveData>`
  `initWaveDataList()`
  Initializes a list of WaveData for use by a WaveSynth.
  `WaveSynth`
  `initWaveSynth(WaveSynth synth)`
  Sets gain, gamma, isScaleHisto, animSteps, and sampleRate instance variables of a WaveSynth object and generates its first frame of animation.
  `void`
  `keyPressed()`
  `void`
  `loadWaveData()`
  `static void`
  `main(String[] args)`
  `void`
  `printWaveData(WaveSynth synth)`
  Outputs fields from current waveAnimal and it waveDataList
  `void`
  `saveWaveData()`
  `void`
  `settings()`
  `void`
  `setup()`
  `void`
  `setWaveSynthFromJSON(processing.data.JSONObject json, WaveSynth synth)`
  `void`
  `showHelp()`
  `void`
  `stepAnimation()`
  `void`
  `swapGen(PixelMapGen gen)`
  Sets a new PixelMapGen for a PixelAudioMapper

  ### 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

  - ### gen

    PixelMapGen gen

  - ### hilb3x2Gen

    MultiGen hilb3x2Gen

  - ### bGen

    BoustropheGen bGen

  - ### zGen

    DiagonalZigzagGen zGen

  - ### rows

    int rows

  - ### columns

    int columns

  - ### genWidth

    int genWidth

  - ### genHeight

    int genHeight

  - ### mapper

    PixelAudioMapper mapper

  - ### wdList

    ArrayList<WaveData> wdList

  - ### wavesynth

    WaveSynth wavesynth

  - ### synthImage

    processing.core.PImage synthImage

  - ### myGamma

    float myGamma

  - ### animSteps

    int animSteps

  - ### animStop

    int animStop

  - ### step

    int step

  - ### comments

    String comments

  - ### jsonFolder

    String jsonFolder

  - ### currentDataFile

    File currentDataFile

  - ### currentFileName

    String currentFileName

  - ### json

    processing.data.JSONObject json

  - ### isAnimating

    boolean isAnimating

  - ### oldIsAnimating

    boolean oldIsAnimating

  - ### isLooping

    boolean isLooping

  - ### isRecordingVideo

    boolean isRecordingVideo

  - ### videx

    com.hamoid.VideoExport videx

  - ### videoFilename

    String videoFilename

- ## Constructor Details

  - ### BigWaveSynth

    public BigWaveSynth()

- ## 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`

  - ### hilbertLoop3x2

    public MultiGen hilbertLoop3x2(int genW, int genH)
    Generates a looping fractal signal path consisting of 6 HilbertGens, arranged 3 wide and 2 tall, to fit a 3 * genW by 2 * genH image. This particular MultiGen configuration is used so extensively in my sample code that I've given it a factory method in the HilbertGen class. It's written out here so you can see how it works. Note that genH must equal genW and both must be powers of 2. For the image size we're using in this example, genW = image width / 3 and genH = image height / 2.
    Parameters:
      `genW` - width of each HilbertGen
      `genH` - height of each HilbertGen
    Returns:
      a 3 x 2 array of Hilbert curves, connected in a loop (3 * genWidth by 2 * genHeight pixels)

  - ### initWaveDataList

    public ArrayList<WaveData> initWaveDataList()
    Initializes a list of WaveData for use by a WaveSynth.
    Returns:
      an ArrayList of WaveData objects

  - ### initWaveSynth

    public WaveSynth initWaveSynth(WaveSynth synth)
    Sets gain, gamma, isScaleHisto, animSteps, and sampleRate instance variables of a WaveSynth object and generates its first frame of animation.
    Parameters:
      `synth` - a WaveSynth object whose attributes will be set
    Returns:
      the WaveSynth object with attributes set

  - ### draw

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

  - ### swapGen

    public void swapGen(PixelMapGen gen)
    Sets a new PixelMapGen for a PixelAudioMapper
    Parameters:
      `gen` -

  - ### keyPressed

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

  - ### showHelp

    public void showHelp()

  - ### stepAnimation

    public void stepAnimation()

  - ### loadWaveData

    public void loadWaveData()

  - ### fileSelectedOpen

    public void fileSelectedOpen(File selection)

  - ### setWaveSynthFromJSON

    public void setWaveSynthFromJSON(processing.data.JSONObject json, WaveSynth synth)

  - ### printWaveData

    public void printWaveData(WaveSynth synth)
    Outputs fields from current waveAnimal and it waveDataList

  - ### saveWaveData

    public void saveWaveData()

  - ### fileSelectedWrite

    public void fileSelectedWrite(File selection)