These are the highlights of the changes in SC 3.14. See sections below for details.
{ |...args, kwargs| kwargs }.Changes to UGens, potentially affecting their output values, are now documented in detail in a separate document: UGen Changelog.
mod for negative integer modulus (only). The method modSeaside can be used to restore the original behavior, named this way for reasons not immediately obvious, by @passyur and @telephon https://github.com/supercollider/supercollider/pull/6699Splay and SplayAz level compensation has been fixed and made more flexible, this may change overall level distribution, by @adcxyz https://github.com/supercollider/supercollider/pull/6804.SetResetFF explicitly as unipolar, this changes output levels when using range – e.g. if you have used .range(0, 1), it had assumed bipolar default so far and returned a range of [0.5, 1].) by @capital-G in https://github.com/supercollider/supercollider/pull/6023Set.remove now returns the item removed by @JordanHendersonMusic in https://github.com/supercollider/supercollider/pull/6409trueAt by @telephon in https://github.com/supercollider/supercollider/pull/6001, and @mtmccrea in https://github.com/supercollider/supercollider/pull/6335 This changes behavior as follows:| trueAt | obj | nil | true | false |
| previous: | obj | false | true | false |
| new: | false | false | true | false |
Thanks to new contributors!
@gorenje, @JordanHendersonMusic, @cdbzb, @Xeonacid, @Shu-AFK, @silvanocerza, @alexyuwen, @xunil-cloud, @sadguitarius, @sonata-chen, @frenchy64, @SimonDeplat, @martindupras, @unthingable, @HotwheelsSisyphus, @OzelotVanilla, @juergenrmayer, @lapnitnelav, @tedmoore, @passyur, @tremblap, @carltesta, @djiamnot, @wortsampler
So far, additional function and method arguments could be captured into an array via the syntax: f = { |a, b ... args| args }; f.(1,2,3,4) // returns [3, 4]. It was not possible to use other keywords than those explicitly given (here a and b) Now we can also capture arbitrary keyword arguments, via the syntax: f = { |a, b ... args, kwargs| kwargs }; f.(x:3, y:4) // returns [\x, 3, \y, 4].
The new keyword argument capture was implemented by @JordanHendersonMusic in https://github.com/supercollider/supercollider/pull/6339, in collaboration with @telephon and @capital-G.
This change makes a number of new things possible, e.g.
performList, functionPerformList, superPerform, tryPerform, doesNotUnderstand take kwargs now. This makes message forwarding more flexible and more complete.superPerformArgs method was necessary to avoid an infinite loop in passing keyword arguments up to the parent class, by @JordanHendersonMusic in https://github.com/supercollider/supercollider/pull/6568*newCopyArgs allow for cleaner constructors in classes with many instance variables, you can now write expressions like ^super.newCopyArgs(freq:440) by @JordanHendersonMusic in https://github.com/supercollider/supercollider/pull/6398Maybe, CallOnce, UnaryOpFunction, BinaryOpFunction, NaryOpFunction, FunctionList, UnaryOpFunctionProxy, BinaryOpFunctionProxy, NAryOpFunctionProxy), so e.g. you can write f = { |x, y = 1| x + y } * { |x, y = 2| x ** y }; f.(x:2, y:6) by @telephon in https://github.com/supercollider/supercollider/pull/6786performArgs(selector, args, kwargs)FunctionDef for finding out their argument form: varArgsValue, hasVarArgs, hasKwArgs.Scale.ionian(tuning:Tuning.kirnberger) (this was the original problem to be solved).IdentityDictionary take keyword arguments and pass them on correctly. So you can write now: u = (dive:{|self, speed, depth| ... }); u.dive(depth: -5)DoesNotUnderstandError informs about keyword arguments.Pbind work with kwargs (this syntax works now: Pbind(note: Pseq([-3, -2, 0, 1, 6, 13]), dur: 0.05, amp: 0.1).play) by @JordanHendersonMusic and @telephon in https://github.com/supercollider/supercollider/pull/6530{ Complex(MouseX.kr, MouseY.kr).sqrt.poll; 0 }.play) by @telephon in https://github.com/supercollider/supercollider/pull/6595SoundFile:writeArray makes it easier to write multichannel files by @JordanHendersonMusic in https://github.com/supercollider/supercollider/pull/6219Buffer.loadChannelDialog by @prko in https://github.com/supercollider/supercollider/pull/6122wchoosen implementation by @telephon in https://github.com/supercollider/supercollider/pull/6601 (credits to @Asmatzaile and all who discussed on https://scsynth.org/t/choosing-how-to-choose-with-self-normalising-weights/9557)isRectangular for Array. by @JordanHendersonMusic in https://github.com/supercollider/supercollider/pull/6225defaultBranchName method for Git.sc by @cdbzb in https://github.com/supercollider/supercollider/pull/6072.bounds_ setter method for Stethoscope by @prko in https://github.com/supercollider/supercollider/pull/6281parseOSC method for Int8Array by @Spacechild1 in https://github.com/supercollider/supercollider/pull/6151localIP, localEndPoint and localIPs class methods for NetAddr by @Spacechild1 in https://github.com/supercollider/supercollider/pull/6153postBugReportInfo class method for Platform by @capital-G in https://github.com/supercollider/supercollider/pull/6928thumbSize argument for Slider2D by @JordanHendersonMusic in https://github.com/supercollider/supercollider/pull/6270parent argument for all .plot and .plotAudio methods for placing them in window. by @prko in https://github.com/supercollider/supercollider/pull/6202bounds argument for .plotTree in https://github.com/supercollider/supercollider/pull/6294clock argument (default: AppClock) for waitForBoot and doWhenDone by @prko in https://github.com/supercollider/supercollider/pull/6198position argument for Server meter to set position (width and height are automatically calculated) by @prko in https://github.com/supercollider/supercollider/pull/6283Nothing
binaryValue implementation for AbstractFunction and UGen by @telephon in https://github.com/supercollider/supercollider/pull/5941*cueSoundFile sets path of Buffer by @telephon in https://github.com/supercollider/supercollider/pull/5937Pwalk boundary behavior when using directionPattern for folding by @jamshark70 in https://github.com/supercollider/supercollider/pull/6587lastForWhich and lastIndexForWhich of Collection, also add synonym method of them by @OzelotVanilla in https://github.com/supercollider/supercollider/pull/6665EnvironmentRedirect and LazyEnvir – call dispatch on removeAt. The message localRemoveAt can be used to removeAt without calling the dospatch. by @telephon in https://github.com/supercollider/supercollider/pull/5923SC_TerminalClient by @capital-G in https://github.com/supercollider/supercollider/pull/6590long and long long by @JordanHendersonMusic in https://github.com/supercollider/supercollider/pull/6732slotStrVal implementation is fixed by @Spacechild1 in https://github.com/supercollider/supercollider/pull/6156See also UGen Changelog: Version 3.14 for a more detailed documentation of changes affecting UGens.
LevelComp UGen and a Guide to Level Compensation by @adcxyz in https://github.com/supercollider/supercollider/pull/6804.Delay1 and Delay2 got additional arguments: x1 and - only for Delay2x2, to control predelay values. Part of https://github.com/supercollider/supercollider/pull/6110 by @mtmccreaToggleFF supports input rate != unit rate by @elgiano in https://github.com/supercollider/supercollider/pull/6760PluginUnload macro exports a function that is called when the library is deinitialized, right before it is unloaded. This is only required in rare cases, typically for resource cleanup that cannot be safely done in a global object destructor. (https://github.com/supercollider/supercollider/pull/6191 by @Spacechild1)FULLSAMPLEDUR macro, and SC_PlugIn::fullSampleDur() method: return the reciprocal of server sampleRate. (https://github.com/supercollider/supercollider/pull/6147 by @Spacechild1)sc_midicps, sc_cpsmidi, sc_midiratio, sc_cpsoct, sc_ampdb (https://github.com/supercollider/supercollider/pull/6711 by @dyfer)registerUnit now has a static assert that blocks polymorphic classes. That is, calling registerUnit with a class that has virtual methods will result in a compile-time error (https://github.com/supercollider/supercollider/pull/6147 by @Spacechild1)CALCSLOPE macro: replaced decltype C cast with static_cast. Fixes undefined behavior when passing array items, e.g CALCSLOPE(x[0], x[1]) (https://github.com/supercollider/supercollider/pull/6320 by @JordanHendersonMusic)ClearUnitOnMemFailed now correctly clears output buffers before returning. (https://github.com/supercollider/supercollider/pull/6690 by @Spacechild1)scroll-margin-top to fix scrolling to anchor by @capital-G in https://github.com/supercollider/supercollider/pull/6847custom.css path in search.html by @prko in https://github.com/supercollider/supercollider/pull/6875FULL_CHECK flag for clang-format by @capital-G in https://github.com/supercollider/supercollider/pull/6344.git-blame-ignore-revs file by @capital-G in https://github.com/supercollider/supercollider/pull/6350boost::filesystem with std::filesystem by @capital-G in https://github.com/supercollider/supercollider/pull/6331@SimonDeplat, @prko, @JordanHendersonMusic, @martindupras, @jamshark70, @mlang, @tedmoore, @capital-G, @telephon, @HotwheelsSisyphus, @OzelotVanilla, @passyur, @mtmccrea, @cdbzb, @redFrik, @juergenrmayer, @paum3, @miczac, @madskjeldgaard, @carltesta, @redFrik, @Shu-AFK, @elifieldsteel, @alexyuwen, @mxw, @wortsampler
@telephon, @jamshark70, @elgiano, @mtmccrea, @JordanHendersonMusic, @capital-G
@dyfer, @capital-G, @elgiano, @scztt, @silvanocerza