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 to load a WaveSynth into the pixel array of a MultiGen. MultiGen is a child class of PixelMapGen that allows you to use multiple PixelMapGens to cover a single image with a single signal path through them.
LoadAudioToImage Screen
A WaveSynth pattern loaded from a JSON file, "test182_low.json".

Initially, we call initWaveDataList() to create a WaveData array with two operators for the WaveSynth, but you can open one of the JSON files in the "examples_data/JSON" folder to reconfigure the WaveSynth with a different pattern. The appearance of a WaveSynth image is governed by the PixelMapGen we use and by the internal sampling rate of the WaveSynth. You can change the PixelMapGen we're using with the 'g' key command. You can change the internal sample rate of the WaveSynth with the 'r' key command. The sound the WaveSynth can be determined by the internal sampling rate of the WaveSynth or by the audioOut.sampleRate(). Press the 'p' key to toggle the playback rate flag, playAtAssignedFrequency. When playAtAssignedFrequency is true, changing the internal rate of the WaveSynth will not change the audio frequency. When it's false, the pitch of the audio will change as the sampling rate changes. See the renderSignal() and updatAudioChain(sig) methods for details of how sample rates are used.

 Press (tab) to turn animation on or off.
 Press ' ' (spacebar) to play audio for the point the mouse is currently over
 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 step through different settings of wavesynth.sampleRate.
 Press 'R' to reset WaveSynth sample rate to genWidth * genHeight.
 Press 'i' to reset animation step to 0.
 Press 'p' to toggle playback rate mode.
 Press 'S' to save WaveSynth audio to a WAV file.
 Press 'w' or 'W' to toggle audio buffer wrap around.
 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: SimpleWaveSynth, WaveSynthSequencer.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    (package private) int
     
    (package private) int
     
    (package private) float
     
    (package private) ddf.minim.MultiChannelBuffer
     
    (package private) int
     
    (package private) ddf.minim.AudioOutput
     
    (package private) float[]
     
    (package private) BoustropheGen
     
    (package private) int
     
    (package private) int
     
    (package private) String
     
    (package private) File
     
    (package private) String
     
    (package private) float
     
    (package private) PixelMapGen
     
    (package private) int
     
    (package private) int
     
    (package private) MultiGen
     
    (package private) boolean
     
    (package private) boolean
     
    (package private) boolean
     
    (package private) boolean
     
    (package private) processing.data.JSONObject
     
    (package private) String
     
    (package private) PixelAudioMapper
     
    (package private) float
     
    (package private) ddf.minim.Minim
     
    (package private) float
     
    (package private) int
     
    (package private) boolean
     
    (package private) float
     
    (package private) PixelAudio
     
    (package private) boolean
     
    (package private) PASamplerInstrumentPool
     
    (package private) int
     
    (package private) float
     
    (package private) int
     
    (package private) int
     
    (package private) int
     
    (package private) float
     
    (package private) ADSRParams
     
    (package private) float
     
    (package private) int
     
    (package private) int
     
    (package private) int
     
    (package private) int
     
    (package private) float
     
    (package private) processing.core.PImage
     
    (package private) ArrayList<TimedLocation>
     
    (package private) String
     
    (package private) com.hamoid.VideoExport
     
    (package private) WaveSynth
     
    (package private) ArrayList<WaveData>
     
    (package private) int
     
    (package private) DiagonalZigzagGen
     

    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
    (package private) void
    audioMouseClick(int mx, int my)
    Bottleneck method for triggering an audio event at display/mouse coordinates (mx, my).
    int
     
    (package private) float
     
    void
     
    void
    drawCircle(int x, int y)
     
    (package private) void
     
    void
     
    void
     
    processing.data.JSONObject
     
    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.
    void
     
    Initializes a list of WaveData for use by a WaveSynth.
    Sets gain, gamma, isScaleHisto, animSteps, and sampleRate instance variables of a WaveSynth object and generates its first frame of animation.
    void
     
    void
     
    static void
    main(String[] args)
     
    void
     
    int
    playSample(int samplePos, int samplelen, float amplitude, ADSRParams env, float pitch, float pan)
     
    void
    Outputs current WaveSynth settings and WaveData list.
    void
     
    void
     
    (package private) int
     
    (package private) int
     
    void
    saveAudioToFile(float[] samples, float sampleRate, String fileName)
     
    void
     
    void
     
    (package private) int
     
    (package private) int
     
    void
     
    void
     
    void
    setWaveSynthFromJSON(processing.data.JSONObject json, WaveSynth synth)
     
    void
     
    void
     
    void
    Sets a new PixelMapGen for a PixelAudioMapper
    (package private) void
    updateAudioChain(float[] sig)
     
    (package private) void
    updateAudioChain(float[] sig, float bufferSampleRate)
     

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

    • hilb3x2Gen

      MultiGen hilb3x2Gen
    • bGen

    • zGen

    • rows

      int rows
    • columns

      int columns
    • genWidth

      int genWidth
    • genHeight

      int genHeight
    • mapper

    • wdList

    • wavesynth

      WaveSynth wavesynth
    • synthImage

      processing.core.PImage synthImage
    • myGamma

      float myGamma
    • animSteps

      int animSteps
    • animStop

      int animStop
    • step

      int step
    • comments

      String comments
    • minim

      ddf.minim.Minim minim
    • audioOut

      ddf.minim.AudioOutput audioOut
    • audioBuffer

      ddf.minim.MultiChannelBuffer audioBuffer
    • pool

    • samplerEnv

      ADSRParams samplerEnv
    • sampleRate

      float sampleRate
    • outputGain

      float outputGain
    • samplerGain

      float samplerGain
    • maxAmplitude

      float maxAmplitude
    • attackTime

      float attackTime
    • decayTime

      float decayTime
    • sustainLevel

      float sustainLevel
    • releaseTime

      float releaseTime
    • poolSize

      int poolSize
    • samplerMaxVoices

      int samplerMaxVoices
    • isWrapAround

      boolean isWrapAround
    • noteDuration

      int noteDuration
    • samplelen

      int samplelen
    • audioSignal

      float[] audioSignal
    • audioLength

      int audioLength
    • playAtAssignedFrequency

      boolean playAtAssignedFrequency
    • sampleX

      int sampleX
    • sampleY

      int sampleY
    • samplePos

      int samplePos
    • timeLocsArray

      ArrayList<TimedLocation> timeLocsArray
    • circleColor

      int circleColor
    • wsIndex

      int wsIndex
    • 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()
    • initAudio

      public void initAudio()
    • ensureSamplerReady

      void ensureSamplerReady()
    • currentPlaybackBufferRate

      float currentPlaybackBufferRate()
    • updateAudioChain

      void updateAudioChain(float[] sig, float bufferSampleRate)
    • updateAudioChain

      void updateAudioChain(float[] sig)
    • renderSignal

      public void renderSignal()
    • mouseClicked

      public void mouseClicked()
      Overrides:
      mouseClicked in class processing.core.PApplet
    • audioMouseClick

      void audioMouseClick(int mx, int my)
      Bottleneck method for triggering an audio event at display/mouse coordinates (mx, my).
      Parameters:
      mx -
      my -
    • playSample

      public int playSample(int samplePos, int samplelen, float amplitude, ADSRParams env, float pitch, float pan)
    • calcSampleLen

      public int calcSampleLen()
    • runTimeArray

      public void runTimeArray()
    • drawCircle

      public void drawCircle(int x, int y)
    • screenToSampleX

      int screenToSampleX(int x)
    • screenToSampleY

      int screenToSampleY(int y)
    • sampleToScreenX

      int sampleToScreenX(int x)
    • sampleToScreenY

      int sampleToScreenY(int y)
    • saveToAudio

      public void saveToAudio()
    • saveAudioToFile

      public void saveAudioToFile(float[] samples, float sampleRate, String fileName) throws IOException, UnsupportedAudioFileException
      Throws:
      IOException
      UnsupportedAudioFileException
    • 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 current WaveSynth settings and WaveData list.
    • saveWaveData

      public void saveWaveData()
    • fileSelectedWrite

      public void fileSelectedWrite(File selection)
    • getWaveSynthJSONHeader

      public processing.data.JSONObject getWaveSynthJSONHeader()