Giter Club home page Giter Club logo

valis's Introduction

VALIS

Build Status

MAX/MSP/PD-alike modular audio programming environment for the browser.

In progress - this isn't useful to a general audience yet.

Demos

Only tested on Chrome 47 on OS X, YMMV with other browsers and platforms ..

Generative Sine Waves (plays sound on entering the page)

Monosynth with MIDI Input (connect a keyboard before loading the page, then play some notes)

Empty workspace

Current Features

  • Drag/drop modular programming similar to PD / MAX, with similar minimalist component philosophy
  • (very) minimal set of builtins presently
  • Write new modules using ES2015, react, and hot reloading
  • JS oriented duck typing between modules

Stack

  • HTML Web Audio API - just the minimum boilerplate of one ScriptProcessorNode so the application can output audio. All audio processing is done in pure JS.
  • ECMAScript 2015 using babel.js.
  • react.js frontend.
  • Karma tests (you do need a real browser to perform web audio based tests).

TODOs

Bugs

  • The new connection drawing stuff can't handle it when the window is scrolled
  • Resizing of text boxes doesn't stick, and entering arguments is crappy in general
  • Never tested on anything but Chrome on OS X

Features

  • Ability to delete nodes
  • Ability to change buffer size
  • Subpatches
  • Hot reloading while editing module code
  • Some way of sharing extension vobjects between authors
  • Bit less primitive save/loading - persist patches to disk via BrowserFS or similar, and be able to load from URL
  • Some sort of compatibility with Pure Data patches
  • Investigate transpiling Pure Data modules using emscripten and duct tape?
  • Keyboard shortcuts

Codebase / refactors

Still some dated stuff around as the project was setup in the JS stone-age (2014).

  • grunt seems to be slow / not actually a real build tool by design - build speeds vary wildly as it does massive amounts of unnecessary I/O for a few dumb reasons. How is anyone actually using this for transpiled projets? gulp? scons?? GNU make???
  • Migrate to webpack/browserify, currently runtime dependencies are being managed manually by copying into www/js/lib
  • There's no optimized build at moment as the r.js deployment broke and it needs to be migrated to something else anyway.
  • Move CSS to LESS
  • Move away from AMD / require.js to ES2015 modules.
  • DRY up creation of new vobjects a little bit.
  • Do less rendering in react when anything changes - maybe adopt something like flux?
  • Try implementing some of the vobjects using co-routines (generators)

Documentation

  • Everything, there isn't any

Optimizations

Currently hardly any optimization has been done, the code focuses on simplicity and ease of implementation of modules. But here's the hitlist that should at least be done for the framework and core modules:

  • Try moving audio rendering to a web worker to avoid dropouts during GUI operation.
  • More copying of buffer data using copyWithin rather than just naively doing the copies in JS. One would expect the browser can directly use SIMD etc to blaze it. This only really helps straight copy situations like in the DAC, delay, not sure it's all that big a deal?
  • simd.js once Chrome supports it.
  • Culling the audio processing graph for things that aren't connected. This is tricky because nodes could have other side-effects - maybe some sort of opt-in flag?
  • Fixed buffer allocation - currently we just new() when we need them. Not sure if this is necessarily all that helpful. Maybe the browser's heap works well if the allocations are following a repeated pattern as we do when processing audio.
  • Some on-the-fly calcs could be stored for later rather than being repeated at each generate().
  • Some sort of profiling harness specific to VALIS would be great.

valis's People

Contributors

novocaine avatar

Stargazers

jdickman avatar Joel Kirchartz avatar Lim Hoang avatar

Watchers

 avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.