@neilcsmith-net neilcsmith-net released this May 14, 2018

Assets 6

A major focus for v4 is relicensing the Praxis CORE runtime as LGPL. There will be better support for building standalone projects from the IDE. And there will also be a focus on the use of Praxis CORE as a general purpose Java runtime / library in other fields that can benefit from distributed real-time coding / hot code reloading.

Of course, Praxis LIVE's primary use for interactive / live creative coding hasn't been neglected in this release! There are a range of new features, a revised patching UI and a big push to remove legacy code and add features to allow remaining legacy components to be re-codeable.

In development of this release, the project has been restructured and much legacy code removed. Projects from v3 that were not making use of deprecated features or components should still work, although you may see warnings / errors on first build. File an issue if you have difficulties.

Windows and macOS downloads now include OpenJDK 8. This is currently Azul's Zulu build.

Changes

Praxis LIVE IDE

  • Core
    • New start page with modular sections.
      • Option to download and install examples as project templates, with update check.
      • Option to download and install custom components into the palette, with update check.
      • Check for GStreamer libraries and download link.
    • Tweaked UI (this is the first major Praxis LIVE version not to change look and feel!) with added space between elements. The default font size has been increased (14pt) - this can be changed by running Praxis LIVE with eg. --fontsize 12, either from the command line or by editing the configuration file.
    • Semantic version checking. Update checking is now based on semantic versioning. Version is written into project files and custom components, and a warning issued if running on a lower version. CLI usage outputs version - full version validation for distributed hubs coming.
    • New root wizard changed with fewer options and different templates for audio (output added automatically) and video (OpenGL, always on top, output added). User defined templates to follow.
    • Fake properties for input port controls (see CORE change) - easily send eg. note to synth from property tab / component editor.
    • Default user directory updated to .praxislive4 (CORE now has a different default user directory - .praxiscore4)
  • Graph editor
    • New graph UI with colour-coded types and bezier connections, and responsive to font size.

Praxis CORE runtime

  • Core
    • Praxis CORE is relicensed under the LGPL.
    • Embedded runtime compiler removed - the runtime no longer includes a fork of the Java compiler and relies on the compiler provided by the JDK (a JDK is now a runtime requirement, but will be included in the Windows and Mac bundles)
    • Code templating revised - built-in components are now pre-compiled (easier development and testing; faster project builds) but still re-codeable - source templates are built using an annotation processor.
    • Input ports now also have a control - eg. you can now send messages to an input port from MIDI, OSC, another patch or the IDE directly.
    • New timing API introduced, which will eventually allow hubs to run from alternative clock sources (eg. soundcard).
    • Use of setup() in non-video components has been deprecated in favour of init() - this is for consistency to avoid the confusion with setup() being called later in video components (also see video improvements)
    • The Argument type has been replaced by Value and it or any subtype can now be used for input methods and property fields. Optional<> may also be used for types that do not have a default empty representation (eg. Optional<ControlAddress>)
    • Default imports for custom components have been updated to include java.util.stream.* and java.util.function.*, as well as org.praxislive.core.* - some types that were deprecated due to name clashes (eg. @Port) have been removed.
    • All code has been refactored under org.praxislive, and various classes and modules restructured (eg. to separate legacy components and Swing dependencies) - this should only be a breaking change for projects if you have imported internal types into your custom components.
    • FIX - projects without additional libraries created in v3.4+ should run correctly with the command line player / standalone.
  • Audio
    • New audio:looper component for live sampling.
    • New Looper UGen based on Player with multi-channel record capability.
    • New Phasor UGen - similar to sawtooth LFO but with controllable min / max values.
    • The simple atan-based overdrive UGen has been rewritten not to use GPL code. It might sound a little different.
  • Video
    • video:composite and video:x-fader are now completely rewritten and re-codeable.
    • New API to add render and alpha queries to video input ports (required for above, but usable elsewhere)
    • GStreamer support completely rewritten. video:player and video:capture are now fully re-codeable. The video player has additional functionality, included an end-of-stream signal and zoom. The capture component now defaults to the automatic video source (confusing for new users).
    • New VideoPlayer and VideoCapture types can be used in video:custom components - see code of above for example usage (making these components copy the Processing Video API and extend PImage was considered but rejected for performance reasons).
    • All video components now also support init() and update() methods. They are called prior to the rendering cycle - you cannot draw anything and input images will not have been updated.
    • Processing and JOGL libraries updated to 3.3.7.
    • GStreamer and JNA libraries updated.
    • FIX default MacOS capture pipeline no longer worked.

