Skip to content

Releases: nnirror/facet

v1.5.1

16 Jul 18:55
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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.

v1.3.0

26 Feb 21:36
Compare
Choose a tag to compare

In v1.3.0, only the browser can play audio patterns synthesized with Facet.

The browser audio playback feature was added in v1.1.0, and after using it more and more, I found that I preferred it over Max for several reasons:

  1. No need to open another program, simplifying start-up.
  2. Ease of working with arbitrarily many voices in the browser (in Max, I had hard-coded the number of voices to 16, and voice management had become a bit complicated and started to feel like tech debt.)
  3. The second argument to the play() method in v1.2.5 works only with the browser, not with Max. It was very quick and easy to add this feature to the browser, which was a "sign" to me that I should focus on browser audio.
  4. This is a guess, but I don't think anyone is using the Max object for audio playback.

The facet Max object has been simplified into a simple UDP server to receive OSC messages from Facet. All the other Max objects and Max for Live abstractions have been deleted.

v1.2.5

22 Feb 03:16
Compare
Choose a tag to compare

There is now an optional second argument to the play() method, which allows for pitch modification of the pattern during playback. See the documentation of the play()method in the README for more details.

v1.2.2

11 Jan 19:24
Compare
Choose a tag to compare

The following method was added in v1.2.2:

  • markov(): modifies a FacetPattern using a Markov chain for probability-weighted transitions.

The following methods were updated:

  • circle2d(): - added "fill mode" argument controlling whether to fill the entire shape in or only draw its outline; default is no fill.
  • tri2d(): - added "fill mode" argument controlling whether to fill the entire shape in or only draw its outline; default is no fill.
  • rect2d(): - added "fill mode" argument controlling whether to fill the entire shape in or only draw its outline; default is no fill.

v1.2.1

10 Jan 21:07
Compare
Choose a tag to compare

The following methods were added in v1.2.1:

  • spectral(): applies a spectral transformation to a pattern, treating it as if it were a 2d spectrogram and applying an Inverse Fourier Fast Transform (IFFT). This allows you to generate, interpret, and resynthesize a frequency-domain representation into sound.
  • slices2d(): slices a pattern into n 2-dimensional slices and run code on each 2d slice individually.
  • grow2d(): applies a growth algorithm to the FacetPattern in 2D space. The algorithm iterates over each "pixel" in the pattern and, based on probability, spreads its value to adjacent pixels.
  • draw2d(): draws a polygon on the FacetPattern using the provided coordinates and fill value. The polygon is drawn by connecting each pair of consecutive points in the coordinates array with a line filled with the fill value.
  • decide(): randomly decides between 1 or 0, shorthand for choose([0,1]).

The following methods were modified:

  • fgate() (added invert mode)
  • savespectrogram() (renamed)
  • saveimg() (removed width/height arguments)
  • layer2d() (removed width/height arguments)
  • shift2d() (removed width/height arguments)
  • circle2d() (removed width/height arguments)
  • rect2d() (removed width/height arguments)
  • tri2d() (removed width/height arguments)
  • palindrome2d() (removed width/height arguments; rewrote)
  • walk2d() (removed width/height arguments)
  • warp2d() (removed width/height arguments)
  • delay2d() (removed width/height arguments)
  • rotate() (removed width/height arguments)

v1.2.0

05 Jan 20:00
Compare
Choose a tag to compare

Uses socketIO for Websocket connection between node and client side, which fixes this bug: #71

This release requires an npm update if you've already installed Facet, hence the minor version change increment.