Skip to content

Releases: nnirror/facet

v1.7.0

13 Dec 00:35

Choose a tag to compare

  • rewrote parser which allows for simpler FacetPattern declaration syntax
  • rewrote/rebuilt right-sidebar UI for mixing, muting, soloing, stopping commands. based on HTML canvas element now which is faster
  • new .solo() method for dynamically soloing one or more commands with patterns, a sort of meta-modulation
  • many new methods: spectral(), resynthesize(), onepole(), gradient2d()
  • back-end efficiency improvements: no longer writing wav files to tmp; directly passing them to the browser via websockets, using significantly less cpu
  • removed unused packages, removed high severity vulnerability by updating axios package
  • images, MIDI files, and wav files can be saved to any absolute path

1.6.0

09 May 22:30

Choose a tag to compare

  • improved functionality / reliability of stopping a block of commands without stopping all commands
  • added dynamic Q for bpf, lpf, hpf
  • added a build script so the special version of facet that runs inside wax.bz can be automatically generated
  • rewrote vocode() method
  • fixed bug where manual BPM modifications did not cause synthesized audio to change speed correspondingly
  • changed oscillators so they do not fadein/fadeout 30ms in by default - they can be explicitly faded if needed.

v1.5.4

15 Aug 18:11

Choose a tag to compare

Here are the updates in v1.5.4:

  1. The README file now has js code for blocks every method, for improved legibility and copy/pasting.

  2. There were also several bug fixes:

  • note() method's position argument is working as expected
  • stutter() was refactored and simplified to retain pitch of the input pattern
  • dirsamp() was fixed to address a bug where it would never find a sample if the lookup value was == 1.
  1. Oscillator methods no longer have a sampleRate argument, which was probably overkill to include to begin with: cosine(), phasor(), rect(), sine(), circle(), square(), tri()

v1.5.3

09 Aug 16:09

Choose a tag to compare

Facet v1.5.3 number inputs and a new code method for time signature control and metric modulation.

There are two new number inputs in the user interface at the bottom near the BPM control: time signature numerator and time signature denominator.

There is also a new time() method which allows for dynamic control of the time signature with patterns.

More information is in the README.

v1.5.2

04 Aug 13:06

Choose a tag to compare

v1.5.2 focused on improvements to saving and retrieving patterns at three different levels of scale:

  1. Internal patterns accessible during the generation of a FacetPattern, via new methods setlocal() and getlocal().
  2. Global patterns via improved set() method.
  3. Creating and continually modifying patterns each loop in a process, via new drift() method, where the coder can specify the changes to apply to the pattern each loop.

Bug fixes / improvements:

  • improved implementation of walk() method. In its previous implementation, it would tend to converge onto a single value from the pattern if run recursively.

v1.5.1

16 Jul 18:55

Choose a tag to compare

The following changes are in v1.5.1:

  • Fixes a bug introduced in 1.5.0 where panning across channels would not be consistent during BPM changes
  • Adds new dirsamp() method for dynamic sample selection in a directory
  • Adds arguments for controlling whether or not to fade chunks in mutechunks() and rechunk()
  • Fixes a bug in rechunk() where if the pattern's data was not a multiple of chunks, the resulting number of chunks could be incorrect or contain zeros.

v1.5.0

10 Jul 18:09

Choose a tag to compare

  • SoX is no longer used in Facet. Previously SoX was a hard dependency, hence the minor version number increase.
  • Audio panning now happens in the browser and can dynamically pan signals across any number of channels. So you can send multi-channel audio from the browser to a DAW or a modular synth!
  • Due to SoX being removed, the saveas() method only saves monophonic wav files.
  • Due to SoX being removed, the stitchdir() method has also been removed. (This command was really more of a shorthand way to run a SoX command being the scenes, and isn't worth the trouble of having SoX as a hard dependency)

v1.4.2

24 Mar 03:04

Choose a tag to compare

v1.4.2 has the following new method:

  • over( n ): distributes all the events that a FacetPattern would fire over n loops, so the pattern can last any number of loops before regenerating. Works with audio playback, MIDI note/cc/pitchbend, and OSC.

v1.4.2 also has the following improvement:

  • a more efficient implementation of processing MIDI chord logic in real-time.

And v1.4.2 has the following bug fix:

  • previously, jam() had prevented randomization of values that were 0.

v1.4.0

09 Mar 01:28
9a5545e

Choose a tag to compare

v1.4.0 has the following new methods:

  • savemidi() for saving patterns as MIDI files
  • savemidi2d() for saving 2d patterns as MIDI files

And the following updates:

  • the circle2d() method, with fill_mode = 0, will always return a line that is 1px wide.
  • the host server that the server is running on has been made into a configuration variable, making it possible to deploy beyond localhost to other servers.

v1.4.0 requires an npm update to pull the new midi-writer-js package.

v1.3.1

28 Feb 15:19

Choose a tag to compare

The following changes were made in v1.3.1:

  • replaced every() with whenmod() (borrowing from the tidal function's name), allowing for more precise control over when to regenerate patterns.
  • added tuning utility functions that return arrays of tuning ratios: just(), pythagorean(), equaltemp(), meantone(), edo19(), edo31().
  • fixed a bug to ensure playback of new audio patterns begins at the start of the next loop.
  • fixed a bug where manual BPM changes in the browser would potentially cause some audio playback events to skip.