Вы находитесь на странице: 1из 59

VERSION NOTES:

v0.7.9b

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.constraints The syntax for provisionals has changed

- bach.roll The order of enumindex options for showaccidentalspreferences and


showaccidentalstiepreferences has changed

- bach.roll, bach.score The "getpixelpos" and "gettimeatpixel" messages are now


deprecated. Use the new "timetopixel" and "score_pixeltotime" instead.
The "durationslinewidth" attribute is now called
"durationlinewidth"

- bach.score The "rebeam" message is now deprecated, and substituted by


the "autorhythm" and "autobeam" messages
Now maketreecompatiblewithts and the syncopation attributes only
apply when autoparserhythm is on.

- bach.quantize The "deny" message is now called "forbid".


("deny is kept for compatibility reasons, but should be
avoided).
New "multimeasure" and "tempohandling" attributes, changing the
default way to deal with marker-based quantization

- bach.ratnum Display and colors have been updated to Max7-style. This


may cause unexpected color combinations in your patches.

*** INTERFACE CHANGES ***

- bach.roll, bach.score Using arrows to modify pitches won't cause notes to change
voice (if too low or too high).
Use Shift+Ctrl as modifiers on Mac to allow voice change.

- bach.score Now backspace on selected measure will only clear the


measure content. Use Shift+Backspace to delete measures

***********************
*** VERSION CHANGES ***
***********************

All objects with llll attributes:


Now llll attributes can be set from the attrui object

- bach.stream, bach.mode, bach.locate


New abstractions

- bach.swap Now has help file


- bach.beatunbox Fixed behavior with wrongly handled extras

- bach.read, bach.roll, bach.score


When user-canceled, the �Error opening� error message is not
output anymore
When a non-existing file is specified, the error message now
reports the file name correctly

- bach.roll. bach.score, bach.slot


Fixed interface mousedrag direction for intlist and floatlist
slots
Fixed number display for intlist and floatlist slots for big
numbers
voices without names are no more tagged �null� in the XML export
New "refresh" message

