Skip to content

Releases: nnirror/facet

v1.5.4

15 Aug 18:11
Compare
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
Compare
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
Compare
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
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.