Strasheela Changelog

What's new in Strasheela 0.10.1

Apr 30, 2012
  • Exported Record2FomusEvent_Untimed
  • Updated reference doc

New in Strasheela 0.9.10 (Mar 30, 2009)

  • Main additions and changes:
  • Fixed serious bug: core of Strasheela dependend on IOzSeF, now IOzSeF support moved into an extra contribution functor IOzSeF (thanks to Ajay Dhar for pointing out this problem)
  • Added Windows batch files for installation etc. (thanks to Ajay Dhar for a first version!!)
  • Added functor Segments: a collection of re-usable musical segments (sub-CSPs) such as a contrapuntual line, motifs, or a homophonic chord progression
  • Added several harmony-related constraints to HS.rules: RestrictPitchDomain, OnlyOrnamentalDissonance_Durations, NoParallel, NoParallels, MakeIntervalConstraint, PerfectConsonances, IsPerfectConsonanceR, Limit3Consonances, IsLimit3ConsonanceR, Limit3Intervals_2, IsLimit3IntervalR_2, Limit5Consonances, IsLimit5ConsonanceR, IsLimit_3_5_ConsonanceR, IsLimit7ConsonanceR, IsLimit_3_5_7_ConsonanceR, and GetRootPCIntervals
  • Documentation:
  • Schoenberg-TheoryOfHarmony.oz: the examples produced parallel fifths/octaves (between voices more than an octave apart), now fixed in source (not yet fixed in solutions in HTML file...)
  • HarmonicProgressions-22ET.oz: Added adaptive JI output, added four-voice setting of examples (using new Segs.homophonicChordProgression)
  • Minor additions:
  • Score: added DefMixinSubscript
  • GUtils: added RoundDigits
  • Pattern: added constraints Intervals, AbsIntervals, RestrictMaxInterval, Hook, Stairs
  • HS: added general pitch converters HS.acc, HS.pc, HS.pcName, and HS.pitch
  • HS.score: added HarmonicRythmFollowsMarkers
  • HS.rules.schoenberg: added AscendingProgression2R
  • Further bug fixes and changes:
  • Score: method getSimultaneousItems: now made sure arg test is only applied to items
  • Out: Lilypond output, arg hasBreak: no reak inserted after last container matching hasBreak