@neilcsmith-net neilcsmith-net released this Apr 13, 2018 · 7 commits to develop since this release

Assets 3

This is a release candidate for Praxis LIVE v4.0.0 (see release notes below) - there is no installer -

  • Download and unzip file
  • Run bin/praxis_live (Linux / OSX) or bin/praxis_live64.exe (Windows 64) or bin\praxis_live.exe (Windows 32).

Praxis CORE no longer contains its own fork of the Java compiler. You need a full Java 8 JDK to run with. Java 9 and 10 are not currently supported. The full release installers for Windows and Mac will include OpenJDK. For now, try eg. https://www.azul.com/downloads/zulu/ and make sure to choose the installer for the latest version of Java 8.

Please report any issues at https://github.com/praxis-live/support/issues

@neilcsmith-net neilcsmith-net released this Jan 24, 2018 · 47 commits to master since this release

Assets 6

This release makes preparations for v4 development, introduces much improved support for offscreen surfaces in video pipelines, adds access to underlying Processing images/graphics, and fixes some bugs.

This is the last planned release in the v3.x series - bug fixes will be backported.

Changes

Runtime

  • Core
    • Deprecated @Port and replaced with @Config.Port - former will be removed in v4 because of name collision.
    • Improve feedback if Error thrown (rather than Exception) as can happen with the library support added in v3.4
  • Audio
    • Deprecated Table and replaced with AudioTable - former will be removed in v4 because of name collision.
  • Video
    • Improved support for @OffScreen PGraphics in video:custom. Added support for scaleWidth and scaleHeight properties (1.0 is default and same as output), as well as persistent to control whether the surface can be released after drawing each frame (default true to keep content).
    • Added support for @OffScreen in video:gl:p2d and video:gl:p3d. Adds ability for multi-pass shader FX amongst other things - some additional components using this to follow. NB. the field types are PGraphics2D and PGraphics3D respectively. There is not currently support for 3D graphics in 2D components, or vice versa - this is planned.
    • Added find() method in video:gl:p2d and video:gl:p3d, as well as related PImage and PGraphics2D/3D to get access to underlying Processing types for use with libraries, etc. For example -
    @In(1) PImage in;
    @OffScreen(scaleWidth = 0.5, scaleHeight = 0.5, persistent = false) PGraphics2D scratch;
    ...
    find(processing.core.PGraphics.class).get();
    in.find(processing.core.PImage.class).ifPresent(img -> { // do something with image } );
    scratch.find(processing.core.PGraphics.class).get();
    • Updated Syphon libraries to support use with standard OpenGL Core Profile (no longer required to set renderer to legacy OpenGL 2)
    • FIX major issue introduced in 3.4 where code couldn't be edited / new components couldn't be added if a video root had been restarted.

IDE

  • Core
    • Added an action in the Help menu to open Core JavaDoc in the browser. NB. All codeable components have access to the methods defined in DefaultCodeDelegate. For specific additional functionality see -
      • core:custom : CoreCodeDelegate
      • audio:custom : AudioCodeDelegate
      • video:custom : VideoCodeDelegate
      • video:gl:p2d : P2DCodeDelegate
      • video:gl:p3d : P3DCodeDelegate
      • tinkerforge:custom : TFCodeDelegate
    • Add/remove multiple libraries at a time.
  • Code editor
    • Added code templates to ease creation of annotations - type the shorthand then TAB - use ENTER to move through the different values. eg.
      • ptnd
      @P(...)
      @Type.Number(min = ..., max = ..., def = ...)
      double ...
      • ptnp
      @P(...)
      @Type.Number(min = ..., max = ..., def = ...)
      Property ...

@neilcsmith-net neilcsmith-net released this Dec 21, 2017 · 53 commits to master since this release

Assets 6

This release brings support for adding third-party libraries to projects as well as a range of bug fixes.

Changes

Runtime

  • Core
    • Added support for using additional Java libraries (JAR files) in projects.
    • Added Ref<T> type for managing references to any object across code changes.
    • Added Optional<T> find(Class<T> type) method for searching component lookups for useful objects (eg. PApplet)
    • Added JavaDoc to core user-code API.
    • Added possibility to extend script commands from other modules, added glob wildcard support to file-list PCL script command, and added ls, pwd, cd and add-libs commands.
    • Fix core:routing:delay and possibly other components broken by switch to Value in previous release.
  • Audio
    • Fix loading of 32-bit float audio files.
  • Video
    • Added renderer specific lookup, and merge into video root lookup; added PApplet to lookup when OpenGL renderer in use.
    • Updated JOGL library to version used in Processing 3.3.6 to fix Raspbian rendering issues.
    • Better error protection in case of Exceptions thrown by renderer - video window should no longer be left open and the video patch should still be controllable.
  • TinkerForge
    • Updated TinkerForge library too v2.1.16 for new bricklet support.

IDE

  • Core
    • Added simple UI for managing third-party libraries in project properties.
  • Code editor
    • Added Core JavaDoc to build process. Documentation now shows up in code completion, and Show JavaDoc action (right-click on type/method) now functions.

Additional libraries

To add a *.jar file to a project, open the project properties window (right-click on main project folder). Select files to import - files will be copied into the hidden config folder, and available in the classpath. Libraries can only be removed if the project isn't active.

Ref / find()

Ref<T> is a safe way to manage references across code changes. The reference must be initialized before use. Handlers can be added for onReset() and onDispose() - the former will be called every code change, the latter when the root is stopped or the reference deleted. If the referred object is AutoCloseable it will be closed automatically on disposal.

Use eg.

@Inject Ref<List<String>> strings;

public void setup() {
    strings.init(ArrayList::new);
    strings.apply(l -> {
        if (l.isEmpty()) {
            l.add("A String");
        }
    });
    List<String> lst = strings.get(); // same list across code changes
}

find() can be used to lookup useful classes, such as PApplet.

eg. mixing Ref and find() inside a core:custom (not a video custom component) we can get direct access to the PApplet.

import processing.core.PApplet;

                 
@Inject Ref<PApplet> p5;
    

public void setup() {
    p5.init(() -> find(PApplet.class).orElse(null));
    p5.ifPresent(a -> a.registerMethod("draw", this));
    p5.onReset(a -> a.unregisterMethod("draw", this));
}

public void draw() {
    p5.ifPresent(p -> {
        p.resetMatrix(); 
        p.noStroke();
        p.fill(255,100,0,150);
        p.rect(0,0,p.width,80);
        p.fill(255);
        p.textSize(36);
        p.text("TESTING", 20, 50);
    });
}

@neilcsmith-net neilcsmith-net released this Dec 20, 2017 · 61 commits to develop since this release

Assets 3

Release candidate for Praxis LIVE v3.4.0.

There is no installer -

  • Download and unzip file
  • Run bin/praxis_live (Linux / OSX) or bin/praxis_live64.exe (Windows 64) or bin\praxis_live.exe (Windows 32).

Please report any issues at https://github.com/praxis-live/support/issues

@neilcsmith-net neilcsmith-net released this Oct 13, 2017 · 64 commits to master since this release

Assets 6

This release concentrates on useful new functionality for (live) coding, along with support for OBJ files, keyboard/mouse input, data processing, and bug fixes. Examples showing use of the new functionality will follow soon.

Changes

Runtime

  • Core
    • enum fields are now supported directly as properties.
    • Added whenDone() method to Property.Animator. Takes account of any overrun of time. Use insetup() like x.animator().whenDone(p -> p.to(random(0,1)).in(5).easeInOut());
    • Added transmit method - acts like a temporary output port and connection. Use sparingly, but useful for live coding. eg. transmit("synth1", "attack", 0.1);
    • Added millis() method.
    • Value is now a general replacement for Argument (using Argument directly is now deprecated).
    • Enhanced d(), i(), etc. methods to extract double, int, etc. from Value and String. Also added equivalent boolean b() and PArray array() methods.
    • Enhanced PArray.get(index) to wrap index value rather than throw exception. Added append, splice, subset and concat support for PArray.
    • New Input field type with Linkable API support - eg. in setup() do things like
      in.valuesAs(Value::toString).filter(s -> s.length() > 4).map(String::toUppercase).link(out::send);
    • Added PBytes methods for serializing and deserializing objects.
    • New DataObject interface (currently implemented by PVector) for efficient read/write of binary data, with suitable supporting methods (streamOf() / forEachIn()) in PBytes.
  • Audio
    • Updated JavaSound output to clamp values - saturate rather than hard distortion in case of clipping.
  • Video
    • Support for OBJ file loading in PShape fields.
    • Added method to create a mutable clone of a PShape - eg. to switch off styling of a shape loaded from a file, etc.
    • Access to mouse and keyboard fields in P2D and P3D. Event methods are not yet supported (not easy!), but full support for event processing is coming in a later release.
    • Option to show cursor added to video:output, rather useful for the above (currently must restart video window - possible Windows issue)
    • Added support for colorMode() in P2D / P3D to allow for HSB colours.
    • Added support for hint() in P3D - currently only supports disabling depth testing.

IDE

  • Core
    • Added actions (triggers) as buttons in the property table so they now show in the property tab (input controls to follow).
  • Code editor
    • The property tab now shows properties of the underlying component when editing code.
    • Added new flash-on-save support - quick flash of colour behind all changed lines when saving. Switch off in View menu.
    • Switched to NetBeans multiview editor - enables support for dividing the code editor in two.

@neilcsmith-net neilcsmith-net released this Aug 18, 2017 · 78 commits to master since this release

Assets 6

This release includes updates for Processing, NetBeans and TinkerForge; enhanced keyboard controls and actions in the graph editor; various minor code improvements; and, a range of bug fixes.

Changes

All changes made in v3.2.0

Runtime

  • Core
    • new Linkable API - lightweight reactive-streams like API; support added in Property and Trigger (see below).
    • component lifecycle improvements - setup() should always be called before other user code (except in video components - to follow)
  • Video
    • Updated Processing library to v3.3.5 - various OpenGL improvements, particularly on the Pi.
    • Fix aspect ratio when using rotated output and OpenGL renderer.
    • Stop using Processing icon for OpenGL window.
  • TinkerForge
    • Update TinkerForge library to v2.1.14

IDE

  • Core
    • Update NetBeans Platform to v8.2
  • Graph editor
    • Keyboard actions for adding components, selecting components, calling properties/actions, and making/breaking connections (see below)
    • Experimental auto-layout action on ALT-SHIFT-F
    • Use arrow keys to move selected components.
    • Changed TAB behaviour to select and focus when less than two components selected, otherwise cycle focus between selected components.
    • Make sure component positions are always synced before saving.

Linkables

The Linkable API is a different way of responding to actions (triggers) and property changes, based on a simplified form of reactive streams. There is a Linkable<T>, plus primitive versions Linkable.Int and Linkable.Double. All currently support filter() and map().

Use eg.

@T(1) Trigger beat;
@P(1) Property level;
@Out(1) Output note;
@Out(2) Output gain;

void setup() {
  beat.maxIndex(16);
  beat.on().filter(i -> i % 4 == 0).link(i -> note.send(randomOf("a3", "d3", "e3"));
  level.values().map(d -> d * d * d * d).link(gain::send);
}

Graph Actions

The graph keyboard actions support adding components, selecting components, calling properties/actions, and making/breaking connections. Actions appear in a bar at the bottom of the graph window, and are triggered by keys based on the syntax of the Praxis Command Language used in the terminal and in project files. Fields have an auto-complete list (trigger by typing or down-arrow), and most support glob syntax for multiple selection. TAB between fields, use RETURN to action, or ESCAPE to close the action.

  • @ - Add a new component. Suggest field of components from palette. Components currently appear in the same location - use arrow keys or new layout action to move.
  • / - Select component(s). Single text field with suggestions and glob support (eg. use * to select all).
  • . - Call action / change property. Selected component will be pre-filled but can be changed. Control field lists available controls. For properties, value field will show current value. Component field supports glob syntax, so same control on multiple components can be changed in one action.
  • ~ - Connect component ports. Fields are source component, source component output, destination component, and destination component input. All fields support glob syntax for making multiple connections in one action. Multiple ports are cycled - eg. out* and in* will connect out-1 to in-1 and out-2 to in-2.
  • ! - Disconnect component ports. Fields as above. Destination is pre-filled with *.

@neilcsmith-net neilcsmith-net released this Apr 30, 2017 · 101 commits to master since this release

Assets 6

This release adds support for sharing OpenGL images via Syphon/Spout, OpenGLES rendering for the Raspberry Pi, PFont & text rendering, and PShape & SVG support.

Changes

All changes made in v3.1.0

Runtime

  • Video
    • Added support for OpenGLES2 for accelerated rendering on the Raspberry Pi, etc.
    • Added OpenGL profiles. It is now possible to select a specific OpenGL profile when selecting the OpenGL renderer. Supported profiles areGL2, GL3, GL4 and GLES2. The default is GL3 on desktop with automatic fallback to GLES2.
    • Added support for texture sharing via Syphon (OSX) and Spout (Windows) using the new video:gl:send and video:gl:receive components. Syphon support currently requires selection of the legacy GL2 profile above.
    • Added support for PFont resource properties, fixed text rendering alpha channel issues in video:gl:p2d/p3d, and added TextRender SurfaceOp.
    • Added support for PShape SVG loading and createShape() for caching geometry.
    • Updated GStreamer-Java bindings fixing loop issue on Windows.
    • Fixed video:player ignoring no-loop setting.
    • Updated Processing library to v3.2.3

IDE

  • Graph editor
    • Open containers on double-click.

@neilcsmith-net neilcsmith-net released this Apr 23, 2017 · 108 commits to develop since this release

Assets 3

Test release of Praxis LIVE v3.1.0 with OpenGL profiles, Syphon/Spout support, PShape / SVG support, and text rendering / PFont support.

RC2 fixes some bugs in OpenGL texture uploading, and improves GLES support on the Raspberry Pi.

There is no installer -

  • Download and unzip file
  • Run bin/praxis_live (Linux / OSX) or bin/praxis_live64.exe (Windows 64) or bin\praxis_live.exe (Windows 32).

Please report any issues at https://github.com/praxis-live/support/issues

@neilcsmith-net neilcsmith-net released this Apr 21, 2017 · 109 commits to develop since this release

Assets 3

Test release of Praxis LIVE v3.1.0 with OpenGL profiles, Syphon/Spout support, PShape / SVG support, and text rendering / PFont support.

There is no installer -

  • Download and unzip file
  • Run bin/praxis_live (Linux / OSX) or bin/praxis_live64.exe (Windows 64) or bin\praxis_live.exe (Windows 32).

Please report any issues at https://github.com/praxis-live/support/issues