Releases: nnirror/facet
v1.7.0
- 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
- 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
Here are the updates in v1.5.4:
-
The README file now has js code for blocks every method, for improved legibility and copy/pasting.
-
There were also several bug fixes:
note()method's position argument is working as expectedstutter()was refactored and simplified to retain pitch of the input patterndirsamp()was fixed to address a bug where it would never find a sample if the lookup value was == 1.
- Oscillator methods no longer have a
sampleRateargument, which was probably overkill to include to begin with:cosine(),phasor(),rect(),sine(),circle(),square(),tri()
v1.5.3
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
v1.5.2 focused on improvements to saving and retrieving patterns at three different levels of scale:
- Internal patterns accessible during the generation of a FacetPattern, via new methods
setlocal()andgetlocal(). - Global patterns via improved
set()method. - 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
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()andrechunk() - 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
- 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
v1.4.2 has the following new method:
over( n ): distributes all the events that a FacetPattern would fire overnloops, 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
v1.4.0 has the following new methods:
savemidi()for saving patterns as MIDI filessavemidi2d()for saving 2d patterns as MIDI files
And the following updates:
- the
circle2d()method, withfill_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
The following changes were made in v1.3.1:
- replaced
every()withwhenmod()(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.