New in Strasheela 0.9.9 (Mar 10, 2009)

  • Main additions and changes:
  • Pattern: added many pattern constraints and related definitions: FenvContour, FenvBoundaries, Arc, WindowedPattern, WindowedPatternRecursions, ForAllItems, MapItems, FirstToLastDistance, DxsToXs, XsToDxs, EqualizeParam, MakeIndexConstructor, GetMotifIndex
  • Support for adaptive just intonation has been added: HS.score.getAdaptiveJIPitch. See Schoenberg-TheoryOfHarmony.oz for an example how to use it with a special adaptive JI explorer action.
  • Extensions and simplifications for score creation, defined in Score
  • Documentation:
  • Added example doc Example-Schoenberg-TheoryOfHarmony.html
  • Extensively revised example Schoenberg-TheoryOfHarmony.oz (before called HomophonicChordProgression.oz): now features solver calls for many variations on the theory of harmony
  • Page for MEWER application added to list of examples
  • FriendlyMusicExample.oz: Fixed bug in distro (was orelse instead of andthen)
  • Minor additions:
  • Out: added args hasImplicitStaff and hasBreak to Out.toLilypond. Added IsOutmostSim.
  • GUtils: added RecursiveAdjoin, KeepList, IsRatio, RatioToFloat
  • MUtils: added TransposeRatioIntoStandardOctave, RatioToStandardOctaveFloat, SortRatios, SortRatios2
  • HS.db: added GetUntransposedRatios, GetUntransposedRootRatio, GetUntransposedRootRatio_Float
  • HS.score: added MakeChords, MakeScales, and GetDegree
  • HS.rules.schoenberg: added ProgressionSelector, ResolveDissonances, IndexCardinality SetEachChordType SetEachScaleType RequireChordTypes
  • ET31: added many chords and scales to database (origin is Scala's list of 31 ET chords and modi)
  • ET31.out: NoteEt31ToLily_AdaptiveJI, and Et31AsEt12_TuningTable
  • Bug fixes and changes:
  • Score: ScoreObject method toInitRecord: now outputs strings (e.g., for lilypond) as proper strings (e.g., important for archiving scores)
  • Score: Refactored ScoreObject method init: not-explicitly supported arguments are ignored now (a warning is printed)
  • Score: Revised ScoreObject method unify: new args exclude, derive, overwrite
  • Score: Method toFullRecord: added arg unbind.
  • Score: added ScoreObject method addInfos (complements addInfo)
  • Out: Last note of automatically split and tied notes was longer than what has been set by Out.setMaxLilyRhythm, now fixed
  • Out.saveScore: fixed (added wrote prefix)
  • Out.recordToVS revised: For values which cannot be transformed into Oz code, an descriptive atom created with Value.toVirtualString is output. Also, now outputs strings as strings, preserves escape sequences etc. (both affects, e.g., archiving scores). Added RecordToVS_simple
  • Midi output: Note off timing revised: when a note on event and the preceeding note off event occur at exactly the same time, some MIDI devices have problems. So far, Strasheela be default simply removed (OutputMidiFile arg removeQuestionableNoteoffs defaulted to true). Now, by default such note offs are very slightly moved forward (NoteToMidi new arg noteOffOffset defaults to ~0.003, measured in secs — NoteToMidi is used by default for outputting MIDI notes (matching OutputMidiFile clause with test isNote).
  • GUtils: simplified IsDivisible implementation, added RelationComplement, ConstrainRelation
  • LUtils: Refactored EveryNth (new arg Offset), added OddPositions EvenPositions
  • LUtils: Fixed function Position to support nested elements
  • HS.db: GetChordIndex/GetScaleIndex/GetIntervalIndex: database entries can now have multiple alternative names. When such entries are defined with SetDB, the subfeature 'name' of the feature 'comment' has a list of names (atoms).
  • Refactored HS.db.getName: now returns list of alternative chord/scale/interval name
  • HS.distro: Fixed bug in IsNoTimepointNorPitch (was orelse instead of andthen)
  • ET31.out: Substatianlly refactored Lilypond output of analytical information (chords, scales), now more flexible
  • Fenv: Changed ItemFenvsToMidiCC and ItemTempoCurveToMidi arg ccsPerSecond from int to float
  • Pattern: improved propagation of Direction

New in Strasheela 0.9.8 (Dec 4, 2008)

  • Serious bug fixed (compilation error): Score and Init: Browser was not imported
  • Tutorial: revisions of section on Strasheela Music Representation (thanks Graham)
  • SDistro: first-fail variables orderings (e.g., distribution order values like dom, width, and their various relations) are more efficient (replaced many =< by

New in Strasheela 0.9.7 (Nov 28, 2008)

  • Main additions and changes:
  • Added support for time shift functions to the core music representation: methods like getStartTimeInSeconds etc. take them into account, and they are supported by all standard synthesis output formats. Time shift functions are defined for temporal containers, and they can even be nested (e.g., locally for motifs and a globally for the whole score).
  • Fenv.renderAndPlayMidiFile: MIDI file output which additional supports continuous controllers (e.g., pitch bend, aftertouch, CC) and a global tempo curve, all expressed in the score by fenvs (demonstrated in these examples).
  • MUtils: Added support for symbolic duration notation: MakeNoteLengthsTable, MakeNoteLengthsRecord, MakeDurationsRecord, SetNoteLengthsRecord, ToDur, SetDurationsRecord, ToNoteLengths (see usage in this example)
  • Documentation:
  • Demonstrate various MIDI file export facilities in the new file ../examples/ControllingOutput-Examples/MIDI-output.oz
  • Added relatively complex examples which constrain the rhythmical, melodic, harmonic, and formal structure at the same time ../examples/Form-Examples/FriendlyMusicExample.oz
  • Added realtime counterpoint example with Max interface: ../examples/Realtime-Examples/
  • Minor additions:
  • Score: added TransformScore and TransformScore2
  • HS.rules: added several harmonic/melodic/contrapuntual rules: VoiceLeadingDistance, VoiceLeadingDistance_Percent, SmallIntervalProgressions, SmallIntervalProgressions_Percent, ClearDissonanceResolution, IntervalBetweenNonharmonicTonesIsConsonant, MaxInterval, MaxNonharmonicNoteSequence, MaxNonharmonicNotePercent, MaxRepetitions, MinPercentSteps
  • Out.outputScoreConstructor (and related score archiving procs): added arguments 'postfix', 'exclude', and 'clauses'
  • GUtils: added IsDivisible, Percent
  • HS.score: added RatioToInterval
  • Added OZRC file configured for MacOS
  • Out.midi.noteToMidi: added arg 'round'
  • PMotif.makeScript: added argument 'constructors'
  • Out.midi.getChannel added
  • Fenv: added ItemFenvsToMidiCC and ItemTempoCurveToMidi
  • Bug fixes and changes:
  • Refactored score object method toInitRecord: now with arg 'clauses' (i.e., default output format — defined by method 'getInitInfo' — can be overwritten in 'toInitRecord' call)
  • Fenv.itemFenvY: interface changed slightly — time argument now expected in present time unit, not in seconds
  • Tempo curve processing bug fixed (numeric integration approximation now OK)
  • Fixed bug in the harmony-related example in PrototypeMotif-Examples.oz (with the new arg PMotif.makeScript arg 'constructors')
  • Refactored MIDI output (Out.midi.renderAndPlayMidiFile and friends affected)

New in Strasheela 0.9.6 (Aug 20, 2008)

  • New models for constraining the musical form
  • Functor PrototypeMotif: constraining the musical form based on motif prototypes
  • Pattern.useMotifs: a flexible pattern constraint for motifs
  • SDistro: Refactored the definition of distribution strategies and their documentation. More complex variable orderings are now conveniently defined with special constructor functions. The following procedures are added to SDistro: Naive, Dom, Width, Deg, DomDivDeg, MakeDom, MakeDeg, MakeLeftToRight, MakeRightToLeft, TimeParams, MakeTimeParams, Min, Max, MakeMarkNextParam, and MakeVisitMarkedParamsFirst. The definitions of distribution strategies for harmonic CSPs in HS.distro demonstrate how complex distribution strategies are defined concisely with these new procedures
  • Score: The performance of the temporal item method getSimultaneousItems is much improved, and a method findSimultaneousItem added. Before, getSimultaneousItems blocked until the whole rhythmical structure was determined. Now the score only needs sufficient information whether some object is simultaneous or not to the given object, but their temporal parameters don't need to be determined. This speeds up the search process of CSPs which rely on this method (e.g., contrapuntual problems accessing sets of simultaneous notes and which also constrain the rhythmical structure)
  • New examples
  • MotifPattern-Examples.oz demonstrate the new pattern motif model (Pattern.useMotifs)
  • PrototypeMotif-Examples.oz demonstrate the new prototype motif model (PrototypeMotif)
  • VariationMotif-Examples.oz demonstrate the variation motif model, which existed before but had little examples so far (Motif).
  • HomophonicChordProgression.oz implements a substantial subset of Schoenberg's Theory of Harmony
  • Examples added to HarmonicProgressions-31ET.oz: chord progression with 7-limit triads in septimal minor, chord progression in extended tonality with 7-limit tetrads, and chord progression with 7-limit tetrads forming a sequence (repetition of the sub-chord progressions at different pitches)
  • SimpleHarmony.oz: a relatively simple harmonic CSP, using a different approach than the examples listed above
  • Realtime-Examples/Max_OSC_test.* shows how Max/MSP and Strasheela communicate via OSC
  • PWGL-Output/ shows how Strasheela outputs to the ENP score format of PWGL
  • The files in the examples folder are reorganised
  • 03-FloridCounterpoint-Canon.oz revised. For example, it now features a simple cadence rule, and solutions differ more. Also, some constraints can be modified more easily by arguments to the script
  • ShowHarmonicDatabases.oz shows how to render the entries of HS chord, scale or interval databases in common music notation and as sound
  • All entries in the 22-ET and 31-ET databases (chords, scales, intervals) are listed in common music notation and as sound in files in ../contributions/anders/ET22/doc-DB/ and ../contributions/anders/ET31/doc-DB/ (created with ShowHarmonicDatabases.oz)
  • GUtils: added MakeSingletonSet and IntsToFS (convenient interface between FD and FS variables)
  • Init.setMaxLilyRhythm added (specifies maximum Lilypond note duration written without tie)
  • LUtils: added RemoveDuplicates
  • Class Score.item: added method percentageIsDet
  • Out.toNonmensuralENP: now also supports PWGL library KSQuant format (which the KSQuant object simple2score transformes into the mensural ENP format)
  • SDistro.makeSearchScript (and all Strasheela search engines): added generic variable ordering 'dom deg'
  • SMapping: added MapSimultaneousPairs/ForSimultaneousPairs (constraint applicators to simultaneous score objects), FilterSimultaneous, FindSimultaneous, and MapScore
  • Pattern: added LocalMaxR, PercentEqual_Range, RotateList, and RotateSublists
  • HS.score: added HarmoniseMotifs for more convenient definition of harmonic CSPs
  • HS.score: added support for computing G. Mazzola's minimal cadential sets: MinimalCadentialSets, MinimalCadentialSets2, MakeAllContextScales
  • HS.rules: added various harmonic constraints: ExpressAllChordPCs, ExpressAllChordPCs_AtChordStart, ExpressEssentialChordPCs, ExpressEssentialPCs_AtChordStart, ClearHarmonyAtChordBoundaries, ResolveNonharmonicNotesStepwise, GetInterval, and ConstrainMaxIntervalR
  • HS.distro: ready-made distribution strategies for harmonic CSPs
  • HS.db: added GetComment and GetName
  • ET22.out: Lilypond notation of music in 22-tone equal temperament greatly improved by special accidentals
  • ET22.out/ET31.out: Lilypond notation of scale and chord objects (analytical score objects) refined: if scale/note objects are part of the score, then all their pitch classes are first notated as grace notes. A 'normally' notated single note indicates the duration of the chord/scale and the chord/scale root.
  • ET22.setEnharmonicNotationTable: enharmonic notation can be customised
  • ET22.db / ET31.db: Added feature 'essentialPitchClasses' to chord entries
  • Fenv: added method toList_Int to class Fenv
  • Added Lisp code for translating Lisp values into Oz values: ../goodies/Lisp/Lisp2Oz.lisp
  • Convenient benchmark facilities for runtime and memory measurements of musical CSPs are added under ../testing/zy_Efficiency/benchmark
  • Strasheela has been adapted for the new Mozart version 1.4.0
  • Out.midi.note2Midi renamed into Out.midi.noteToMidi for consistency
  • GUtils.extendedScriptToScript: the argument order for extended scripts is swapped, so that extended scripts can be used conveniently as score creator functions in Score.makeScore. All code which uses extended scripts has been adapted (e.g., RT.scoreSearcherWithTimeout and all examples which use that class)
  • Fixed HS.score.chordsToScore bug: arg minIntervalToBass did constrain interval between soprano and next lower voice instead between bass and next higher voice
  • Fixed Score.scoreObject method init bug: replaced GUI warning by stdout warning (GUI warning causes exception if called within a local space during search)
  • Oz primitive Object.is blocks on undetermined FS vars: refactored all calls to it to check for FS vars first (e.g., various type checking functions)
  • Pattern.makeLSystem: fixed bug for N =< 0 (caused infinite loop)
  • Refactored method toInitRecord for class HS.score.note. It now potientially includes the initialisation arguments getChords, isRelatedChord, getScales, isRelatedScale (which are procedures). Nevertheless, by default these are skipped
  • Renamed scale in HS.dbs.default from 'minorPure' into 'natural minor' (comment feature of scale spec)
  • Archiving a score object as Strasheela code in a file (archive init record) was broken, now fixed
  • Outputting a FS variable as code (when archiving a score) could result in [] instead of nil, fixed
  • ET22.out.renderAndShowLilypond: argument wrapper was broken, now fixed
  • Fixed method isDet: now also works recursivly for containers
  • HS.score: fixed chord/scale implicit constraints: before determining the index parameter constrained/determined the pitch class set variable, but not the other way round. Now it works both ways
  • HS.score: fixed bug in class Interval: specifying index parameter in init method led to fail
  • ET22.db: removed chord 'major subdiminished'; this chord equals 'subminor 7th'
  • ET22.db: fixed bug in chord database: subdiminished 7th chord was completely wrong. Also the chord 'French augmented 6th' was wrongly called 'subminor 7th'
  • Out: Fixed lily bug: pause objects did not support lily info tag
  • HS.rules.schoenberg: fixed ResolveDescendingProgressions: decending progression "resolved" only in ascending progression (not superstrong), also fixed arg allowInterchangeProgression (added constraint)
  • Measure.uniformMeasures: fixed bug in method overlapsBarlineR (old def had logical error)
  • Score.item: added method getContainersRecursively
  • ET31.db: now only a single root defined for all chords and scales
  • Score.note: change default of argument amplitude to determined value (velocity 64), before it was variable and so it must be set always
  • Realtime: Default realtime solvers now implicitly reset the random seed, so they always create a different solution
  • LUtils: fixed bug in CFind/CFilter: blocked if result should be nil

New in Strasheela 0.9.5 (Apr 17, 2008)

  • The actual playback pitches of notes can be defined by tuning tables for sound synthesis formats such as Csound or MIDI. These tables (Oz tuples) have a format similar to the scale format of Scala (Scala scale file format import is on the TODO list). New procedures in Init: SetTuningTable, UnsetTuningTable. Affected methods getValueInMidi (Score.pitch) and getPitchInMidi (Score.note).
  • Examples demonstrating different approaches for creating microtonal MIDI output (e.g., distributing notes over multiple MIDI channels in a round-robin fashion for detuning with pitchbend, and alternatively assigning each monophonic voice its own MIDI channel). Also, the use of tuning tables is demonstrated in these examples.
  • Edited documentation, e.g., of HS to reflect the new options with tuning tables
  • Slightly revised and extended the Out.midi documentation
  • Lilypond output: setting the optional argument to false resulted in invalid lilypond code, an unbalanced "}" (thanks Graham for the patch!)
  • New warning: outputting a score which is not fully determined to Lilypond, MIDI or Csound now results in a warning that the output may block or fail
  • Out.midi: added functions NoteToUserEvent, NoteToPitchbend, CentToPitchbend for MIDI output clause definitions
  • SMapping: added argument excludeSelf to methods collect, forAll, forAllThreaded, mappend, mappend, count, filter, find (these methods are inherited by all score items such as notes and containers)
  • SMapping: Refactored method collect. Tree traversal is now stateless internally (graph traversal still uses state for marking visited objects)
  • Score Score.copyScore2

New in Strasheela 0.9.4 (Apr 11, 2008)

  • This Strasheela version outputs Lilypond version 2.10.0 code (latest stable release)
  • Several examples demonstrate the new Lilypond output features
  • Support for enharmonic notation (for enharmonic note objects)
  • Revised output of chords: a simultaneous container in a staff containing only notes can result in a chord (i.e. notes on a single staff sharing a stem)
  • Support for single staff polyphony: a simultaneous container in a staff can contain further sequential and simultaneous containers which will be notated as polyphonic voices
  • Out.makeLilyTupletClauses: easy Lilypond customisation for tuplet support
  • All Lilypond output procedures and functions support an additional optional argument 'wrapper' for inserting arbitrary Lilypond code at the beginning and end of the Lilypond output file (remember that the previous release already introduced the 'lily' info-tag for inserting arbitrary score object related Lilypond code)
  • New rules for automatic score layout: a staff is implicitly created for a sequential container which is either at the top-level or contained in a top-level simultaneous container. Typical Strasheela score topology for Lilypond output: top-level container is a simultaneous container and its items are sequential containers corresponding to staffs. If the top-level container is a sequential, however, then there is only a single staff. You can define arbitrary other nestings, but in such cases you should explicitly specify which container corresponds to a staff using the mentioned lily info-tag. Moreover, you can also explicitly create staffs which last for the duration of a container only. The implicit staff creation can be switched off entirely by setting the optional argument 'implicitStaffs' to false.
  • Facilitated customisation by clauses: the following functions are added to Out: ToLilypond2, IsOutmostSeq, IsSingleStaffPolyphony, SingleStaffPolyphonyToLily, IsLilyChord, SimToLilyChord, GetUserLily, LilyRest
  • Revised reference documentation for Out.toLilypond and other Lilypond output related functions
  • Fixed several bugs concerning offset time notation
  • Removed function: Out.outmostSimToLily
  • Functor ET22 for composition in 22-tone equal temperament
  • HS.rule: Cadence
  • Functor ET12: convenient 12 ET pitch notation functions
  • SDistro.makeSearchScript (and all Strasheela search engines): Added generic variable ordering 'dom/deg'
  • Added multiple tonal chord progression example CSPs in 31 ET, partly demonstrating the new cadence constraint and the Schoenberg constraints (introduced in the previous release):
  • Added chord progression example CSPs in 22 ET
  • Fuxian counterpoint example revised (now follows Fux' cadence rule): [file]
  • Generalised Fuxian counterpoint example: the user can specify the cantus firmus, even in different modes. Also, this example demonstrates the use of scale objects together with note objects.
  • GUtils.randIntoRange never selected upper random limit (and so random value ordering never selected upper domain boundary)
  • The Score.pitch class method getValueInMidi now supports any equal temperament pitch unit which fits the pattern et , e.g., et31 or et53. This automatically enables Csound output for these formats (and any other output definition which uses the note pitch method getPitchInMidi).
  • Revised ET31 chord database (e.g., the root of utonal chords like minor is now defined according to common convention as the lower tone of the fifth, not the 1/1)
  • HS.rules: added constraints DiatonicChord NoteInPCCollection
  • HS.score: added classes FullChord, ChordNote, ScaleNote
  • Added LUtils.lastN
  • Fixed bugs in ../examples/05-MicrotonalChordProgression.oz (harmony database specification and accessing score object info attribute were obsolete)
  • HS.rules.schoenberg: fixed ResolveDescendingProgressions (no root repetition by default), added ConstantProgressionR
  • HS.score.chordsToScore: fixed distribution strategy (was extremely slow if note octave was more restricted than pitch class)

New in Strasheela 0.9.3 (Mar 31, 2008)

  • Functor HS.rules.schoenberg: a generalised version of Schoenbergs guidelines on writing good tonal chord progressions have been implemented as constraints
  • Functor ET31 for composition in 31-tone equal temperament. A simple example demonstrates this functor with one of the Schoenberg constraints.
  • HS.score.chordsToScore
  • Pattern.percentTrue_Range
  • Out: functions SeqToLily, SimToLily, OutmostSimToLily, and MakeNoteToLily2. These functions simplify customising Lilypond output of sequential and simultaneous containers resp. notes. A number of related functions have been briefly documented.
  • New example demonstrating how users can improve Lilypond output for their purposes: the example defines enharmonic notation, support for key signatures at the beginning of a container and more (these features are meanwhile also supported by the default Lilypond output).
  • Added support for explicit pause objects and enharmonic notation (for enharmonic note objects like HS.score.enharmonicNote in 12 ET) to the default Lilypond output
  • Arbitrary Lilypond code can be added to container and note objects via a tuple with the label 'lily' given to the info attribute of the score object.
  • HS.score.cMajorDegreeToPC: use Pythagorean C-major scale as reference, not JI C-major scale. This constraint is used for deriving enharmonic information.
  • HS.score: a number of type checks for mixing classes have been added: IsInScaleMixinForChord, IsScaleDegreeMixinForChord, IsInversionMixinForChord, IsInChordMixinForNote, IsInScaleMixinForNote, IsEnharmonicSpellingMixinForNote, IsScaleDegreeMixinForNote, IsChordDegreeMixinForNote, IsPitchClassMixin

New in Strasheela 0.9.2 (Mar 21, 2008)

  • Support for IOzSeF search engines which can solve complex constraint problems more efficiently. For example, all IOzSeF solvers support adaptive recomputation � a technique saving memory (see Programming Constraint Services). Note that you can enable score output information actions for the IOzSeF 'Explorer' by calling {Init.addIOzSeFOuts} (e.g., in your OZRC init file).
  • Added to SDistro: IozsefInit, IozsefInitBest, IozsefExploreOne, IozsefExploreAll, IozsefExploreBest, IozsefSearchOne, IozsefSearchAll, IozsefSearchBest, SearchOneDepth
  • Concurrent filtering functions, suitable for delayed constraint application
  • Added to LUtils: CFilter, CFind
  • Processing of tempo curves and time shift functions, plus further funtionality
  • Added to Fenv: TimeShiftToTimeMap, Integrate, TempoCurveToTimeMap, ConcatenateTempoCurves, Reciprocal, FenvToMidiCC, ItemFenvToMidiCC, ItemFenvY, TemporalFenvY
  • Minor additions: Out.midi.note2Midi, HS.rules.commonPCs_Card
  • First three chapters of the tutorial text and the structure of the tutorial have been revised (thanks Graham!)
  • Added examples which demonstrate how to use continuous controllers in the score, and how to output them to MIDI, see here
  • Revised documentation for SDistro.makeSearchScript (explains common interface of all solvers in SDistro). Note that Distro.makeFDDistribution is now marked obsolete (kept for now as some examples use it)
  • Distribution strategy with random value ordering now supports recomputation This is a very important fix: a randomisation of the solution is crucial for many musical CSPs and recomputation is essential for solving highly complex problems which would take too much memory (recomputation trades RAM for runtime).
  • Refactored SDistro.makeSearchScript, GUtils.makeRandomGenerator and added GUtils.setRandomGeneratorSeed
  • Out.scoreToEvents and Out.midi.scoreToEvents_Midi: now also support processing the top-level score container for output (if it passes the given test)
  • Memo.memoize now uses a more efficient stateful data structure internally (dictionary instead of record constraints), whereas Memo.memoize2 is fully stateless and thus can be used in a CSP, but is less efficient. Also, changed interface of Memo.memoize into {Memoize Fn ?ClearP ?MemoFn}
  • Score.scoreObject info attribute: now convenient adding of 'labeled' info tags as records with a label supported.
  • Revised ScoreObject method hasThisInfo: in case some info value is a record, then it is checked whether its label is given info atom
  • New ScoreObject method getInfoRecord returns info record with given label.
  • HS.score.pitchClassCollection: archiving chords and scales in a solution score is now more stable: the chord/scale index is omitted from the output if chord/scale pitch classes and transposition are determined. That way, even if the chord/scale database was edited later (e.g., chords were added) so that the indices changed, the archived score will still work as long as the set of pitch classes for the original chords did not change.

New in Strasheela 0.9.1 (Jan 22, 2008)

  • Code additions:
  • Added support for MIDI file import, see its documentation and test file.
  • Extended the harmony model: added classes Interval, and InversionMixinForChord (plus related classes like MakeInversionChordClass) and procedures PitchClassToPitch2, NoteInterval, and TransposeNote to the functor HS.score, and convenience functions GetChordIndex, GetScaleIndex, and GetIntervalIndex to the functor HS.db. See the documentation for HS.score and HS.db. Some simple examples are in the test file Score-test.oz (an InversionMixinForChord example in the the middle of the file, an Interval example is at the bottom).
  • Added to MIDI file output (Out.midi) the definitions IsCSVEvent, HasType, IsNoteOn, IsNoteOff, HasChannel, TicksToBeats, see the documentation.
  • Added class Score.leaveUninitialisedParameterMixin, see the documentation.
  • Added class SMapping.forNumericRangeArgs, see the documentation.
  • Documentation:
  • Revised beginning of the tutorial (thanks Graham!!).
  • Extended the music representation chapter: added an explanation for user-defined export procedures.
  • Revised sections of the reference, e.g., the introduction to the harmony model
  • I realised a more suitable approach for the convenient delayed constraint application, a technique for constraining score contexts which are inaccessible in the problem definition. See my thesis Composing Music by Composing Rules, Sec. 6.3 "Constraining Inaccessible Score Contexts" for a discussion of this matter, and the example here for a demonstration of the new approach.
  • Extended the installation documentation (e.g. documentation of the init file templates).
  • Fixed bugs:
  • Score.copyScore did not create variable copies before.
  • HS.score.pcSetToSequence could not handle cases where its arg Root is not in its arg PCFS.
  • HS.score.pitchClassToPitch and HS.score.pitchClassToPitch2 now can also be used like a deterministic functions.
  • HS.db.setDB now has a refined handling of optional arguments and I added support for arbitrary equal temperament tunings (e.g., if PitchesPerOctave is set to 31 � meaning 31 tone equal temperament � then atom 'et31' is created for the pitch unit).
  • New procedure Memo.memoize2 allows use of function memoization inside constraint scripts (in contrast to the original Memo.memoize).
  • Pattern.someTrue/Pattern.someTrueR wrongly behaved like Pattern.oneTrue (thanks Graham for the patch!).
  • Refactoring: moved ExtendedScriptToScript from Realtime to GUtils.