- bach.roll, bach.score Fixed memory leaks, also causing the objects progressively
slowing down over time
Fixed bug causing crashes and data corruption with list
attributes such as �voicespacing�
Now multiple notes/chords/measures selection via message is
allowed (e.g. sel note (3 2 1) (3 2 2) (4 2 2)...)
Now markers can have lllls as names, such as "(foo 1) (bar 2)"
New "nameappend" message
New "clearnames" message
New label family support added (and corresponding visualization
algorithms)
New "progeny" specification for the "name" message
Move voice up/down added in contextual voice menu
Fixed bug causing wrong voice popup menu behavior when voices
where hidden
Fixed bug causing weird solo/lock/mute status upon drag across
voices
Fixed bug causing weird undo on lock/solo/mute flags
Fixed bug causing wrong saving of command hotkeys
Fixed selection mechanism when selecting both breakpoints and
notes
Fixed bad behavior of feedback delete messages
Fixed bug causing misfunctioning of @autosize attribute in
certain cases
Fixed possibly wrong display when segment curve = 1. or -1.
New cursors interface implemented
Now the sample message also accepts a millisecond interval or a
timepoint interval (for score)
Fixed bug causing wrong background painting of spat slot nodes
New "deletevoice" and "insertvoice" messages.
Improved solo handling and displaying (fixed quirks)
Fixed wrong voice offset when using "sel note if voice == "
Improved breakpoints and duration lines display and interface
Fixed bug causing wrong results near chord onsets with
"getcurrentchord" message
Now "cut slot" works on all the selected notes if no slot window
is open
Now numvoices and clefs attributes are properly parsed even when
written inside the object box
New "glissando" message (similar to the "legato" message, but
also changing duration lines to build glissandi).
New "realtime" message to set realtime attributes at once.
"sel marker if" implemented (just as "sel note if")
Now can snap markers to chords and note tails by keeping Shift
pressed while dragging
Greatly improved undo speed while un-deleting markers.
Improved temporal accuracy in MIDI export
Now "sel/unsel/select markers" works as any other
sel/unsel/select (and not just forcing the selection of all markers.
Added "sel/unsel/select notes" or equivalently "sel/unsel/select
chords", and also added "sel/unsel/select breakpoints" messages
to select/unselect all notes or all pitch breakpoints
"sel breakpoint if" conditional selection added
"clearbreakpoints": new message

- bach.roll Fixed behavior when dragging or extending both notes and


notetails
New "showaccidentalspreferences" attribute (as for bach.score):
now natural accidental can be displayed
New "accidentaldecay" attribute
Now "duration = " works properly for notes inside chords
New �markdivisions� attribute for the �read� message
Now "paste" and "addmarkers" also accept "end" instead of the
onset in milliseconds
New "customspacing" attribute to handle custom time warp
New "trim" and "extend" options for legato message
Now scrollbar and total length are properly updated when elements
are moved via the bach inspector
Now markers are copied along with musical content during
copy/paste actions
"subdivision" marker role added (used by bach.quantize's marker-
based quantization)
New "rippledelete" message (corresponding to Shift+Backspace
editing combination)
�exportbarlines� flag for MIDI export is now 1 by default
�importbarlines� flag for MIDI import is now 1 by default

- bach.score Figures longer than one whole note are correctly exported
to XML
Mordents are correctly exported and imported to and from XML
Tempo changes are correctly imported from XML
Time signatures are correctly exported to MIDI
Potential stability and data corruption issues related to MIDI
export of time signatures have been fixed
Now independent tempi in different staves are properly exported
to Lilypond (and Lilypond pdf)
Now rallentandi and accelerandi are properly exported to Lilypond
(and Lilypond pdf)
Fixed ceilmeasures crashes
Fixed bug causing lazy refresh after "keys" attribute was changed
Fixed wrong duration export and wrong syncopation handling with
notes carrying two or more dots
Fixed bug causing crashes during merge or split
Fixed bug while exporting to Lilypond (and Lilypond pdf), due to
the presence of F8, G8, F15, G15 clefs
�singleslotfortiednotes� now affects also directions and dynamics
exported into MusicXML
New "timepoint" message to perform conversions between timepoint
syntax and millisecond positions
Fixed potential crashes while dealing with rhythmic trees
Fixed wrong lyrics import from XML for tied notes
�directionslots� now works
"setcursor" now accepts the timepoint syntax as expected
"tie": new message to assign ties (as for "velocity", "cents",
etc.)
Fixed bug causing wrong ties upon undo
Fixed bug causing wrong or awkward tuplets simplifications
Fixed hangs with setcursor message
New "measureinfo" message to change measureinfo for selected
measures
Attributes have been recategorized (especially some Appearance
attribute have been put under Notation)
Now the "showtails" attribute properly works
New "showstems", "showflags", "showdots", "showties", "showbeams"
and "showrests" attributes
Fixed bug causing wrong beaming in certain situations involving
rests at the very end of a beam
"edittiedelementstogether", "dlspansties": new attributes
New "playtempi" and "playmeasures" attributes to sequence
tempi/measures
New ability to clear/delete measure from contextual menu
New "tempodigits" attribute
New "deletemeasures" message
Fixed graphic quirks in tuplet representation
Fixed error causing wrong updates during copy-paste of measures
having different time signatures
Fixed measure copy-paste bugs from messages
Fixed consistency of some behaviors of measure-attached markers
Fixed positioning of accents
New "articulationsfont" attribute
Fixed issue causing wrong alignment in proportional mode with
large vzoom

- bach.beatbox, bach.beatunbox
Fixed bug causing wrong results when dealing with Extras

- bach.mc2n Fixed automatic representation of notes, now it is consistent


with notation editors (C#, Eb, F#, Ab, Bb)
New "octave" attribute, which can be disabled to prevent octave
numbers from being appended

- bach.urn, bach.wurn Now @autoclear can assume values in {0, 1, 2} (2 meaning:


auto-clearing urn during multiple picking)

- bach.constraints Solved several stability problems with the weak solver


New �hungry� engine
New �nodeconsistency� and �sortconstraints� attributes
The �weak� attribute is still working but deprecated. Please use
�engine� instead
Domains can be queried and solved at runtime in the strong and
hungry solvers
New mechanism for dynamical assignment of domains
The syntax for provisionals has changed
Improved error reporting
If no return value is given to the lambda loop, 1 is assumed for
the strong engine, 0 for the heuristic and hungry engines.

- bach.step When no iteration can be performed (e.g. because of empty lllls),


a bang in the leftmost inlets now triggers immediately a
bang from the rightmost outlet
- bach.args, bach.portal
bach.args can now set remotely the �out� attribute of the
bach.portal objects located in the same patcher

- bach.args Fixed �nullmode� attribute

- bach.flat Fixed several stability problems

- bach.pick Fixed bugs causing wrong results under some circumstances

- bach.mapelem If null is received in the lambda inlet with @unwrap 1,


empty sublists are created

- bach.group Fixed bug causing wrong results and hangs when count is a
list

- bach.reg Removed spurious �clone� attribute

- bach.perm Now works correctly on lists with many repeated elements

- bach.arithmser Fixed problems with null arguments


Now works correctly with maxcount 1
Accepts none as the starting value, provided that the other
parameters are set

- bach.expr fixed �mod� function

- bach.mean Now has a @weights attribute

- bach.unpacknote Now has a @breakpointshavevelocity attribute

- bach.drip New "circular" attribute, as for bach.step

- bach.idvector Now has defaults to work without arguments.

- bach.tree New Checkbox Outline mode (and setcheck, getcheck messages)


New "presetmode" attribute

- bach.graph New "showclicked", "clickedcolor" attributes


New "click", "setclick" messages
Increased maximum number of points to 1000000

- bach.drip New @unwrap attribute, as for bach.iter.

- bach.hypercomment Display has been updated to Max7-style

- bach.quantize Highly revised marker-quantization method.


New "tempodigits" and "tempocompensation" attributes

- bach.pad Now @align works when set in object box.

- bach.lookup Now supports the @unwrap attribute


Doesn't complain for bangs any longer

v0.7.8.1b
******************
*** KNOWN BUGS ***
******************

- bach.score Some articulations can�t be entered by their keyboard


shortcuts

- bach.constraints Weak solver is not as stable as it should

***********************
*** VERSION CHANGES ***
***********************

- bach.print, bach.post (and occasionally bach.score when verbose)


Fixed random crashes appearing in Max7

- bach.roll, bach.score, bach.slot


Fixed reference for attributes

- bach.score Removed empty dynamics and directions from exported XMLs


If tempo is set to a single voice in an XML, it is imported to
all the voices
This solves a problem with importing from Finale
Articulations attached to chords are now exported in XML.

- bach.constraints New output mode for provisionals when the �provisionals�


attribute is set to 2
New �goalscore� attribute

- bach.pv Fixed crash when loadbang-ed

v0.7.8b

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

******************
*** KNOWN BUGS ***
******************

- bach.score Some articulations can�t be entered by their keyboard


shortcuts

***********************
*** VERSION CHANGES ***
***********************

- bach.swap, bach.llll2dict
New externals

- bach.dict2llll Now is an external


Fixed wrong behavior with lists
- all the UI objects Fixed various bugs with the Windows keys modifiers

- bach.==, bach.!=, bach.>, bach.>=, bach.<, bach.<=, bach.*, bach.mod*, bach./,


bach.!/, bach.%, bach.!-
Now appear correctly in the autocompletion menu in Max7

- bach.slot, bach.score, bach.roll


Fixed random crashes while using the "pen mode" in slots
Fixed crashes during undo, mostly in Max 7

- bach.score, bach.roll The Windows keyboard shortcut for opening the bach
inspector is now ctrl+alt+I

- bach.score exportlilypond and exportlilypondpdf now work properly with


F8, F15, G8, G15 clefs
Tremoli are correctly saved with the score
Fixed crash when exporting to lilypond with articulations
Fixed crashes with @restswithinbeaming set to Always

- bach.readsdif Opens correctly SDIF files generated by SPEAR

- bach.funnel Now works with non-integer offset and step

- bach.rev Now works if sublists of sublists must be reversed

- bach.diff Fixed behavior when first llll is empty

- bach.unpacknote Works properly when notes have articulations


(and hence bach.ezmidiplay)

- bach.tree Fixed bug causing bugs in thread safety

======

v0.7.7b

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.roll, bach.score, bach.slot


Renewed graphics for all slots, and change of marker colors.
If you relied on precise positioning for slot intlist and
floatlist, you might need to revise your patches
The @showslotfunlabels attribute has been renamed @showslotlabels

- bach.slot No longer has bordercolor: inherits the border color from the
currently open slot.
However, bach.slot now has a @bgcolor attribute.

***********************
*** VERSION CHANGES ***
***********************

- bach.convertbase, bach.funnel
New abstractions
- bach.mapelem Is an external now

- bach.arithmser Fixed a bug causing the series to contain one less element on
some occasions if the step was not set

- bach.geomser Now works correctly with factors whose absolute value is >
0 and < 1

- bach.trans Fixed a bug introduced in v0.7.6.2, causing list corruption


in some cases

- bach.insert, bach.nth, bach.subs


A null address llll is no longer accepted

- bach.partition Fixed help file

- bach.delace Fixed behavior when a bang is received after changing the


count attribute (�mono� mode only)

- bach.transcribe new @autoclear, @play and @playdelay attributes

- bach.score Fixed "addmeasures" crashes


Now singleslotfortiednotes works also for background slots.
New �parenthesizedquartertones� specifier for the read message

- bach.roll, bach.score Now keyboard arrows also�navigate inside constrained


pitches (if any)
Fixed crashes while playing and deleting notes at the same time
Fixed bug causing selection of the last chord note when an
inexisting note was requested
Added "index" as conditional selection or parameter modification
variable
New commands syntax, similar to slotinfo. Old syntax is still
supported
Now commands also support a "rest" symbol
New @playrest and @playrestsseparately attributes to handle rest
output from playout at play time
"interp" and "sample": new messages

- bach.roll, bach.score, bach.slot


Improved curve display, now corresponding exactly to the bach
curve equation
(and thus with "interp" or "sample" message output)
New @showslotlegend attribute
New cut/copy/paste messages
@showborder: new attribute
Fixed bug preventing the 'done' message to be sent when
@senddoneatstartup was set to false
Preventedit can start with "-" to reverse declarations

- bach.graph @showxylabels: new attribute

- bach.tonnetz Fixed crashes with @match Smart


Selective dump mechanism added

- bach.minmax Fixed address outlets

- bach.belong Fixed behavior with lists containing duplicate entries


- bach.reducefunction Fixed wrong behavior with greedy clustering algorithm
Greedy clustering algorithm is now the default

-----------------------------

v0.7.6.2b

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

***********************
*** VERSION CHANGES ***
***********************

- bach.roll, bach.score, bach.slot


Fixed bug causing crashes when object was freed

- bach.read, bach.roll, bach.score


No error message if file opening is canceled by user
.llll files are not grayed out anymore

- bach.roll, bach.score New modification mechanism via equations (e.g. "onset =


(cents - 6000)/100", "velocity = sqrt(velocity) + 20"�)

- bach.roll New "voice" message to change voice of selection

- bach.tonnetz Now works properly when encapsulated


Improved efficiency and speed

-----------------------------

v0.7.6.1b

***********************
*** VERSION CHANGES ***
***********************

- bach.print Reverted to the v0.7.5 version because of bugs introduced


in v0.7.6

- all objects printing to the Max window


Fixed bug causing crashes when printing

-----------------------------

v0.7.6b
*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.reduce Now has @maxdepth attribute, by default set to -1 (all


depths)
The default undocumented behavior was maxdepth = 1

***********************
*** VERSION CHANGES ***
***********************

- bach.roll, bach.score, bach.slot


No more crashes on Mac 6.1.8 when patch closes or object is
deleted

- bach.poset New object

- bach.partition, bach.divisors
New abstractions

- bach.roll No more pitch snapping with @snappitch 1 when the slot windows
are open

- bach.score Now the @snappitch attribute works as expected

- bach.dx2x Now has @triggers attribute and accepts argument

- bach.reduce Now accepts an argument as starting value


Now has @maxdepth attribute, by default set to -1 (all depths)
The default undocumented behavior was maxdepth = 1

- bach.perm Output for 0- or 1-element lllls is parenthesized

- bach.thin Doesn�t output anymore an empty llll from the first lambda outlet
before outputting the thinned llll from the leftmost outlet

- bach.trans Fixed a bug corrupting the depths llll in some


circumstances
Fixed a bug corrupting the depth of the output llll in some
circumstances

- bach.expr Now bang returns the value of constant expressions

- bach.constraints No more crashes when entering an empty domains llll

- bach.print Extremely faster on long lllls

-----------------------------

v0.7.5b
*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

***********************
*** VERSION CHANGES ***
***********************

- bach.roll, bach.score, bach.slot


New showslotfunlabels attribute (to show/hide function point
labels)
New prototypes optimized for real time usage

- bach.roll, bach.score Fixed behavior when selecting duration lines


@showtails attribute added

- bach.roll Greatly improved speed in most selection-based processes, and in


score opening

- bach.score Fixed bug causing crashes when playing the last note of a
score tied to nothing
Fixed XML export of ties
Fixed XML import of tuplets whose normal figure differs from the
first figure
(e.g. an eight tuplet starting with a quarter note)
60 bpm MIDI tempo at the beginning of a score is now correctly
exported

- bach.tree New rowvpad attribute to handle additional row spacing

- bach.quantiles Now absolute mode works as expected with negative values

- bach.reducefunction Now Integral Approximation can be set as expected

- bach.weights No more crashes in mono mode when nothing comes in the


right inlet

- bach.pick Fixed behavior when an empty list is input

- bach.mc2pc No more floating point output

- bach.ezmidiplay New @durstretch and @repeatmode attributes added


Now understands the direct noteout-like triplet syntax: pitch
(midicents), velocity (0 for note-off), MIDIchannel
New @extras attribute to prevent extras from being parsed and
output

- bach.tonnetz New "Pitch Surface" mode, with @surface attribute


Fixed wrong selection interface when center was offset

-----------------------------

v0.7.4b

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.graph New middle outlet added for queries and


notifications. Please update all your patches involving bach.graph's rightmost
bang-typed outlet!

- bach.contains "maxdepth 0" now returns type llll

- bach.post "maxdepth 0" now behaves like bach.print

- bach.iter, bach.step "maxdepth 0" now returns the base llll


Only the "bang" and "stop" messages now can stop iteration

- bach.prepend Now @inwrap does not wrap the element set as argument
(unless anything comes in in the right inlet), as for
bach.append

- bach.pad Now the default padding repeats the ending element. Check
your older patches if you hadn't put any argument for bach.pad!

- bach.split Now no more () initial llll when splitting element is


at the very beginning (and @keep != 1)

- bach.roll, bach.score New @autosize attribute, by default active.


Now when you ask for more/less voices than the
existing ones, the number of voices is automatically changed.
Set @autosize to 0 if you don't want this behavior.

- bach.weights New "mono" mode is now the default

- bach.sieve Behavior has changed with respect to searches for


sublists. Please refer to the documentation.

- bach.tree Now open/close/switch <num> only open a specific level of


depth (mindepth = maxdepth = <num>)
Changed default alternate background color ��which now can
be set via @alternatecolor

*** INTERFACE CHANGES ***

- bach.circle Now dumping is performed via Cmd+Shift+D (mac) or


Ctrl+Shift+D (win) and NO LONGER Cmd+V/Ctrl+V
The same is true for bach.tree (new feature) and
bach.tonnetz (new object)

- bach.tree Now using up/down arrows does not automatically open nodes
which were closed.
Add the Shift key to have such behavior

- bach.roll, bach.score, bach.slot


Undo/Redo is no longer verbose by default. You can still
set it verbose via @verboseundo
***********************
*** VERSION CHANGES ***
***********************

- Maximum allowed length of *text* lllls raised to 32767 atoms (of course, native
lllls still have no limit)

- Now U/I objects show up properly in Max 6 object explorer

- all abstractions containing [uzi] object do not depend on its middle outlet any
more (such outlet is buggy in Max 6.1.6)

- bach.float2rat, bach.tonnetz, bach.readsdif, bach.writesdif, bach.reducefunction,


bach.integrate, bach.derive, bach.hypercomment, bach.wordcloud
New objects

- bach.cross, bach.keychain, bach.mc2r, bach.r2mc, bach.quantiles, bach.mapchord,


bach.path2llll, bach.reduce
New abstractions

- bach.find, bach.keys, bach.rev, bach.rot, bach.scramble


maxdepth 0 and mindepth 0 are still functional but
deprecated and will trigger a warning message.
If for some reason you set them explicitly in your
patches, please change them to -1 and 1 respectively.

- bach.find maxidx 0 and minidx 0 are still functional but deprecated


and will trigger a warning message.
If for some reason you set them explicitly in your
patches, please change them to -1 and 1 respectively.

- bach.tree Editing capabilities added


double click on items to modify them, backspace on
items, and some key combinations to rotate, reverse and scramble.
undo/redo system added
new copy/paste system added
new 4th outlet added notifying about open/closed
levels upon click
new 5th outlet added outputting bangs when tree is
changeed via the interface
showfocus, maxundosteps, verboseundo attributes added

- bach.wurn Now it works as expected

- bach.roll, bach.score, bach.slot


Now matrix-typed slot information is always output with
wellshaped matrices (having the
dimensions specified via the slotinfo).
Now one can delete representation ysnap and znap
information from slotinfo inspector (no longer need to put an explicit "null")
Breakpoint function individual points selection system
implemented
Incidentally, now bach.slot has @selectioncolor
attribute
Now breakpoint functions inside slot windows display point
labels
New "pen mode" for function slots: hold Control and click
and drag to create new points
New "inhibitundo" message to temporarily inhibit undo step
creation
New "droplastundo" message to prune last inserted undo step
New "undobang" attribute, to handle the rightmost bang
being sent upon undo/redo
Outer slot window frame is no longer affected by slot
window transparency
New "slotfunctionptradius" attribute, determining size of
function points in slot windows.
New possibility to cut/copy/paste selected points in
function slots.

- bach.roll, bach.score, bach.write


Files can now be overwritten (no file corruption happens)

- bach.roll, bach.score Fixed bug causing wrong handling of the space after
the last voice
It didn't show up in the voicespacing attribute
It could cause wrong zoom when a patch was reloaded.
No more dilation rectangle quirks when dragging or
stretching up/down to change pitch
Dragging selection doesn't cause selection onset collapsing
any more when approaching 0ms barrier
Selection dragging mechanism improved
Markers with no name are now properly saved and dealt with
Fixed crashes for "sendcommand" message when no command was
defined and the object was just instantiated.
Fixed bug causing slight shifts in background slot
functions drawing
New "dump separate" message to only dump separate outlets
(and not the leftmost one)
Now you can substitute voice number with a list of voices
for sel/unsel/select messages
Fixed bug causing possible crashes while sequencing
"offline" play mode added (add "offline" as first argument
for "play" or "playselection").
Fixed bad behavior when zoom was Auto but practically zero
(very thin objects)
Now "getcurrentchord" works properly also during playback
Fixed bug causing weird note tail displayed when
durationlinewidth was big

- bach.score Fixed bug causing crashes when playing and the last
note of a voice is tied to nothing
Now "dump measureinfo" works as expected
New "exportlilypond" message to export to LilyPond
New "exportlilypondpdf" message to export to PDF via
LilyPond (if installed)
Fixed bug causing (harmless) "wrong undo data" error
messages in max window when shifting pitches
Now a partial note is correctly output from playout with
onset corresponding to the playhead start point.
New "join" message implemented (corresponding to the
Cmd+Shift+Y key combination)
New "domain" message implemented (as for bach.roll)
Non-integer tempos are now correctly exported in XML

- bach.roll Now "subroll" message properly trims temporal slot content


New "split" message implemented
Now "gluechord" message properly glues also temporal slot
information and pitch breakpoint information
A new smooth parameter is added as a last argument in
the message
Midi export doesn't crash with time signature markers and
barlines
Fixed midi export of tempi
New "importbarlines" and "exportbarlines" message
attributes respectively for midi import and export
New "distribute" message, to evenly distribute in time
"writetxt" message doesn't crash Max5 anymore
Pasting chords is now possible also from one voice to a
different one (depending on the mouse cursor position)

- bach.slot Fixed bug causing weird domainslope values assigned


randomly
Now has @showfocus message
Horizontal zooming added for function, 3dfunction, spat and
dynfilter types of slot
New domain, getdomain and getdomainpixels messages

- bach.portal, bach.args Now work correctly when typed into a patcher (and not
only when loaded from disk)

- bach.pick New syntax for picking elements from sublists

- bach.iter, bach.step "maxdepth 0" now returns the base llll, together with
a null address and a "root" command
Only the "bang" and "stop" messages now can stop iteration
New "lambda" attribute

- bach.step New "circular" attribute

- bach.collect "root" message accepted in the right inlet, for


compatibility with the new features of bach.iter and bach.step
"top" message in a newly created bach.collect no longer
crashes

- bach.find "depthpolicy" attribute now works correctly

- bach.append With argument "1" now only one inlet is created

- bach.subs, bach.insert New "set" attribute

- bach.pv Behavior is now correct with respect to patcher hierarchy

- bach.arithmser, bach.geomser, bach.primeser


Now bad input lllls are correctly detected and no longer
hang Max

- bach.arithmser Fixed behavior when maxcount is given and step is not


Fixed potential problems when an invalid llll is entered

- bach.geomser Fixed behavior with factor = 1


Now error messages for bad parameters are reported every
time a bang is received

- bach.portal Fixed crash when receiving an invalid text llll with


@out t
- bach.sort New "by" attribute

- bach.weights New "mono" mode (default)

- bach.norm, bach.normalize Now work for generic p-norms (p > 0 or p = inf)

- bach.interp Fixed issue causing output having length -1 with


respect to the required number of steps

- bach.submatrix Now supports negative numbers as start/end row/col

- bach.wellshape "numcols" and "numrows" attributes added to account for


fixed output rows/columns number.
Default is "none" (= autodetect, exactly as the
previous behavior).

- bach.filternull New outlet and argument added to support output of default


lllls once a "null" comes in.

- bach.pad "null" as padding element now means: repeat last element


@align attribute added

- bach.tree Now a "bang" is equivalent to a "dump" message


Interface actions added for all keyboard arrows

- bach.contains Right outlet now outputs a generic Max text message,


not a native llll.

- bach.ezmidiplay Fixed assistance

- bach.change "set" message can now be prepended to native-format


lllls
New right inlet for setting the initial llll
New right outlet outputting a bang if there is no change

- bach.nearest "absolute" attribute now works correctly

- bach.mapelem fixed bug causing wrong behavior on atoms with


@unwrap 1

- bach.histo new "sym" mode

- bach.quantize Fixed behavior with "Merge" policy.


Fixed tempo detection in some specifics marker chaining
situations

- bach.sieve Behavior has changed with respect to searches for


sublists.

- bach.mean, bach.variance Now output is forced to be float if a float argument


is set

-----------------------------

v0.7.3b
*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.score, bach.roll, bach.write


A file extension is no longer automatically added to a file name
provided via message

- bach.score VERY IMPORTANT: THE COMPLETE TIMEPOINT SYNTAX HAS CHANGED!!!


If you set explicitly the voice number, now the complete syntax
is:
(<voice_number> <measure_number> <position_in_measure>).
Beware: the voice number used to be the last element!
If you didn't use the explicit voice number, this does not
concern you.
However this concerns all the point in which timepoint syntax is
used, namely:
- In setting or getting measure-attached Marker position
- In setting or getting the loop region position (if measure-
attached)
- In selection or querying messages, where timepoint can take the
place of millisecond positions
Please notice that measure-attached markers and loop region
position are AUTOMATICALLY UPDATED when
you open your old patches, so you just need to save them again.
For anything else, on the other hand, you should UPDATE your
patches to support the new syntax!

- bach.roll The "sel note" and "sel chord" syntaxes have changed!!!
Now (optional) voice number is FIRST argument (no longer the
last).
Please update your patches

- bach.constraints Negative return values are not considered as "reject" by


the heuristic solver,
but they concour to the solution score just like non-
negative values.
The "reject" keyword now causes the solution to be
rejected.

***********************
*** VERSION CHANGES ***
***********************

- New tutorial: "From OpenMusic to bach"

- bach.split New abstraction

- bach.weights New external

- bach.diag, bach.minfo, bach.slot


Now these are properly included in Windows

- bach.roll, bach.score, bach.write


A file extension is no longer automatically added to a file
name provided via message
A file extension is now automatically added if missing to a
file name provided via a save dialog box.

- bach.roll, bach.score Fixed bug ignoring editing in slots external editors


when the whole slot content was cleared.
Fixed bug causing wrong copy/paste of empty slots
Now navigating the score while a slot window is open causes
the slot window to navigate too.
New "playoutfullpath" attribute to output full path
information of played notes/chords from the playout.
Native lllls are now correctly read
Now chord creation/deletion can be set as "preventedit",
independently from note creation/deletion

- bach.roll Now gluechord properly works also with symbolic names of


notes

- bach.score Fixed bug causing wrong interface for rhythmic trees


Improved speed in rhythmic tree parsing and handling
"sel chord/note/measure" messages added
selmeasures/unselmeasures/selectmeasures are now
deprecated:
a new "sel measure range" analogous syntax has been
added instead
Floating point measure numbers or measure onsets in
timepoints are now fully supported.
Now it is by default instantiated with an empty measure, to
better distinguish between a bach.score and a bach.roll.
No more crashes under repeated sequence of "delete"
messages.

- bach.constraints Fixed various bugs in the heuristic engine.


Negative return values are not considered as "reject" by
the heuristic solver,
but they concour to the solution score just like non-
negative values.
The "reject" keyword now causes the solution to be
rejected.

- bach.geomser Factors -1 and 1 are accepted if a maximum count is


provided
A list of integers is returned if all the arguments are
integers

- bach.scramble Fixed bug causing random crashes and other issues

- bach.group No longer crashes with badly formed count llll

- bach.pipe Rightmost inlet now accepts time in native format

- bach.split New abstraction

- bach.wellshape Now pad element is really optional (default is 0)

- bach.prepend Now supports @inwrap and @outwrap attributes

- bach.pad Fixed bug causing wrong output for lists having exactly the
output size
- bach.counter Now sending integers to increment individual indices
does not send minimum configuration any more
e.g. if starting configuration is 0 0 0 0, sending
[1] will already output 1 0 0 0, and so on
"setnext" message behavior fixed

-----------------------------

v0.7.2b

*****************
*** IMPORTANT ***
*****************

*** DEPRECATED OBJECTS ***


- bach.msort, bach.ssort Deprecated. Still fuctional as of v0.7.2b, but might
be not be included in future releases of bach.
Please use bach.sort instead (it has been greatly
optimized, so it is no longer significantly outperformed by bach.ssort).

- bach.oneperm Deprecated. Still fuctional as of v0.7.2b, but might


be not be included in future releases of bach.
Please use bach.perm instead, with the new "maxcount"
attribute set to 1.

- bach.mdelace Deprecated. Still fuctional as of v0.7.2b, but might


be not be included in future releases of bach.
Please use [bach.delace mono].

*** DEPRECATED ABSTRACTIONS ***


- bach.nsubs Deprecated. Still fuctional as of v0.7.2b, but might
be not be included in future releases of bach.
Please use bach.subs instead, with the new "multi"
attribute set to 1.

- bach.ninsert Deprecated. Still fuctional as of v0.7.2b, but might


be not be included in future releases of bach.
Please use bach.insert instead, with the new "multi" and
(in order to replicate exactly the previous behavior) "mode" attributes set to 1.

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.slot A middle inlet has been added!!! Please modify all your
patches using the right inlet ("bang when changed").
The "done" message is now sent through this inlet (as well
as other notifications and queries).
A "slot" router has been added at the beginning of each
"dump" (as for bach.roll and bach.score)

- bach.roll, bach.score An @autoclear attribute has been put in place, so


that by default [bach.roll] and [bach.score] act exactly as [bach.beatbox] and
[bach.quantize]
(and [bach.collect], somehow) upon separate parameter
input: by default, the content is DELETED and rebuilt. If you want to step back
to the previous behaviour (where the actual content
is CHANGED when introducing new separate parameters), just set "@autoclear 0".
By default, thus, one doesn't need to send a "clear"
message beforehand any more.
Attribute @selectednotecolor is now named @selectioncolor

colors linked to integer note slots have been changed, in


order to avoid confusion with default lock/mute/solo/selection colors
Now void messages like (slotinfo) (clefs) (keys) won't
change the existing clefs, keys and slotinfo to a default one.
(Of course messages like (marker) will still set no
marker in the score)
The "showyscrollbar" attribute is now named
"showvscrollbar", for coherence with the vzoom one.
The "linknoteheadadjusttoslot" vertical shift now shifts
down when positive and up when negative (as anything else in Max).
"retranscribeselection" message is now renamed as "respell"
"snapallpitchestogrid" and "retranscribe" messages no
longer exist. Use "select all, snappitchtogrid" or "select all, respell" instead.
loop region is output by bach score (when queried) in the
form: loop <start_ms> <end_ms> <start_timepoint> <end_timepoint>. Timepoints
are thus not given with an additional parentheses
level.

- bach.roll By default alignment is made on notehead centers, and NO


MORE ON STEMS! You can set the @align attribute to do what you want.

- bach.score Now loop region is always output as (<measure_number>


<point_in_measure> <voice_number>) triplets.
The attribute @autoretranscribe has been renamed to
@autobeam.
Now you can assign rests also directly via cents, by using
() or nil instead of a pitch. This should not break any compatibility, unless you
had relied over the fact that, previously, ()
associated to a positive duration gave a default dummy note.
Now () associated to a positive duration gives a
rest: rests can be thus equivalently (and independently)
assigned via empty lllls for pitches or negative
durations.

- bach.constraints maxtime attribute now defaults to 60000 ms

- bach.perm Now the first permutation in the output llll is the input
llll
"order" attribute has been suppressed; the only optional
argument is now maxcount.

- bach.group If a list with more than one element is provided as


an argument, it is considered as a single count attribute (for the new "multigroup"
mode).
Therefore, the overlap attribute can't be set as an
argument anymore: to set it from the object box, the @ attribute syntax should be
used.

- bach.find By default, if a lambda loop is not present, sequences


deeper than the target llll are not considered matches.
This can be changed via the new "depthpolicy"
attribute.

- bach.subs Multiple-element syntax (which never really worked) is no


longer supported - please use the new "multi" attribute instead.
- bach.insert Multiple-element syntax (which never really worked)
is no longer supported - please use the new "multi" attribute instead.

- bach.random, bach.urn, bach.wrandom, bach.wurn


Now output addresses are wrapped in levels of parentheses,
as for bach.find

- bach.unpacknote Now when no slots/breakpoints/graphics are found, "null" is


output, and NOT "()", as for the articulations
Yet, a "nullmode" attribute now exists, handilng the case
when no non-trivial breakpoints are given.
when it is 0 (default), it outputs the default
breakpoints instead of "null"; when it is 1, it output "null"

- bach.cartesianprod Now only works at the root level (and therefore the
maxdepth attribute doesn't exist anymore)

- bach.mapelem "spikemode" attribute no longer supported

*** CHANGES OF INTERFACE ACTIONS ***

- bach.roll Now Cmd+V pastes the content at the MOUSE position, and
Cmd+Shift+V paste the content in the ORIGINAL position

- bach.roll, bach.score When the slot window is open, Cmd+doubleclick will


delete the slot content ONLY if it's done in the upper part of the slot window
(e.g. over the slot name).

- bach.args lllls received before the object goes into "open" state are
discarded. Anyway, this should never happen if bach.args is used orthodoxly.

***********************
*** VERSION CHANGES ***
***********************

- all objects bach now works under Max 6.1 in 64-bit mode

- all objects Operations on rationals have been reimplemented in order to


work correctly with bigger numbers.

- all objects llll attributes can now be set through native lllls (only
relevant when set via messages)

- all objects Potential bach attributes have backticks when appearing at


the beginning of a text-format llll

- all objects Fixed several memory leaks.

- bach.value, bach.pv, bach.pack


New objects

- bach.dict2llll, bach.prepend
New abstractions

- bach.score, bach.roll, bach.read


Now double-quoted symbols are correctly read from text files
- bach.score, bach.roll, bach.write
Format for native mode files has changed. New files can't be
opened in previous versions of bach.

- bach.score, bach.roll, bach.slot


Cut has been implemented (Cmd+X on mac, Ctrl+X on windows).
Improved function editing inside the slots.
Slot content can now be edited textually by double clicking on
the slot name (upper part of slot window)
Now "active" is accepted instead of slot number or name for slot
syntax e.g. in "addslot" or in change slot messages...
Fixed bug causing crashes when non-wrapped llll were given as
input for "llll" slots
Files inside filelist slots are correctly relocated - no more
saving issues for moving files inside the search path.

- bach.score, bach.roll No more hang when undoing during play


Breakpoints (and note tails) can now be represented with
noteheads and accidentals via the "breakpointshavenotehead" attribute
Slot windows now have their own zoom factor, e.g. you can have
big slot windows in tiny notated scores.
Two independent factors are available: for slot windows
("slotwinzoom") or for background slots ("bgslotzoom").
New "pitcheditrange" attribute, to constrain pitch editing only
inside a given range (or discrete steps)
Now you can finely edit the note tails vertical position by using
Cmd+Shift+drag
Now pitch breakpoints and note tails can be inspected too
Now background text slots and file slots does not superpose
graphically any more
Now dragging content outside of the window moves the scrollbar
"openslotwindow" message implemented
New "getzoom" query implemented
slot window height is now customizable via the "height"
specification in the slotinfo (or via the inspector).

- bach.roll New "explodechord" message added


"select chord" works now also with negative indexes, such as
"select chord -1" (last chord)
"addchord" has been made way faster
"select note" by index added

- bach.score Fixed wrong time signature import from MusicXML


Quarter-tones are correctly imported from MusicXML
UTF-8 and UTF-16 MusicXML files can be imported
Accidentals in exported MusicXML files are correctly read by
MuseScore
Now double clicking on the clef will select notes of entire
voice, as for bach.roll
Now 1/8192th is the smallest representable note while editing. No
more hang or crashes because of edited notes below this threshold.
Fixed bug causing wrong nested tuplet representation on some
occasions.
Fixed bug causing wrong ceilmeasures if voices had no measures
"(shownumbers off)" measure specification now works properly
Flags are now properly preserved while parsing rhythmic tree
fixed thread safety issues
Fixed bug causing wrong chord splitting when chords were tied
"split" message implemented
Fixed several bugs concerning wrong rhythmic tree representations
inserting chords in speedy edit works by adding the Ctrl key to
the numbers 1 to 9 (and NOT the Shift key).

- bach.pcsetinfo Fixed behaviour of inner bach.args, no more error messages, and


proper initialization

- bach.slot Now slotwinalpha and backgroundslots also work for bach.slot.


Notification about open slot window are possible with the
attribute @notifyopenslot
New "sample" and "interp" messages to sample or get interpolation
of slots

- bach.quantize No more crashes with "auto" measureinfo


No more crashes with wrong measureinfo introduced
Fixed inlet assist
No more crashes with "sync 1" attribute
Fixed small memory leak
Fixed big memory leak with "sync 1"
Fixed bug causing sometimes wrong measureinfo for "auto" measures
with TEMPO special markers in bach.roll
No longer hangs when "clearall" is sent in separate mode

- bach.constraints maxtime attribute now defaults to 60000 ms


New heuristic search engine, with many related attributes

- bach.args Now output is correctly synchronized with loadbangs in the parent


patcher (and above)
lllls received before the object goes into "open" state are
discarded. Anyway, this should never happen if bach.args is used orthodoxly.

- bach.cartesianprod Is now an external.


Variable number of inlets.
Only operates at the root level (and therefore the mindepth
attribute doesn't exist anymore)

- bach.arithmser, bach.geomser
Are now externals

- bach.expr "maxvar" is now a static attribute, i.e. it can only be set from
the object box.

- bach.sort, bach.msort Now respond correctly to bang (please notice that


bach.msort is now deprecated)

- bach.msort, bach.ssort
Deprecated. Still fuctional as of v0.7.2b, but development might
be dropped in further releases of bach.
Please use bach.sort instead (it has been vastly optimized, so it
is no longer significantly outperformed by bach.ssort).

- bach.sort Greatly optimized. No longer significantly outperformed by


bach.ssort when a lambda loop is not present.

- bach.scramble Greatly optimized.

- bach.thin Greatly optimized.


- bach.perm Now the first permutation in the output llll is the input llll
New "maxcount" attribute.
"order" attribute has been suppressed; the only optional argument
is now maxcount.
Output is correct for a 1-element llll

- bach.oneperm Deprecated. Still fuctional as of v0.7.2b, but development


might be dropped in further releases of bach.
Please use bach.perm instead, with the new "maxcount" attribute
set to 1.

- bach.prime When a negative number is input, the primality test is


performed on its opposite.

- bach.primeser Now input can be a native llll as well.


New inlets for max and maximum number of items.
Minimum, maximum and maximum number of items can be set as
arguments.
If maximum is set to 0, it is considered as "no maximum"
(default).
Maximum number of items defaults to 1000.

- bach.reshape Fixed assistance.

- bach.write Removed undocumented llll argument.

- bach.delace Can't be created with no outlets anymore.


New "mono" mode, replacing the functionality of bach.mdelace.

- bach.group New "multigroup" mode.


If a list with more than one element is provided as an argument,
it is considered as a single count attribute (for the new "multigroup" mode).
Therefore, the overlap attribute can't be set as an
argument anymore: to set it from the object box, the @ attribute syntax should be
used.

- bach.print, bach.post Symbols containing spaces are now output with double quotes

- bach.post Improved display of closed parentheses

- bach.append "set" is now threadsafe

- bach.find By default, if a lambda loop is not present, sequences deeper


than the target llll are not considered matches.
This can be changed via the new "depthpolicy" attribute.
Removed undocumented "unwrap" attribute
Fixed assistance

- bach.subs New "multi" and "sizes" attributes.


Multiple-elements syntax is no longer supported - please use the
"multi" attribute instead.

- bach.insert New "multi" and "mode" attributes.


Multiple-elements syntax is no longer supported - please use the
"multi" attribute instead.

- bach.shelf Fixed memory leak

- bach.expr Fixed memory leak


- bach.iter, bach.step Fixed memory leak with recursionmode

- bach.flat Removed undocumented "spikemode" attribute

- bach.depth, bach.length
Fixed assistance

- bach.diff Correct output when first input llll is empty

- bach.intersection Fixed double free

- bach.symdiff Fixed assistance

- bach.contains Fixed output from the right outlet

- bach.post Removed warning messages when 3 arguments are provided

- bach.slot2function Now the domain is only output if the slotinfo is sent in


the right inlet (also no more wrong domains)

- bach.submatrix Now arguments are correctly: start row, start col, end row, end
col

- bach.tree New "Outline" display mode added


New "click" method, to click elements from messages

- bach.gcd Now accepts bang

- bach.belong Now works properly with lambda cycles

- bach.counter Now works as expected with two arguments (size and maximum)

- bach.drip Has one more outlet: now sends a bang out the right outlet when
the dripping is over

- bach.fact Now supports 64-bit mode

- bach.wellshape Now properly works also without setting argument or right-inlet


(argument is assumed to be 0)

- bach.ezmidiplay Now properly responds to the "clock" message

- bach.scale If all the elements to scale are the same, now they're
replaced by the mean of new minimum and maximum

- bach.toc&r @triggers attribute added

- bach.transcribe No more weird display jump


Accepts quadruplets to manually set note duration

-------------------------------------

v0.7.1b

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.urn new @nullmode attribute, which is by default 0


(i.e. no "null" element is output any more when the urn is
empty, only right bangs)

- bach.args attributes can only be set at object creation


"done" message is no longer output from rightmost outlet

- bach.collect new autosize attribute, 1 by default

- bach.nth, bach.subs, bach.insert


now multiple 1's in the address upon an element (e.g. [42]-
>[bach.nth 1 1]) return null (previously returned the element itself)

- bach.pick "outputnull" attribute has been renamed "nullmode"

***********************
*** VERSION CHANGES ***
***********************

improved the overall efficiency of the llll native communication

- bach.mxo doesn't have necessarily to be placed in the extensions


folder (although this is still the recommended choice)

- bach.fft new external

- bach.wurn, bach.counter, bach.pad, bach.cartopol, bach.poltocar


new abstractions

- bach.reg bang in right inlet doesn't trigger output anymore

- bach.roll, bach.score, bach.slot


fixed memory leak involving undo steps, which could cause
unbounded memory usage

- bach.roll, bach.score now the loop region can be dragged entirely


attribute @backgroundslots now changed its name to @bgslots
attribute @backgroundslotfontsize has changed its name to
@bgslotfontsize
attribute @slotsbgalpha has changed its name to
@slotwinalpha
now looping is correct even when ending loop extreme is
moving during playback

- bach.score fixed bug causing big amount of memory being idly


allocated for each measure,
thus slowing system when a lot of measures were
introduced
tempo markings are now correctly parsed during MusicXML
import
no more crashes with badly formed exportxml messages
fixed bug causing wrong nested tuplet representation on
some occasions
fixed occasional crashes while playing and changing the
score at the same time
solved issue causing "Tuplet could not be parsed" messages
fixed bug causing crashes when some tuplets with additional
beaming levels were inserted

- bach.quantize fixed bug causing crashes with "auto" measureinfo and


no barline/time signatures indication
fixed bug causing wrong behaviour with pickup measures and
"auto" measureinfo.
fixed weird behaviour with pickup measures with "auto�
measureinfo
no more crashes for MergeToNext policy
new "sync" attribute added, to preserve synchronicity
between voices

- bach.circle does not beep any more on key combinations

- bach.append fixed memory leak

- bach.args attributes can only be set at object creation


"done" message is no longer output from rightmost outlet,
unless the "done" attribute is set
attributes arriving at loadbang time are correctly parsed
no more crashes with too many ins
now works after encapsulation

- bach.constraints fixed bug causing crashes with unary constraints


position output from middle outlet is now correct
now position is output every 100 ms, and always in the main
or scheduler thread

- bach.iter, bach.step fixed bug causing data corruption with address


outlets

- bach.collect now works correctly in a patch loop


new "autosize" attribute
back message now works

- bach.nth, bach.subs, bach.insert


now multiple 1's in the address upon an element (e.g. [42]-
>[bach.nth 1 1]) return null (previously returned the element itself)

- bach.nth no more crashes with empty ranges

- bach.sort, bach.msort, bach.find


rightmost ("lambda") inlet now accepts native lllls

- bach.reg bang in right inlet doesn't trigger output anymore

- bach.pick "outputnull" attribute has been renamed "nullmode"

- bach.mdelace doesn't crash anymore if no count is defined


now count defaults to 2

- bach.append fixed bug causing problems with the set attribute

- bach.flat fixed bug causing bad depth being reported

- bach.urn now address outlet works properly


- bach.urn, bach.wrandom, bach.wurn
fixed address output when @maxdepth != 1

- bach.wellshape now works also without argument given (0 is the default)

- bach.primeform now does not hang with non-plain lllls

- bach.interp now works without needing to set interpolation


exponent
interpolation exponent is also first optional argument.

- bach.autoscale if all the elements to scale are the same, now they're
replaced by the mean of new minimum and maximum

- bach.nearest new absolute attribute

- bach.beatbox fixed memory leaks

- bach.random @unwrap attribute added

- bach.graph now "set" message is 1-based

-------------------------------------

v0.7b

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.ezmidiplay Outlets have been changed

- bach.roll, bach.score bach.slot2filtergraph for dynfilter slots does NOT


EXIST ANY MORE: use bach.slot2filtercoeff instead! (see help)
"redrawwhileplaying" attribute does NOT exist any more, it
has been replaced by "playstep" and "highlightplay"
rhythm handling has changed, see the new "rhythm" tab in
the inspector.
Velocity minimum is now 1, and no more 0.
A "play" llll through the playout is sent as notification
when a play starts (symmetrically with the "stop" message sent when a play ends)
Beware: voicenames and stafflines might have changed, so
you might have to check again your older patches
"Play Partial Notes" is now on by default
Markers are now by default output at playtime

- bach.roll Now if you don't define all onsets, the last one is
repeated (so you can enter (0 1000) to have (0 1000 2000 3000�))
If you don't define any onset, new onsets by default are
1000 ms wide
If you don't define any duration, new durations by default
are 500 ms

- bach.print, bach.post name attribute doesn't exist anymore. name can only
be set as an argument

- bach.beatbox Outlets have radically changed! Now by default you


just have a single output to be linked to bach.score. You can still have the old
beatboxing of each separate parameter by setting an
argument "separate" when you create the [bach.beatbox] (see helpfile)
Be sure to review all your patches containing
bach.beatbox!!!

- bach.beatunbox Inlets & Outlets have radically changed! Now by default you
just have a single input to be linked to bach.score's dump, and you also have a
Measureinfo outlet (for symmetry with bach.beatbox).
You can still have the old
beatunboxing of each separate parameter by setting an
argument "separate" when you create the [bach.beatunbox] (see helpfile)
Be sure to review all your patches containing
bach.beatunbox!!!

- bach.quantize inlets and outlets have radically changed! Now all


you need to do is, by default, to link the only outlet to bach.score,
give measureinfo in the left inlet, and the message
coming from roll in the middle inlet. You can still have the old
quantization of each separate parameter by setting an
argument "separate" when you create the [bach.quantize] (see helpfile)
Be sure to review all your patches containing
bach.quantize!!!
now is able to deal with grace notes: small events can
indeed be properly turned into grace notes.
A few attributes help in handling the particular cases
(they are already set to a default behaviour).
BEWARE: Now turning small events into grace notes is the
DEFAULT behaviour of bach.quantize. Which means, if you want a different
behaviour, you have to change the smalleventshandling
attribute "by hand".
default quantization priority has changed from "Linear" to
"Notes First (Decreasing)"

- bach.collect collections are counted from 1


"wrap" attribute is not supported anymore - use "inwrap"
instead

- bach.nth () are not output for non-existing elements, unless "nils"


attribute is set

- bach.grouplist doesn't exist anymore - use bach.group instead

- bach.mattrans doesn't exist anymore - use bach.trans instead

- bach.removedup doesn't exist anymore - use bach.thin instead

- bach.nthrandom doesn't exist anymore - use bach.random instead, which is


also more powerful.

- bach.spell renamed to bach.drip

- bach.xor renamed to bach.symdiff

- bach.histo "none" has been renamed to "auto" (change it in older


patch)

- bach.sum, bach.prod, bach.mean, bach.variance, bach.stdev, bach.skewness


maxdepth now has to be given as attribute, as for every
other bach object and abstraction.

- bach.mono To resume notes, now you need to set the attribute @resume
1. The simple argument "1" no longer works.

- bach.n2mc, bach.mc2n, bach.primeform, bach.ivec, bach.zsearch, bach.minfo,


bach.eig, bach.gausselim, bach.extractbasis, bach.beatbox
attributes are NO MORE automatically saved with patcher!

- bach.args new "done" attribute (default 0, which might break


backwards compatibility)

- bach.find now lllls output from the lambda outlet have always the
size defined by the "size" attribute

- bach.filter now r and rat also select integers, and R and Rat
only select rationals

*** THESE CHANGES MODIFY SOME PREVIOUSLY DEFINED INTERFACE COMMANDS ***

- bach.roll, bach.score To change enharmonicity of a note, the command is no


more Cmd+G but becomes Cmd+Shift+R
The Solo/Unsolo command now is Cmd+J (mac) or Ctrl+J (win).
The Cmd+I/Ctrl+I is reserved for opening the inspector

- bach.score The merging command is now Cmd+Y (mac) or Ctrl+Y


(win), and no more J.

*** THESE CHANGES MODIFY SOME BEHAVIORS OF THE PRIVATE 0.6.99 PRERELEASE ***

- bach.urn A middle inlet has been added, outputting elements


address(es)

***********************
*** VERSION CHANGES ***
***********************

bach has switched to static linkage. This makes the bundle a little bit heavier,
but allows to create standalone application without bothering about versioning or
frameworks.

- new tutorials: The World Outside, Inspector As A Gadget, Beams Through The
Trees, A Mazing Grace, Edit Path, God Solve The Queens

- extension objects: the bach.llll, bach.collector and bach.lexpr


externals don't exist anymore
a new extension named bach is now installed on the system

- all objects: random crashes no longer happen with text output of


extremely deep lists
safer check for correct installation
corrected a large amount of memory leaks
improved overall speed and stability

- all abstractions: now work as expected with [loadmess] and [loadbang]


events. Abstractions inside abstractions also do.
- bach.shelf, bach.slot, bach.constraints
new externals

- bach.group new external (replaces the bach.grouplist


abstraction)
new @overlap attribute, in order to group an llll keeping a
certain number of overlapping elements

- bach.clip now accepts min and max as arguments

- bach.thin new external (replaces the bach.removedup abstraction)

- bach.mattrans doesn't exist anymore - use bach.trans instead

- bach.spell renamed to bach.drip

- bach.omtree2bachtree, bach.bachtree2omtree
new externals converting OpenMusic trees and bach-style
rhythmic trees

- bach.variance, bach.stdev, bach.urn, bach.skewness, bach.kurtosis, bach.belong,


bach.round, bach.change, bach.spell, bach.nthweighted, bach.randomdrip,
bach.nearest, bach.dsort, bach.!/, bach.!-, bach.cartesianprod
new abstractions

- bach.scale now the two rightmost inlets work as expected

- bach.transcribe new right outlet, outputting current time

- bach.replace fixed bug causing wrong behavior when lists of length


different from 1 were used as substitution element (including "null")
added possibility to have a second argument (or list of
arguments) for substitution elements

- bach.nthrandom > bach.random "seed" message now works as expected


right outlet added, outputting chosen element address
right inlet added: now works also in multi-mode (can output
more than one random element)
@maxdepth and @default attributes added

- bach.roll, bach.score maximum number of voices has been increased to 250


new "enharmonictable" attribute, allowing to define custom
accidental patterns.
faster selection mechanism
new layer-painting system: faster redraw on play and
mousehover (legend)
slot can be of type "color", with an user-friendly color
picking interface
showvoicenames attribute now works as expected
getcurrentchord message now accounts for breakpoints and
their possible velocities
added dilation rectangle: select something and press Cmd
(mac) or Ctrl (win) before releasing the mouse; you'll be able to resize and
stretch the selection
now the number of voices is an explicit attribute:
"numvoices"
now GGFF GFF GGF and GF clefs are correctly understood and
parsed
now also lower case clefs are correctly understood and
parsed, such as gf g ggff or even gfF FfG...
slots can be output from the playout with their name as
router, instead of their number
files in slot of type filelists are no more deleted if they
are not located. They are just marked with a line over their name.
brand new inspector, with bach-styled attributes for each
notation item. Use "i" (or Shift + Return) to pop it out and close it,
while selecting a notation item. This also works for
the slotinfo definitions: open a slot and then press i to pop out the inspector
brand new undo system, printing undo steps in the max
window (can be turned off in the inspector)
corrected tons of bugs and small fixes (both graphical and
substantial)
slot colors are user-definable (use slotinfo inspector to
handle them correctly)
stafflines can be dumped and undone; they can appear as a
real header object
Spring-type of spacing algorithms added
Now voices can be easily inserted or deleted by right-
clicking on the clefs and using the popup menu
Now partial slot functions are output only if the slot
window width is temporal, otherwise the whole function is output also for partial
notes
New slot type added: 3dfunction, to represent breakpoint
functions assuming values in a plane, such as (y, z) = f(x)
Now multiple synchronous operations are undone together
"solo" "unsolo" "lock" "unlock" "mute" "unmute" are also
valid messages to be sent to the current selection
"legendfontsize" new attribute
Cmd+Arrows can be used to navigate inside the score with
the selection
Use Shift+Up/Down Arrows to raise/lower notes by one octave
dragging a selection rectangle at the top of the object
also selects markers
now accept all standard incoming messages also in llll form
(e.g. "addmarker 0 foo"�)
fixed bug causing wrong assignment of durations and
velocity if pitches were NOT inserted in increasing order
play loop region feature added
play system can also play markers (@playmarkers attribute
added)
@bgslottextshift attribute added, to shift background slot
text
new attribute "rounded"
now Shift+Spacebar while playing will "pause", leaving the
playhead where it was.
"erasebreakpoints": new message
now addbreakpoint works also to change the tail (use
rel_x_pos = 1)

- bach.roll chords can be grouped, and edited together (= moved at


once) - new concept of groups
fixed bug causing weird behaviour under "quantize" message
when chords had exactly the same onset
now note tails can also be aligned
now giving first two onsets will be enough to have all
other onset spaced accordingly (as in Open Music)
now last inserted duration/velocity for each voice will be
padded if needed
"snaponsettogrid" and "snaptailtogrid": new messages to
snap thing horizontally to the time grid (of the ruler or grid)
rearranged/renamed attributes: snappitch, snaponset,
snaptail
now "addchord" works faster

- bach.score doesn't crash anymore when exporting microtones other


than quartertones (but the export is not correct anyway)
fixed bug causing crash during play when very last note had
a tie (which could not be tied to any other note, since it was the last one...)
new attributes in the "Rhythm" tab, dealing with rhythmic
trees
linear edit system added. Control+click on a measure to
start it.
marker support added. Markers can be assigned either to
measures or to an absolute time position in milliseconds
fixed bug causing weird tempo behaviour when adding
measures
now gettimeatpixel returns 1-based index, as expected
now accepts notenames also in gathered syntax

- bach.beatbox now last duration for each voice will be repeated to


pad (if other parameters are more than durations).
Outlets have radically changed! Now by default you just
have a single output to be linked to bach.score. You can still have the old
beatboximg of each separate parameter by setting an
argument "separate" when you create the [bach.beatbox] (see helpfile)
Be sure to review all your patches containing
bach.quantize!!!
now handles grace notes

- bach.beatunbox Inlets & Outlets have radically changed! Now by default you
just have a single input to be linked to bach.score's dump, and you also have a
Measureinfo outlet (for symmetry with bach.beatbox).
You can still have the old
beatunboxing of each separate parameter by setting an
argument "separate" when you create the [bach.beatunbox] (see helpfile)
Be sure to review all your patches containing
bach.beatunbox!!!

- bach.random (former bach.nthrandom)


right inlet added for the seed

- bach.ratnum output values as expected while dragging

- bach.iter now unwrap attribute can be > 1

- bach.collect now output list is always cleared with autoclear 1


fixed various bugs and crashes happening when outputting
the collection
now collections are always conunted from 1
now can correctly handle very deep llll
"wrap" attribute is not supported anymore - use "inwrap"
instead

- bach.nth () are not output for non-existing elements, unless the new
"nils" attribute is set
- bach.circle you can assign a name to each point

- bach.quantize can handle grace notes (e.g. can turn small events
into grace notes)
new easier syntax for dynamic minimal units
Smart Mix Mode added
new "autoceil" attribute
now deals with preserving the header information (clefs,
keys, �)
now by default outputs gathered syntax (inlets and outlets
have been radically changed!)
give a "separate" parameter, such as [bach.quantize
separate], in order to revert to old quantization style.

- bach.print, bach.post name attribute doesn't exist anymore - name can only
be set as an argument
now name is always correctly printed

- bach.encode the chunksize attribute now measures the number of


characters in each chunk

- bach.istruct now works properly for non-plain lists

- bach.xor renamed to bach.symdiff

- bach.symdiff, bach.union, bach.append


fixed bug potentially causing weird behavior under certain
circumstances

- bach.delace fixed bug affecting lllls in connected objects

- bach.print fixed random crashes with extremely deep lists

- bach.find fixed potential reentrancy bug with lambda loop


now lllls output from the lambda outlet have always the
size defined by the "size" attribute

- bach.is fixed potential reentrancy bug

- bach.pick now responds correctly to bang

- bach.lace now the depth of the output llll is always correct

- bach.msort, bach.sort now depth of the output list is correct

- bach.step now maxdepth attribute is correctly handled

- bach.keys fixed bug causing unfound matches in some occasions

- bach.expr fixed bug causing problems with expressions in double


quotes
fixed bug causing problems with empty sublists
new "bessel" and "mod" functions

- bach.args the order of evaluation now follows the patch hierarchy


new @attrs and @outout attributes, and new behavior for
object and patcher attributes
new @done attribute (default 0, which might break backwards
compatibility)
- bach.append new "set" attribute
"triggers" attribute now accepts a list (as in [combine])

- bach.nth fixed bug causing wrong results when 0th was requested in a
range

- bach.tree fixed wrong vertical positioning with negative maxdepths


new "separation" attribute

- bach.comb now kend and kstart can be set as arguments

- bach.repeat fixed assistance


now accepts @inwrap e @outwrap attributes

- bach.idvector also negative numbers and multiple indexes supported

- bach.sieve, bach.mapelem fixed an error message appearing at instantiation


under some circumstances

- bach.change now matchtype can be set as an attribute

- bach.prod, bach.sum now maxdepth can be set as an attribute

- bach.replace now incorrect attributes don't trigger an evaluation

- bach.histo now really works on complex lists

- bach.submatrix now inlets can be set via arguments

- bach.adj fixed error causing wrong signs in the matrix

- bach.gausselim now column indexes are 1-based, as everything else

- bach.ezmidiplay now durations are lessened by 1 millisecond, in order to


prevent scheduling compatibility errors

- bach.chordrot fixed bug causing wrong behaviour with voice-wise


lllls

- bach.maximum now numeric types are correctly preserved

- bach.filter now r and rat also select integers, and R and Rat
only select rationals

-------------------------------------

v0.6.7a

***********************
*** VERSION CHANGES ***
***********************

- bach.slot2filtergraph new abstraction

- bach.roll, bach.score new "playheaddragmode" attribute (can be absolute or


relative)
fixing bug causing impossibility to edit matrix slots
slots can be of type "filter", containing a biquad filter,
and "dynfilter" containing a dynamic sequence of biquad filters
"addslot", "changeslotvalue", "eraseslot" messages also
accept slot name instead of slot number
"showslotnumbers", new attribute

- bach.roll fixed bug causing wrong behaviour of breakpoints when


increasing/decreasing the duration of a
note preserving the absolute breakpoints position

- bach.score fixed bug causing weird spacing and values when some
accelerandi/rallentandi were given
fixed bug causing crash when asking to show tuplets with
ratios-and-figure
now play correctly works on all platforms

- bach.interp now works

- bach.geomser now typed-in maxdepth attribute works

-------------------------------------

v0.6.6a

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- all the UI objects check attribute is now saved with the patcher

- bach.roll, bach.score now vertical zoom (vzoom) is correctly saved, but you
might need to check it for the previous patches

***********************
*** VERSION CHANGES ***
***********************

- bach.roll, bach.score vertical scrollbar added


"fixvzoom" message added (to fix a zoom which used to be
automatic)
"sel" and "unsel" message added, to force select and
unselect (NON involutively, thus unlike select)
linknoteheadfonttoslot, linknoteheadadjusttoslot,
linknotesizetoslot: new attributes: handling custom font, dimensions and
adjustments for noteheads
"default" slotinfo specification added (Cmd+Alt+click will
snap to the slot default)

- bach.score "select if" now works properly (also "sel if" and
"unsel if" work)
fixed a bug causing Max to hang when playing

- bach.sort lambda outputs in text mode now work correctly

-------------------------------------

v0.6.5a
*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.roll, bach.score singleslotfortiednotes is no more an attribute: you


have to define it in the slotinfo for each slot, like (singleslotfortiednotes 0)
the default is 1.

***********************
*** VERSION CHANGES ***
***********************

now bach is fully compatible with Max6 and MaxForLive

- bach.mc2n, bach.n2mc new objects, converting midicents and names

- bach.pipe new object

- bach.defer, bach.deferlow now are objects, no longer abstractions

- most objects new check attribute

- bach.roll now alt+clicking to create a marker does not hang


now the "domain" message accepts also 3 arguments (the last
being an ending pixel pad)
adjustadditionalstartpad message added, to adjust
automatically the start pad

- bach.beatbox fixed bug causing crashes when symbols or invalid


rational were introduced as durations

- bach.score "collapse" message is now a documented feature (see


[p collapse] in the help file)
fixed bad thread issue causing crashes when reconstructing
in high priority
fixed some memory leaks
fixed hang due to clicks while playing
fixed bug causing wrong play on synchronous chords in
multiple voices
(width �) attribute inserted in measureinfo to specify a
fixed measure width
showbarlinelocks: new attribute
Cmd+L on measures barlines will lock/unlock the measure
width (similarly for Cmd+Shift+L on measures)
> IN GENERAL: measure attributes (width, widthfactor,
barline, shownumber) have been arranged.
You can thus show different numbers of measures
or turn them off for a single measure;
barline is indeed now a measure attribute, yet
backward compatibility is preserved
setmeasureparameters: new message
measurenumberfontsize: new attribute
showmeasurenumbers is now a list of numbers (one element
for each voice), so you can show measure numbers on first voice only, if you need
drawbarlinesacrossstaves: new attribute
- bach.roll, bach.score fixed ledger lines for some particular clefs (F8,
G8�)
now velocity = 127 is correctly taken into account
fixed bug causing crash while changing text slot from
message
corrected bug causing slight loss of precision while
setting domains
"showledgerlinesforauxstaves" does not exist any more,
> it has been replaced by "showledgerlines"
attribute, which can have 3 values (Never ForMainStaves ForMainAndAuxStaves)
new "stafflines" attribute to customize staff lines
new complete lyrics support, with all the needed lyric
attributes (see abstraction [lyrics] in roll or score's help)
new vzoom attribute (Auto = default, but a fixed value can
be defined as well)
RGBA colors can be assigned note-wisely, via a floatlist
slot
now filelist slot will search in the search path for a
given file (and not only with absolute paths)
function and spat slots may now have custom domain (and not
only 0 to 1), and also domainslope
improved stability of the behavior with setclock
mousehover: new attribute to deal with mousehovering on
function slot points (by default it is activated)
automessage attribute doesn't hang any more on loops
keeping Ctrl+Shift pressed while dragging a note up or down
will preserve the note voice
added specific labeling to querying messages
senddoneatstartup now works properly
'done' is sent also after read message
corrected bug causing wrong approximations when notes with
graphic information were dragged among voices (only in particular staves
configurations)
PWGL import/export now works properly with all

- bach.ratnum fixed bug causing wrong behaviour when "list"


messages where sent
now is properly compatible with preset object

- bach.portal fixed assistance

- bach.primeser fixed assistance

- bach.tree fixed bug causing weird dashed lines in some particular


cases (involving nil lists and @maxdepth attribute)

- bach.write removed useless out attribute

- New tutorial: "Slot Machines"

---------------------------------------

v0.6.4a

- bach.roll now alt+clicking on duration line doesn't hang any more

- bach.score now ties are restored properly when saved


correct play weirdness (some notes in particular situations were just
not played)
now time signatures display properly also with Proportional spacing
pixel to ms conversion works again with full rest measures.

---------------------------------------

v0.6.3a

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- bach.collect new "autoclear" attribute (defaults to 1)

- bach.args backtick attribute now defaults to 0

***********************
*** VERSION CHANGES ***
***********************

- bach.roll, bach.score, bach.ratnum, bach.circle, bach.graph


now work in Windows XP

- bach.transcribe new abstraction

- bach.chordrev, bach.chordrot now @triggers works properly

- bach.score, bach.roll, bach.ezmidiplay


support for setclock added

- bach.ezmidiplay now really starts from channel 1


new "noteout", "maxpitchbend" and "adjustpitchbend"
messages

- bach.roll, bach.score brand new play engine


fixed a large number of possible thread-safety issues
new attribute "playpollthrottle" determining the maximum
number of chords output per scheduler event while playing
now Shift+Spacebar only plays selection
fixed bug causing unsaved solo patterns
"automessage" attribute added

- bach.roll now markers cannot have negative onset

- bach.score fixed bug causing wrong measure width when barlines


were dragged
local spacing (widthfactor) support improved and documented
new "resetwidthfactors" message
new "Proportional" spacing type (beside Smart and
Note/TimeSignature), placing chords exactly proportionally to their onsets
Spacing algorithms have been widely improved
"additionalstartpad" attribute added (similarly to
bach.roll)
- bach.collect new "autoclear" attribute (defaults to 1)

- bach.reshape now is an external, no longer an abstraction


---------------------------------------

v0.6.2a

*****************
*** IMPORTANT ***
*****************

*** THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES ***

- most objects backticking of potential attributes in text-mode


lllls is updated to include all the current release's attributes

- bach collect a single typed-in argument is now considered number


of collectors (no longer nullmode)

- bach.args new backtick attribute (default: 1)

- bach.collect old "wrap" attribute is called "inwrap"!!

- bach.roll, bach.score, bach.tree, bach.graph


the "savedatawithpatcher" attribute has been renamed to
"embed" (default 1)

- bach.roll playmode is now by default notewise (as for bach.score)

- bach.roll, bach.score retranscribe and retranscribeselection messages have


changed behaviour!!!
Now they behave like "clearselectiongraphics", which
in turn does not exist any more - i.e.,
they automatically set a standard accidental
representation for the note.
If you want to preserve their ancient behaviour, i.e.
to snap pitch to microtonal grid,
consider using the new "snapallpitchestogrid" and
"snappitchtogrid" messages.
no keys are assigned to slots by default, except for the
number keys 1, 2, 3,�
if you need to assign 'a' to slot 1 or similar
combinations, please do it explicitely by sending (slotinfo (1 (key a)))
now last element of gathered syntax for each voice is a
flag (exactly like the note/chord/measure flag)
take it into account when cycling over chords in
gathered syntax: a [bach.filter l] can help you.
now interpolation for spat-slots (4th parameter of each
spat-point) is defined by the ENDING point of the segment (as for slope)
new senddoneatstartup and senddoneafterpaint attributes
have been added (both by default 1):
now objects send (by default) the "Done" llll also at
startup (if some data was saved in the object)
and by default they do this not after the object is
rebuild, but after the object is repainted (thus a bit later!)
you can change those functionalities via these
attributes

- bach.score spacing algorithms have changed.

***********************************
*** IMPORTANT INTERFACE CHANGES ***
***********************************

*** THESE CHANGES WON'T BREAK COMPATIBILITY WITH OLDER PATCHES, BUT WILL CHANGE THE
WAY TO INTERACT WITH GRAPHICAL OBJECTS ***

- bach.score now Cmd+Clicking (mac) or Ctrl+Clicking (win) on a


measure will create a measure in ALL voices.
Use Cmd+Ctrl+Click to add a measure in a single
voice; add Shift to add a measure BEFORE the clicked measure.

- bach.roll copy/paste is possible for selected notes and chords (also


across different rolls).
Select chords, press Cmd+C, then Cmd+V to paste in the same
place, or Cmd+Shift+V to paste at mouse position

- bach.roll, bach.score To edit a text or llll slot, double click on it. Use
Shift+Click to open external editor!
When a slot window is open, use Cmd+doubleclick (mac) or
Ctrl+doubleclick (win) to delete the whole slot content.
double click on voice names, marker names, text or llll
slots to edit them
right click on voices, measures, notes, selections,
barlines, background to open the contextual menu
shift+drag a barline to increase measure width, select the
barline and shift+Backspace to revert to default spacing

***********************
*** VERSION CHANGES ***
***********************

- most objects fixed behaviour of bang after an attribute change -


got broken in 0.5
(now an attribute change affects the output message
upon bang)
improved assistance for llll outlets (format is displayed
in the assistance balloon)
now the behaviour of the out attribute is well defined even
if not all the llll outlets are specified
(see the "outlets" subpatch in bach.overview)
fixed mistakes in several the assistance of several objects

- bach.collect new inwrap and outwrap attributes (inwrap replaces


the old wrap attribute, which is still accepted nonetheless)
now supports multiple collectors

- bach.ratnum now outputs data while mousedragging


new "autoreduce" mode (default 1)
new "reduce" message

- bach.slot2function, bach.combinevoices
new abstractions

- bach.ezmidiplay fixed microtonal behaviour for (and weird messages in the


max window)
fixed help file

- bach.normalize fixed behaviour with zero input


added outlet for bang when norm is 0
- bach.nthrandom now accepts a llll as argument, and bang works properly

- bach.roll, bach.score fixed bug causing wrong slot width for NONE-type
slots at the initialization
return key now sets the cursor at the beginning
dragging the playhead cursor now scrolls the score
accordingly
domain is correctly output upon play or
inscreen/inscreenpos messages
new voicenames attribute: now voices can have names
it also entails the new voicenamesalignment
voicenamesfontsize showvoicenames attributes
and you can doubleclick on the name (or at the
beginning of a voice if there's no name) in order to modify it
now subscore can dump keys too
popup menus have been defined for
clefs/keys/notehead/measures. Right-click on them to pop them out.
rightclickslot attribute added, to directly popup a slot
with the right click
midichannels are now a real attribute in the inspector
(like clefs and keys)
the attributes in the inspector have been re-categorized
new "lambda" message accepted; you can now dump a whole
bunch chords or notes, but still change each one of them separately
via the usual change commands ("cents" "onset"
"duration" "addslot" "changeslotvalue" and so on)
just add a "lambda" before them to make them act this
way: "lambda cents" "lambda onset"...
continuouslyoutputbangifchanged attribute added. By default
it is 0, if it is 1, a bang through the last inlet is sent also while mousedragging
new slotbgfontsize attribute (default 7)
support added for clefs: G8, F8, G15, F15, Soprano, Mezzo,
Alto, Tenor, Barytone, Percussion
improved voice interface and selection; now voices can be
locked and muted too
new solo mode introduced; things can be also "soloed"
by default dblclicksendsvalues is now 0 (no more 1)
new "markersfontsize" attribute
clefcolor attribute now works properly
solved issues in chord appearance when particular graphic
extras were defined (e.g. chords like D# Ebb)
improved accidentals positioning
"showplayhead" is now a real attribute
"getcurrentchord" message added
"snappitchtogridondrag" is replaced by
"snappitchtogridwhenediting" (so it snaps also on mousedown)

- bach.roll solved bug causing crashes when "addchord" or "gluechord"


with no arguments was sent
corrected bug causing wrong behaviour when addchords was
sent
now addchords work properly with extras too
(-> bach.quantize) fixed bug causing wrong output after "quantize"
command note loss when two notes had the
same onset without being in the same chord
new "select chord" message to select the nth-chord in the
mth-voice: "select chord <number> <voicenumber>"
new "legato" (or "tail legato") message to change the tail
in order to have a precise legato
ruler has now a rulermode attribute, which can be set on
"Smart" to adaptively choose zoom resolution.
-> Work best with rulerlabels on!
equally respace onsets now work properly also with
selection spread in different voices
"select note if" message added for conditional selections,
e.g. "select note if (onset < 2000) && (cents > 6000)"

- bach.score fixed labeling for ruler


ceilmeasure message added, in order to get all the voices
have the same number of measures
fixed bug causing wrong queried cursor position with whole
measure rests
fixed bug causing impossibility to popup tempo over chords
improved MusicXML exportation (less mistakes and crashes) -
this remains an experimental feature nonetheless
now breakpointshavevelocity works as it should
measure range is selected just selecting the first measure
and Shift+selecting the last one.
Use Ctrl+Shift+click to select individual measures
double click on a measure to select the whole vertical
block
new "legato" message added
new "showsynchronoustempionce" attribute (to show equal
tempi on all voices just in the first voice)
fixed bug causing crashes when wrong time signature were
introduced
corrected graphical synchronization when
accelerandi/rallentandi were given differently for each voice
new minmeaswidth and minmeaswidthpersymunit attributes
new inscreenmeas message, to exactly show in the screen a
range of measures
you can shift+drag a barline to increase measure width,
select the barline and shift+Backspace to revert to default spacing
you can define a "widthfactor" attribute in the
measureinfo, e.g. ((4 4) (70) (widthfactor 1.5))
cursor position retrieving and setting has been fixed
(didn't work with full measure rests)

- bach.quantize fixed bug causing hangs when minimalunits were


dynamical, but no dynamicalminimalunits were inserted
implausible minimal units can no longer be input (like 0/0,
0/2, foo, 7.92)
fixed bug causing weird approximations as output (some
small notes were much longer when quantized)
fixed memory leak
corrected approximations when rallentandi/accelerandi were
given in measureinfo
allow and deny message added
now minimal units can be voice-wise assigned

- bach.keys new keep attribute

- bach.zsearch now works properly

- bach.tree attributes have been recategorized


new outputllllnames and unwrap attributes
- bach.circle showpolygon new attribute
now velocity can be handled via circle size
now has preset support

- bach.args new "backtick" attribute


help file now covers all the attributes

- bach.sieve spurious "done" messages are not output anymore

- bach.expr when the expression is constant, bang returns its value

---------------------------------------

v0.6.1a

*****************
*** IMPORTANT ***
*****************

THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES

- the bach.removeheader abstraction (introduced in v0.6a) no longer exists; a


[bach.sliceheader] abstraction exists instead.

- bach.post if one argument is supplied, it is considered name (no


longer maxdepth)

- bach.slot2line, bach.slot2curve
added 3rd inlet for setting default argument, so lambda
inlet is now number 4!

- bach.ezmidiplay
now is capable to deal with microtonality. To accomplish
that, the "message to noteout" inlet (which used to be the 2nd)
has been shifted to the third place. Please verify your
patches, should you have used that inlet.
Second inlet (or argument) is now for microtonal grid; an
outlet has been added to deal with the number of free channels.

***********************
*** VERSION CHANGES ***
***********************

- bach.tree new external

- bach.sliceheader, bach.matrixctrl2m, bach.dl2line, bach.dl2curve, bach.defer,


bach.deferlow
new abstractions

- bach.slot2line, bach.slot2curve
added 3rd inlet for setting default argument

- bach.removeheader does not exist anymore

- bach.print, bach.post new maxdecimals attribute


name attribute is correctly displayed in the inspector,
even if none is supplied
- bach.post if one argument is supplied, is considered name (no longer
maxdepth)

- bach.keys fixed bug causing non-retrieval of keys in some occasions

- bach.mcapprox now works as it should

- bach.step, bach.collect, bach.portal


fixed assistance

- bach.score, bach.roll fixed bug causing wrong keys upon copy-paste


getvoicepixelpos message added, to retrieve the vertical
position of each voice
gettimeatpixel message added, to retrieve the ms (and
measure/points in measure) starting from pixel positions
number of possible voices has been increased to 35
fixed bug causing wrong interface behaviour with
floatmatrix and intmatrix slots
bach no longer crashes is a score with more than the
possible number of voices is input
slots now have width defined in the slotinfo; by default
function or spat slots have temporal width
(i.e. their slotwindows follow the duration lines),
all the others have fixed widths.
You can obviously change them by defining your custom
slotinfo, e.g. (slotinfo (1 (width 30))) or (slotinfo (5 (width temporal)))
new attribute: showledgerlinesforauxstaves, by default 0
(different from what happened up to 0.6!!!), to handle the painting
of ledger lines between the auxiliary staves and the
main staves
range changes in slots no longer give problems to existing
data (existing data is clipped if needed)
ruler, grids and labels are now at your disposition. See [p
ruler&grid] in the help files.

- bach.score fixed bug causing wrong cursor output


now keys are output when "score2roll" message is sent
fixed bug concerning partial note play
ruler and grid are added. this implies some new attributes:

"ruler", "grid", "gridperiodms",


"numgridsubdivisions", "rulercolor" "gridcolor", "subdivisiongridcolor"
fixed bug causing loss of undo steps when dealing with
breakpoints

- bach.roll fixed bug causing wrong chord gluing upon gluechord command
subroll now dumps also partial notes. put "onset" as first
argument to avoid this
now you can stretch a note without stretching accordingly
its temporal content (breakpoints, slots of type function) by using
- Alt + click and drag the tail
- Alt + left/right arrows if the tail is selected
- select the note and then Ctrl+Alt+left/right arrows
(in these 2 cases Shift works as usual to make
changes faster)

- bach.is, bach.contains added right outlet for symbolic output

- bach.filter now accepts symbolic descriptions of types


- bach.repeat fixed behavior when no argument was set and @out t
was set

- bach.primeform fixed bug causing crashes when "getlist" message was sent
with no arguments

- bach.mod* new nickname for bach.modtimes

- bach.mod+, bach.mod*, bach.mod-


fixed behavior with a single attribute

- bach.perm solved bug causing crashes all the time

- bach.expr now sgn operator works correctly

- bach.sort, bach.msort fixed memory leak

---------------------------------------

v0.6a

***************************
*** EXTREMELY IMPORTANT ***
***************************

THINGS THAT WILL BREAK COMPATIBILITY WITH OLD PATCHES:

- most objects:

Since this version, everything that can be counted is counted starting from 1. This
includes elements, inlets, outlets, the base for bach.msort and so on. For example,
if you used to write [bach.nth 0], you'll have to switch to [bach.nth 1] to take
the 1st element of a llll.

This breaks compatibility with:


- bach.nth
- bach.pick
- bach.lookup
- bach.insert
- bach.subs
- bach.append (only as far as the @triggers attribute is concerned)
- bach.nsubs
- bach.ninsert
- bach.submatrix
- bach.getrow
- bach.getcol

And might break compatibility with some objects outputting paths (if you used the
path outlet):
- bach.minmax
- bach.iter
- bach.step
- bach.find
- bach.sort
- bach.msort (base has changed)

Please notice that if you objects in combinations (like bach.find and then
bach.subs) the compatibility should be preserved.
- bach.find, bach.ezfind
bach.ezfind NO LONGER EXISTS: bach.find has one more outlet, and thus makes
the task of both objects:
left outlet is for Found Data, middle outlet is for Found Addresses
Please consider searching in your patches all the occurrences of bach.find
and bach.ezfind in order to re-cable them properly.

- bach.mapelem
"pick" attribute is now called "unwrap" attribute, for compatibility with
[bach.pick]

- bach.flat
new minlevel and maxlevel attributes. maxdepth attribute doesn't exist
anymore (maxlevel replaces its behavior)

*****************
*** IMPORTANT ***
*****************

- new installation procedure for the OSX version. Administrator privileges are
required. It is strongly recommended using the automated installer.

THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES

- slotinfo, midichannels and commands are by default no more output upon dump.
You can use the new sendslotinfothrougdump, sendcommandsthroughdump,
sendmidichannelsthroughdump attributes to restore this behavior

- bach.geomser now really provides as a geometric series (starting from a seed,


with a factor, until a certain limit).
Syntax is COMPLETELY changed, so please have a look to your patches which
were using it.

- bach.quantize, bach.beatbox autoclear attribute added, default 1: if you DON'T


want to clear the linked score, please set explicitly @autoclear 0

***********************
*** VERSION CHANGES ***
***********************

- bach.read, bach.score, bach.roll


fixed read in native format (got broken in v0.5)
now can read text-format llll files of arbitrary length
new, safer format for native llll files. backwards
compatibility is maintained.

- bach.iter, bach.step new unwrap attribute

- bach.times now can be called bach.*

- bach.div now can be called bach./

- bach.filter has a right outlet for rejected lllls

- bach.expr now random outputs a different value at each evaluation


- bach.collect new wrap attribute

- bach.append new inwrap and outwrap attributes

- bach.rot new maxdepth and mindepth attributes

- bach.contains, bach.find, bach.keys, bach.minmax, bach.post, bach.rev,


bach.scramble
new mindepth attribute

- bach.slot2line, bach.slot2curve
new lambda inlet/outlet

- bach.mapelem now accepts maxdepth and spikemode as messages


now accepts a @pick attribute and message to automatically
wrap and unwrap elements (see help)
fixed bug causing wrong behavior with @out t attribute

- bach.replace fixed bug causing "null" output when there was


nothing to replace
[this affected bach.tierev as well]

- bach.find, bach.union, bach.intersection, bach.xor, bach.diff, bach.sort


now lambda inlet accepts native-format lllls as well

- bach.find, bach.union, bach.intersection, bach.xor, bach.diff


fixed bug potentially causing data corruption with the
lambda outlets in native mode

- bach.getrow, bach.getcol new abstractions

- bach.quantize, bach.beatbox autoclear attribute added, default 1

- bach.ker now the "makeunitary" attribute works properly

- bach.arithmser fixed a bug causing wrong number of element in output


now arguments are really optional

- bach.geomser abstraction has been completely rewritten: now


provides real geometric series

- bach.append "pak" mode now works (and the corresponding


"triggers" attribute value is now 0)

- bach.portal @out p works with Alex Harker's dynamicdsp~ and


dynamicserial~

- bach.args fixed bug causing the default arguments not to be output in


some random occasions
now works inside Alex Harker's dynamicdsp~ and
dynamicserial~

- bach.find size attribute is automatically adjusted


unwrap attribute added

- bach.roll, bach.score llll slots now work properly also via the interface
editor
there's a new user-friendly syntax for slotinfo. Old syntax
is still accepted in input for compatibility.
in function slots, you can decide elements to be snapped
to. Define, e.g. (slotinfo (1 (ysnap (0 64 127)))),
fixed bug causing crashes upon dragging of locked notes
sendslotinfothrougdump, sendcommandsthroughdump,
sendmidichannelsthroughdump attributes added:
now the data out of the first outlet by default is
just the RAW object data:
if one wants some of the headers to be output, just
set the proper attribute to 1
now matrix slots work properly also if num cols != num rows
then dragging a point with Shift+Alt pressed will
force the point to be on one of those snap values.
now zooming with Cmd+Mousewheel preserves the mouse
position point
Shift+click on the keys and drag to respace voices
(Ctrl+Shift+Click to handle space AFTER voices)
Cmd+Shift+click on a slot window to delete the whole slot
content
for llll-slots: "null" does not appear in slot editor for
null lolls
changes in a roll/score set the patcher dirty flag (then
ask to save when the patch is closed)
dump mechanism have changed. No more "Send � through dump"
attributes are present, but you can send a complex dump command, like
"dump" -> dump all
"dump body" -> dump body only
"dump keys midichannels body"
"dump keys clefs" �
subroll and subscores messages change accordingly, adding
as a last (optional!) parameter a list of things to dump, e.g. (keys body)
dragging notes outside the object window is no more
possible

- bach.roll fixed a bug causing wrong "quantize" output when polyphony


was in a voice
fixed bug causing wrong interface when additionalstartpad
was used
addchords message added
correct thread bug when dealing with partial note play
gluechord message added

- bach.score fixed bug causing wrong cautionary accidental


handling
fixed bug causing crashes upon contemporary mousewheel and
measure adding

- bach.args new "mode" attribute


"mode" and "nullmode" attributes are no longer output from
attribute-style arguments outlet

- bach.print symbols are no longer backticked

- bach.toc&r corrected behavior upon bang

- bach.chordrev now maxdepth is ignored and automatically computed

- bach.ninsert now works properly also when the insertion elements


and position are null (--> nothing happens)
[this affected also bach.fromc&r]

- bach.fromc&r, bach.toc&r, bach.chordrev, bach.tierev, bach.restrot, bach.chordrot


now works also for voice-wise lists

- bach.graph now plots user defined points


now shows points as vectors

- bach.keys, bach.find fixed memory leak

--------------------------------------------------------------------

v0.5a

*****************
*** IMPORTANT ***
*****************
THESE CHANGES MIGHT BREAK COMPATIBILITY WITH OLDER PATCHES

- the format for text lllls has slightly changed. see the "elements" subpatch of
bach.overview for more details
- a middle inlet has been added to bach.find, bach.ezfind, bach.replace,
bach.sieve.
- bach.iter and bach.step: the possible values and behaviors for the spikemode
attribute have changed (see help files).
- bach.wrap: the default for the levels attribute is now 1

***********************
*** VERSION CHANGES ***
***********************

- all objects slightly changed format for text lllls.


now out attribute can be changed after object instantiation
fixed memory leak with disabled outlets
fixed general thread-safety issue

- bach.encode, bach.decode new externals

- bach.mapelem, bach.scale, bach.m2matrixctrl, bach.normalize, bach.slot2line,


bach.slot2curve, bach.tierev, bach.median
new abstractions

- bach.roll, bach.score, bach.write


now "Untitled.txt" default file name appears when sending
message "writetxt"

- bach.score, bach.roll key signatures support added (via "keys" attribute)


getdomainpixels message added (to retrieve the screen pixel
domain)
getpixelpos, dumppixelpos messages added (to retrieve the
pixel positions of a precise timepoint or of all chords)
domain changes now are automatically notified via the
playout (just like playcursor positions)
added some slot types: llll, intmatrix, floatmatrix,
togglematrix
use Shift+Cmd (mac) or Shift+Ctrl (win) to perform finer
adjustments (pitch, position, length)
fixed "clear" message when a voice argument is given
fixed bad bug causing crashes when text slot were used
fixed bug causing play not to play if intervals between
events were very small (~ 2ms)
fixed bug causing latin "sol3", "sol4", ... to be parsed as
"sol0" (thanks to Paolo Aralla)
getvzoom message added
fixed bug causing wrong screen appearance upon "cents"
command if user accidentals were used
no dialog box opens when closing a text slot's editor
dragging and copying via Alt+drag shouldn't have weird
behaviors any more

- bach.roll additionalstartpad attribute added

- bach.score fixed bug causing wrong accidentals if "Always" or


"AlwaysNoRepetitions" was selected as accidentalpreferences
"domain" and "testdomain" message added
articulations are supported. see [p articulation] in
score's help
fixed bug causing wrong tempi positioning over notes
fixed bug causing unrequested scrollbar disappearence
fixed big memory leak

- bach.expr fixed serious bug causing crashes at instantiation

- bach.expr, bach.graph % 0 now works correctly (doesn't crash anymore!)

- bach.graph fixed bug causing "freeobject" appearances in the max


window

- bach.delace, bach.mdelace fixed bug causing random crashes

- bach.lace fixes memory leak

- bach.intersection, bach.diff, bach.xor


fixed assistance

- bach.union, bach.intersection, bach.diff, bach.xor


now work properly with any kind of equality expression

- bach.sort, bach.msort, bach.find, bach.union, bach.intersection, bach.diff,


bach.xor, bach.ezfind, bach.sieve, bach.replace, bach.removedup
when no comparison result is provided, a default comparison
function is used (<= for sort and msort, == for all the others)

- bach.find middle inlet added - this may break compatibility with


older patches
accepts standard comparison llll as its argument
op and recursive attributes added
fixed memory leak

- bach.sort, bach.msort order attribute added

- bach.ssort fixed order attribute

- bach.wrap levels attribute defaults to 1 - this may break


compatibility with older patches
- bach.length, bach.depth fixed potential thread-safety problem

- bach.args new nullmode attribute (fixes a problem in some


abstractions)

- bach.portal now attributes other than out can appear in the


containing object box, without causing errors in the Max window

- bach.step fixed maxdepth attribute

- bach.iter, bach.step the possible values and behaviors for the spikemode
attribute have changed (see help files)

- bach.print, bach.post now display "bang" when a bang is received (instead


than re-displaying the previous llll)
name attribute now is displayed in the "object" column of
the Max window (experimental!)

- bach.keys new "nullmode" attribute


new behavior with null keys
fixed assistance
fixed memory leak

- bach.minmax fixed memory leak

- bach.append fixed attribute labels

- bach.ratnum various bugs fixed, now the text editing works


properly, and the scroll is allowed too.

- bach.ezfind, bach.replace updated to the new features of bach.find (new


argument and attributes)

- bach.grouplist now typed-in argument works correctly

- bach.filter now accepts negative filters, for "let through


everything but"

- bach.mod+, bach.mod-, bach.modtimes, bach.pcsetinfo, bach.compl


now work properly

- bach.pc2mc, bach.mc2pc now work properly

- bach.removedup now works properly

All help patches have a "See also" field

===================================================================================
==

v0.4a

- New set of matrix-calculus tools:


externals: bach.minfo, bach.diag, bach.trace, bach.submatrix, bach.mtimes,
bach.gausselim, bach.linearsolve, bach.adj, bach.extractbasis, bach.eig
abstractions: bach.det, bach.rank, bach.inv, bach.mrandom, bach.m2jitcellblock,
bach.idmatrix, bach.ker, bach.im, bach.wellshape, bach.mpow, bach.norm
- New set of set theory tools:
externals: bach.circle, bach.primeform, bach.ivec, bach.zsearch
abstractions: bach.mc2pc,bach.pc2mc, bach.istruct, bach.ifunc, bach.mod+,
bach.mod-, bach.modtimes, bach.pcsetinfo, bach.compl

- bach.graph new external

- bach.args new external

- bach.histo new abstraction

- bach.abs, bach.ezmidiplay, bach.mcapprox, bach.prod, bach.gcd, bach.lcm,


bach.bin, bach.fact, bach.coprime, bach.coprimeser, bach.replace
new abstractions

- New tutorial on matrix calculus

- bach.post, bach.contains, bach.rev, bach.iter, bach.step, bach.find, bach.minmax,


bach.flat, bach.scramble
changed maxdepth meaning for negative depth

- bach.score collapse message added


changecentstomeasuresbydragging is now by default 0
alt+cmd+click on a measure to insert a measure BEFORE the
clicked measure
fixed a bug causing wrong selection if "select" was used
with milliseconds arguments
setcursor accept also measure/pointinmeas/voice syntax
fixed bugs with inscreen message
setcursor syntax has changed: like inscreen, it is
"setcursor <ms>" or "setcursor (<measure>, <pointinmeasure>, <voice>)".

- bach.roll fixed bug causing crash upon duplication of a subset of


notes of a single chord
fixed bug causing bang on last output even when things were
not changed

- bach.score, bach.roll default tone division is now the semitone


vertical dragging has been improved
PWGL import/export added
fixed bugs causing weird dragging
showfocus attribute added (show focus with a thicker
border)
bordercolor default have changed (bug has been fixed)
inscreen command fixed
inscreenpos command added
now velocity can also be handled via durationline-width
now breakpoints and note tails can have a velocity
IMPORTANT INTERFACE CHANGE: use Ctrl+Shift+Click&drag
(mac) or Ctrl+Alt+Shift+Click&drag for breakpoints slope change!
Ctrl+Click&drag (mac) or
Ctrl+Shift+Click&drag (win) are always reserved for velocities!
Shift + Tab can be used to pass from one slot to the next
(Shift+Alt+Tab to scroll "backwards")
"slotsinbackground" attribute added
fixed bug causing crashing using text slots
- bach.filternull @out t now works, bach.portal was missing

- bach.quantize fixed bug causing wrong ties across boxes


added "quantizationpriority" attribute (see help ->
attributes)
fixed bug causing wrong output if more small rests were
given in a row

- bach.unpacknote fixed bug causing wrong output if a rest was explicitely


dumped via Cmd+V (mac) or Ctrl+V (win)

- bach.expr fixed bug causing wrong results with empty sublists


fixed bug causing Max to hang when changing expression
twice
fixed bug possibly (though very rarely) causing wrong
results from == and !=
added === and !== operators
now deals with symbols as well

- bach.append now accepts negative triggers attribute

- bach.minmax now maximum is always correct

- bach.keys fixed bug causing the input llll to be beheaded in some


cases
fixed thread-satefy bug

- bach.portal fixed bug causing wrong list to be output in some


cases

- bach.trans now works with an empty input llll as well

- bach.sort now works with different-typed comparison outlets as well

- bach.post now depth dots are always correctly displayed

- bach.contains now works correctly with maxdepth

- bach.step, bach.length, bach.depth, bach.expr


fixed assistance

- bach.print is now an external

- bach.rot, bach.rev, bach.mdelace, bach.scramble, bach.wrap


now all @-syntax attributes are correctly parsed

- bach.repeat now @out attribute works correctly

- bach.score2roll now works properly...

- bach.lookup works properly upon bang, and finally has its own
help file!

- bach.grouplist now is included in the overview, and has its own help file!

- bach.f2mc fixed help file


===================================================================================
==

v0.3a

- all objects new, faster and safer mechanism for llll


communication
now +, - and . are correctly parsed as symbols (rather than
0s) in text lllls.

- bach.quantize new external

- bach.trans new external, similar to the "bach.mattrans"


abstraction

- bach.portal added "readybang" outlet and double-click


now @out p also works inside poly, pfft~ and bpatcher

- bach.post fixed "name" attribute

- bach.lace fixed a bug causing crashes with empty lists

- bach.insert fixed a bug causing bad things when dealing with


lllls with range

- bach.read now accepts drag'n'drop

- bach.score new "addmeasures" command to append measures at the


end of a score
spacing improved
fixed a bug causing accidentals to hide if a note with the
same accidental was "tied-from" at the beginning of the measure
keep Control key (mac) or Shift+Ctrl (win) pressed to
select a whole range of measures
corrected a bug concerning maxdots attribute
tieassignpitch attribute now is more correctly named
"tieassignspitch"

- bach.roll, bach.score added "shownotenames", "notenamesstyle",


"middlecoctave" attributes
can use symbolic note names instead of cents

- bach.write, bach.expr, bach.iter, bach.step


fixed memory leaks

- bach.find fixed assistance

- new Tutorial 13 (c)

===================================================================================
==

v0.2.3a

- bach.score fixed a huge bug causing crash upon selection in some


situations
measures can be copied and pasted

- bach.roll, bach.score fixed a bug causing data loss on spat-type slots


slots now can be copied and pasted
some graphical changes
there's legend on breakpoints selection
fixed a bug causing wrong load or undo step if the first
voice was completely empty (and successive voices had data)

- bach.msort fixed bugs in the help file

===================================================================================
==

v0.2.2a

- all objects now also work on PPC and OSX 10.4


fixed a bug causing Max to crash if bach was not correctly
installed
now double quotes and backslashes within symbols are correctly
dealt with

- bach.score added showbarlines, showtimesignature, measurenumberoffset


attributes
fixed a bug in show_tempi attribute concerning the first tempo
changed mouse cursor in function-slot points

- bach.sort, bach.msort now also work with native output.

- bach.sort: fixed assistance

- bach.<, bach.<=, bach.>, bach.>=


now don't post "invalid message" when not necessary

- bach.reg now works with llll given as argument

- bach.read added auto attribute

- bach.removedup now works

===================================================================================
==

v0.2.1a

********************************************
*** KNOWN BUGS AND OTHER IMPORTANT STUFF ***
********************************************

*** Sonora and Tempera Fonts are no longer supported ***


*** They might work fine on your computer, but we cannot guarantee. ***
*** Please install Boulez and Accidentals as default, instead ***

*** symbols containing double quotes are not correctly parsed, please avoid them
***

***********************
*** VERSION CHANGES ***
***********************
- all objects Windows version
fixed memory leak with text input

- bach.read, .write, .roll, .score


now correctly save and retrieve arbitrarily large data sets

- bach.roll and .score fixed a bug preventing from repaint upon mousewheel
fixed a bug causing wrong first amplitude slot output in the case
of a played partial note
fixed small bug causing slotwindow to remain painted upon clear
added "sendcommand" message (send nth i-th command to the
selection)
fixed a bug causing wrong voice placement or rest transformation
upon drag (for very low notes on the staff)
fixed thread safety bugs
fixed some memory leaks (ram increased while redrawing and
calculating)
added "linknotecolortoslot" attribute
default velocity value is now 100 (and no more 127)
added the "sendclefsupondump" attribute (handling the clefs
reconstruction)
when import/export/read/write, clefs are saved with the data (as
a new part of the header)
some optimization has been done
play improved with float-millisecond precision
improved interface and selection system
measure numbers now are 1-based
removed data size limitation in preset saving

- bach.roll: fixed a bug of partial-note-playing when a chord was


played, starting from somewhere inside the chord tail (the chord was output more
than once)
fixed a bug of reconstruction in the case of a voice completely
empty (the following voice where not at the right places)
fixed small bug causing creation of a dummy note if an "addchord"
message was given with the flag parameter (locked/muted parameter).
fixed a bug in the "equally respace selected chords" function
(Cmd+F)

- bach.score: fixed a bug of note selection when clicking on note (and


when horizontal zoom != 1)
the tempo popup over a chord is now done via Alt+Shift+click

- bach.step: fixed a bug causing Max to hang with bad lllls

- bach.post: now level is displayed correctly (thanks to Jeremy Garcia)

- bach.reg: added embed attribute (saves data with patcher)

- bach.delace, mdelace: now behave consistently with count = 1 (thanks to Serge


Lemouton)

- bach.expr: added sgn function

- bach.ninsert, bach.toc&r, bach.chordrot, bach.restrot:


fixed bugs causing wrong behavious upon bang in the left inlet,
if something had changed in the right inlets
- bach.score2roll: correct a huge bug in the abstraction (due to the addition
of the "commands" possibilities, it almost didn't work at all, not even the help
file).

- bach.chordrot,
bach.restrot: fixed behaviour upon bang

- bach.mattrans now works correctly with lists of depth > 2

- new tutorials: Tutorial 15 - Additive Synth (a,b,c)


Tutorial 10b - Simple Quantization (b)

- new abstraction: bach.nsubs

===================================================================================
==

v0.2a
- most objects: removed double output for lllls
- most objects: added out attribute
- most objects: changed output format for native lllls
- fixed and added several abstractions
- fixed a ton of major and minor bugs
- abstractions now have bach. prefix instead of llll.
- added collection of tutorial patches
- bach.roll: undo/redo is allowed (20 steps).
"select" command introduced (voices, start_ms, end_ms as arguments)
changed graphical parameters recomputation policy
"merge" command introduced
*** known bug: Sonora Font may not work ***
"Boulez" font supported (freely downloadable at
http://www.musicabella.com/boulez/)
"Engraver Font Set" font supported
"Petrucci" font supported
Save Data With Patcher attribute
added lock and mute mechanisms
added "playselection" command
improved message functionality (selection handling/modifying)
up to 5 user-definable commands introduced
graphcal slope algorithm changed
- bach.sort added outlet for indices
- bach.msort added outlet for indices
- bach.find added idxreject, depthreject and maxcount attributes
- bach.iter added stop inlet
- bach.expr now inlet number is variable
expr message is now threadsafe
- bach.append added triggers attribute
- bach.collect now clearall works correctly if an invalid collection is selected
- bach.pick now assistance gives meaningful information

new externals: bach.beatbox, bach.beatunbox, bach.delace, bach.diff,


bach.factorize, bach.intersection, bach.keys, bach.lace, bach.mdelace, bach.portal,
bach.prime, bach.primeser, bach.ratnum, bach.read, bach.score, bach.scramble,
bach.slice, bach.step, bach.union, bach.write, bach.xor

===================================================================================
==

v0.1a-incr.1
- bach.roll: fixed bug causing crashes when recalling presets
fixed bug causing crashes with wrong llll in the first inlet

Вам также может понравиться