[Initial revision thielema**20040522174809] [make PerformanceOld.lhs the previous CVS version of Performance.lhs thielema**20040522175514] [tried to compile as many modules as possible, excluded conflicting modules, invoked minor corrections thielema**20040522185821] [replaced 'quot' by 'div' which is the proper choice for negative numbers thielema**20040522194204] [use Sequence and Parallel constructors rather than :+: and :=: because this better matches the structure of music, disabled some of the optimizations in ReadMidi to get the modules compiled, yet thielema**20040523162233] [maximum volume is now 1 instead of 100, removed bug in defNasHandler where the volumes are averaged instead of being multiplied thielema**20040523163307] [Ssf.lhs was available but had the wrong capitalization thielema**20040524135314] [foldr -> foldl in perform thielema**20040703191144] [replaced Sequence by Serial, since Serial is an adjective like Parallel thielema**20040705144556] [Redefinition of PitchClass? Rests and Notes thielema**20040705145659] [Rests and Notes are the sonic atoms in a Music, whereas the other constructors structure the Music. Sonic atoms share the property 'duration' which is now expressed in the type definition and simplifies the functions that process the duration of music thielema**20040705204436] [make the tutorial compilable latex as of 2003 and pdflatex thielema**20040705205426] [corrected number of repetitions thielema**20040706145910] [added tableofcontents and hyperref stuff thielema**20040706150012] [Volume constructor thielema**20040725094218] [more hierarchical structure of the tutorial document thielema**20040725170231] [amsthm package for theorems thielema**20040725181738] [turned old paragraphs into subparagraphs thielema**20040725181903] [merged the Trill part of Basics with the module Trill, separated Percussion module from Basics, since Percussion needs trills thielema**20040725211319] [eliminated identifier conflicts by removing the module export clause thielema**20040726194022] [removed module export clauses to eliminate identifier conflicts, removed overlapping match patterns as reported by 'ghc' thielema**20040726194208] [target 'clean' thielema**20040726194238] [this is now a full Haskell module thielema**20040726200634] [moved contents from new module Percussion to Drums, now this is included instead thielema**20040726200710] [adapt to new Atom constructor thielema**20040726204255] [perc -> drum, though I'm uncertain if the 'perc' or the 'drum' naming scheme ist the newer one thielema**20040726204403] [seemed to use some old Random functions, make use of type class Num instead of fixing to Float thielema**20040726204611] [now all modules except CSound can be compiled thielema**20040726204729] [turned endEL and diddle to 'map's on lists of pitches thielema**20040727075522] [three sections: todo, think over, done; suggest module restructuring, Music data restructuring thielema**20040727075720] [some indentation fixed all errors thielema**20040727213255] [(+:+) and (=:=) now merge their operands if they are also Serial or Parallel lists thielema**20040727213501] [separated Optimization from ReadMidi thielema**20040727213628] [I hope I can now compile all modules thielema**20040727213744] [moved most of the Player related code from Performance to Players; left definition of Player data in Performance, since GHC doesn't support mutually modules satisfyingly today thielema**20040729205402] [tabulators to spaces thielema**20040729205620] [considerations of volume thielema**20040729205912] [MIDI volume is scaled logarithmically, Velocity is different from Volume, turned the NoteAttribute Volume into Velocity thielema**20040731134621] [implemented all trigonometric and hyperbolic functions, eliminated some warnings concerning unused parameters thielema**20040731165448] [some references to newsgroups postings regarding Haskore thielema**20040801125512] [instrument specific values provided by type parameters thielema**20040811142449] [modules can be compiled both with Hugs and GHC thielema**20040811221128] [some things that can be done immediately thielema**20040814175718] [formatting thielema**20040814175744] [include CSound tutorial in Haskore tutorial thielema**20040814175829] [the Pch definition of CSound is rather ill and should not be adapted by Haskores back-end, I have now data type Pch with two constructors thielema**20040814180043] [Loudness enumeration thielema**20040814221923] [clipping of velocity was wrong in HaskToMidi, thus it always clipped to zero thielema**20040816213313] [/tt instead of \tt thielema**20040827100936] [structure analysis of a sequence of notes; modularity and datatype identifier T thielema**20040827144732] [MIDI volume is scaled logarithmically, Velocity is different from Volume, turned the NoteAttribute Volume into Velocity thielema**20040827172613] [Made the examples more concise thielema**20040827172658] [Section structure degraded to fit into the big document thielema**20040827172737] [the Pch definition of CSound is rather ill and should not be adapted by Haskores back-end, I have now data type Pch with two constructors thielema**20040827172849] [Use 'replicate' instead of 'ChildSong6.times' thielema**20040827212748] [Parallel -> chord, Serial -> line, keep independent of the internal structure of Music thielema**20040827213309] [Logfiles need no version control thielema**20040827220334] [Added signatures for Hugs compatibility thielema**20040827220459] [Moved all example songs to a separate directory thielema**20040827223030] [Tutorial must also load the examples from the Example directory haskore@henning-thielemann.de**20040828093644] [Separate directories for different back-ends like MIDI and CSound thielema**20040828102049] [CSound was accidentally moved to MIDI directory thielema**20040828103514] [Colored instead of framed links thielema**20040828115333] [HaskToMidi -> WriteMidi, in order to match the module name ReadMidi thielema**20040828124758] [makeMidi -> writeMidi, in order to match the function name readMidi thielema**20040828130136] [OutputMidi -> SaveMidi, outputMidiFile -> saveMidiFile, in order to match the module and function names of LoadMidi thielema**20040828134812] [Hyperlinks for generator descriptions thielema**20040828141113] [turned some internet references to real hyperlinks thielema**20040828142647] [Found out more about the pitch meanings of MIDI and CSound thielema**20040828153759] [Converted Kantate 147 successfully to Haskore Music thielema**20040828180207] [Raise an error if negative pitches appear, don't let Prelude.char do this thielema**20040828180407] [Explicit error if lineToList is not applied to a Serial Music thielema**20040828181054] [Changed parameter order of performToMidi, the Performance is the main parameter thielema**20040828181828] [Kantate147 under control of Makefile thielema**20040828183233] [ChildSong6.mid was broken haskore@henning-thielemann.de**20040829091113] [Place GHC specific modules in src/GHC haskore@henning-thielemann.de**20040829102923] [use 'make test' to run an automatic test on 'darcs record' haskore@henning-thielemann.de**20040829202617] [Function 'rest' for abstracting from 'Atom ... Rest' haskore@henning-thielemann.de**20040829123304] [quickNote -> note, it seems to be the most natural way to define a note haskore@henning-thielemann.de**20040829130141] [fixed bug in cutList: it appended an infinite number of zero rests haskore@henning-thielemann.de**20040830221008] [TestHaskore.lhs -> BackEnd/MIDI/TestMidi.lhs, because TestHaskore contains routines for testing the MIDI back-end only haskore@henning-thielemann.de**20040829121800] [module PlayMidi supports immediate replay of Music as MIDI, though it works not satisfyingly, yet haskore@henning-thielemann.de**20040829201243] [shell-haskell is necessary to use piping in PlayMidi haskore@henning-thielemann.de**20040829202507] [TestSuite checks if the current modules produce still the same results as the old versions. Currently not functional because it has already changed too much. haskore@henning-thielemann.de**20040829214645] [HaskoreLoader -> Haskore haskore@henning-thielemann.de**20040830222002] [now even infinite performances are possible haskore@henning-thielemann.de**20040831231715] [create a test that verifies the integrity of Ssf haskore@henning-thielemann.de**20040901153600] [now the MIDI files of Ssf and Kantate147 can be verified haskore@henning-thielemann.de**20040901205420] [ChildSong6 can be tested haskore@henning-thielemann.de**20040901215414] [merge generates a unique result haskore@henning-thielemann.de**20040902210216] [assert function haskore@henning-thielemann.de**20040902215827] [test 'cut' function haskore@henning-thielemann.de**20040902215943] [hyperlink to a web page mentioning MML (macro music language), though I don't know if it is the same MML as in this source haskore@henning-thielemann.de**20040902221959] [test for NewResolutions made from the current sources haskore@henning-thielemann.de**20040904174046] [add most of the tests from HaskoreExamples haskore@henning-thielemann.de**20040904194349] [some of the tests failed only because of the ordering haskore@henning-thielemann.de**20040904195021] [CSound scores generated by the original Haskore haskore@henning-thielemann.de**20040904213052] [CSound can be started, but it seems as if changes to the scores arose since the original Haskore haskore@henning-thielemann.de**20040904213554] [writeOrc -> writeOrchestra, is no longer an IO function but generates a string haskore@henning-thielemann.de**20040904220855] [printScore -> writeScore, is no longer an IO function but generates a string haskore@henning-thielemann.de**20040904221807] [CSound orchestras can be successfully tested, score tests fail haskore@henning-thielemann.de**20040904225502] [diffIA applies tkdiff to two files haskore@henning-thielemann.de**20040905081557] [diffIA compares strings rather than files haskore@henning-thielemann.de**20040905082240] [diff for CSound files haskore@henning-thielemann.de**20040905083813] [writeArgs more concise haskore@henning-thielemann.de**20040905091441] [made CSound score tests successful haskore@henning-thielemann.de**20040905113043 original Haskore's defNasHandler forgot to propagate PFields velocity information is interpreted as logarithmic volume remaining problem: GHC outputs 0.01 as 1.0e-2 whereas Hugs shows 0.01 ] ['instance Show Player' instead of 'instance Show (a -> b)' haskore@henning-thielemann.de**20040905115637] [a new section about several design decisions haskore@henning-thielemann.de**20040905120932] [swapped order of octave and pitchClass in Pitch type haskore@henning-thielemann.de**20040905125905] [design study of functions that contain an octave number and lifts a note function to a note haskore@henning-thielemann.de**20040905130606] [the interval function didn't increment the pitch haskore@henning-thielemann.de**20040905131511] [function arpeggio simplifies definition of arpeggio chords haskore@henning-thielemann.de**20040905133948] [NewResolution no longer depends on HaskoreExamples haskore@henning-thielemann.de**20040905134528] [Player.T should replace type Player haskore@henning-thielemann.de**20040905152100 unfortunately since mutual recursive modules aren't supported, one cannot have Player.T as an independent type and Player.C as constructor defPMap and fancyPMap moved to Player module renamed them accordingly ] [PMap -> Player.Map haskore@henning-thielemann.de**20040905152851] [PName -> Player.Name haskore@henning-thielemann.de**20040905153341] [def prefix -> deflt prefix haskore@henning-thielemann.de**20040905154919] [Performance -> Performance.T haskore@henning-thielemann.de**20040905163732] [MidiFile -> MidiFile.T haskore@henning-thielemann.de**20040905174028] [MEvent -> MidiFile.Event, removed Midi-M from some identifiers haskore@henning-thielemann.de**20040905175531] [Fractals needs no HaskoreExamples, only Basics haskore@henning-thielemann.de**20040905181648] [import qualified Performance haskore@henning-thielemann.de**20040905182126] [sorted imports haskore@henning-thielemann.de**20040905182906] [writeMidi: moved from TestMidi to WriteMidi haskore@henning-thielemann.de**20040905183100] [Music -> Music.T; untested haskore@henning-thielemann.de**20040905204816] [Basics -> Music; untested haskore@henning-thielemann.de**20040905205101] [Music.T works now haskore@henning-thielemann.de**20040905212239] ['case' without curly braces haskore@henning-thielemann.de**20040905213614] [+:+ -> Serial, =:= -> Parallel in explanation haskore@henning-thielemann.de**20040905213729] [formatting haskore@henning-thielemann.de**20040905214033] [Trill no longer exports Music haskore@henning-thielemann.de**20040905214350] [rewrite rules are only correctly parsed if -fglasgow-exts is set haskore@henning-thielemann.de**20040910084217] [Flipping tone sequence - a new example of algorithmic music haskore@henning-thielemann.de**20040910091122] [avoid warnings in Player haskore@henning-thielemann.de**20040910092919] [generalized number flipping to more than two numbers, can be nicely used as bassline or similar haskore@henning-thielemann.de**20040910171041] ['rtof' and 'float' generalized to type variables, unfortunately it's not so easy to make this for Music.T since this would break all type signatures containing Music.T haskore@henning-thielemann.de**20040910204646] [import Dur type qualified from Music haskore@henning-thielemann.de**20040910204835] [Performance.DurT -> Performance.Dur haskore@henning-thielemann.de**20040910205613] [alternative implementations of flipSeq haskore@henning-thielemann.de**20040911131802] [keep the most concise implementations of flipSeq haskore@henning-thielemann.de**20040911132852] [mapped the generated numbers to changing chords haskore@henning-thielemann.de**20040911140124] [more ideas about abstract data types haskore@henning-thielemann.de**20040912122303] [standard volume is 1 haskore@henning-thielemann.de**20040912122522] [MIDI tempo was double as slow as it should haskore@henning-thielemann.de**20040912145536 I fixed that by reducing the factor 4.0 in WriteMidi.toDelta to 2.0, though there is also the factor MidiFile.defltDurT = 2 which looks strange. But the connected MidiFile.defltST is written to the MIDI files so I didn't change that for now. ] [writeMidi is enclosed in verbatim environment haskore@henning-thielemann.de**20040912145908] [MidiFile.resampleTime allows changing time grid haskore@henning-thielemann.de**20040912183914 The default tempo is divided by some strange factor defltDurT=2. I wanted to change that to defltDurT=1 (and also WriteMidi.toDelta t = round (t * 2.0 * float division) but this would lead to a coarser sampling of event times. Further on it breaks all midi test files generated so far. One could fix this in the test routines similarly to the hacks of velocity. ] [(1,A) is now mapped to 440 Hz by all back-ends haskore@henning-thielemann.de**20040914222113] [removed many warnings in the Midi back-end haskore@henning-thielemann.de**20040915140931] [replaced some occurences of Atom by calls to the function 'note' haskore@henning-thielemann.de**20040915154942] [Instr -> setInstrument, Trans -> transpose in order to stay independent from the structure of Music.T haskore@henning-thielemann.de**20040918141424] [Phrase -> phrase, Tempo -> changeTempo, in order to stay independent from the structure of Music.T haskore@henning-thielemann.de**20040918142212] [sub structure Control of Music.T simplifies handling of Tempo, Instrument, Transpose, Player, Phrase haskore@henning-thielemann.de**20040918152110] [Use general type Media.T as base structure for Music.T haskore@henning-thielemann.de**20040918210339 There was a problem because NewResolution relies on the precedence of (+:+) over (=:=) but this was lost when redefining these operators in Music.lhs ] [uncurry note function since this is the only way it is invoked so far haskore@henning-thielemann.de**20040918211401] [new test for checking the precedence of =:= and +:+ haskore@henning-thielemann.de**20040918212621] [check consistency of 'dur' and 'cut' using a random tree of Music.T haskore@henning-thielemann.de**20040918215729] [Performance.perf is more readable when implemented for binary Serial composition haskore@henning-thielemann.de**20040918223420] [cycle flipSong forever, flipSong2 with additional bass line to help the listener stay synchronous haskore@henning-thielemann.de**20040918234906] [moved some finished topics from NOTES to Discussion.tex haskore@henning-thielemann.de**20040919122315] [Two alternative implementations of Media; Temporal class for handling duration and zero duration objects haskore@henning-thielemann.de**20040919142938 MediaBin uses binary composition constructors, MediaList uses List data structures for composition. Though Performance.merge should output a unique event ordering the tests fail because of reordered performance events. ] [Dur = Ratio Integer (Rational) instead of Ratio Int should avoid overflows haskore@henning-thielemann.de**20040919145003] [Flip: added a new Music which consists of only one chord to demonstrate the principle haskore@henning-thielemann.de**20040923193148] [module PerformanceContext allow for abstraction of the implementation of the Context of a performance haskore@henning-thielemann.de**20040923214833] [export all MIDI processing modules by Midi.lhs haskore@henning-thielemann.de**20040924193944] [split CSound into CSoundScore and CSoundOrchestra haskore@henning-thielemann.de**20040924194952] [Discussion of design decisions haskore@henning-thielemann.de**20041017223419] [serialToList -> serialS, parallelToList -> parallelS haskore@henning-thielemann.de**20041017225202] [common tempo definitions haskore@henning-thielemann.de**20041018223111] [signature for fst3, snd3, thd3 haskore@henning-thielemann.de**20041019214420] [Ritardando and Accelerando are changes in tempo rather than attributes of the dynamics haskore@henning-thielemann.de**20041019220456] [I hope that all top-level identifiers got a signature now haskore@henning-thielemann.de**20041020205641] [decided not to change the signature of PhraseFun to (T, Dur) -> (T, Dur) haskore@henning-thielemann.de**20041020213856] [Functions for application of some common phrases haskore@henning-thielemann.de**20041020221543] [now Phrase allows only one phrase per call to make the order of application transparent to the user haskore@henning-thielemann.de**20041020222746] [define 'float' in terms of fromIntegral haskore@henning-thielemann.de**20041023102201] [replaced 'float' by 'fromIntegral' haskore@henning-thielemann.de**20041023103928] [replaced 'rtof' by 'fromRational' haskore@henning-thielemann.de**20041023104905] [some TeX macros for referencing haskore@henning-thielemann.de**20041023111850] [avoid comments in embedded Haskell code haskore@henning-thielemann.de**20041023124238] [Thoughts about the algebraic structure of Media.T haskore@henning-thielemann.de**20041023124928] [proofs of literal equivalence now use the definition of Tempo using rational Dur type haskore@henning-thielemann.de**20041023145459] [relative times in Performance.T allow infinite performances haskore@henning-thielemann.de**20041024100224] [removed sortEvents' since it changes the order of events where no default order is sensible haskore@henning-thielemann.de**20041024101739] [dynamics phrases are mapped to velocities now, this makes sense with natural instruments haskore@henning-thielemann.de**20041024112456] [simplified implementation of Player.fancyInterpPhrase.stretch haskore@henning-thielemann.de**20041024113534] [changed a factor in ReadMidi.diff such that readMidi can retrieve some songs written by writeMidi (but not all) haskore@henning-thielemann.de**20041024143919] [signature for TestMidi.play haskore@henning-thielemann.de**20041024155002] [CSoundTutorial.play plays through a pipe with Sox' play command, 'csound -o dac' should do the same but doesn't work here haskore@henning-thielemann.de**20041024163744] [Csound 4.24.1 as installed here doesn't like to read from stdin haskore@henning-thielemann.de**20041024180852] [test cases for the FlipSong haskore@henning-thielemann.de**20041024183520] [analysis of common infixes in Media haskore@henning-thielemann.de**20041024210336] [music structure analysis now uses a dictionary of the replaced infixes haskore@henning-thielemann.de**20041024224720] [new section for processing and analysis of Music haskore@henning-thielemann.de**20041025200130] [don't use [Media.T a] but decent into Serial and Parallel of Media.T haskore@henning-thielemann.de**20041026131003] [also consider infixes in infixes, i.e. process the entire dictionary not only the main music haskore@henning-thielemann.de**20041026214326] [StructureAnalysis.expand turns a grammar back into a Media.T haskore@henning-thielemann.de**20041027082849 The TestSuite got a new function that checks if a stream remains literally equivalent if it is turned into a Grammar and back. It uses the Flip.song for that purpose. ] [StructureAnalysis.expandAll expands all macros haskore@henning-thielemann.de**20041027085446] [StructureAnalysis.condense: foldListFlat can replaced by a simpler invocation of foldList haskore@henning-thielemann.de**20041027090225] [contribution for the Haskell community and activity report haskore@henning-thielemann.de**20041028212830] [format a grammar from StructureAnalysis as nice Haskell code, though we still need a parser for this purpose haskore@henning-thielemann.de**20041028220959] [dotted, doubleDotted haskore@henning-thielemann.de**20041029085427] [made Report friendly for hunk patch haskore@henning-thielemann.de**20041029195139] [for pretty printing build a HsExp manually haskore@henning-thielemann.de**20041029195258] [StructureAnalysis: replace Serials and Parallels with only one member by their member haskore@henning-thielemann.de**20041029233234] [pretty print Music.T with convenient note and rest functions haskore@henning-thielemann.de**20041029233643] [put negative numeric literals into parentheses haskore@henning-thielemann.de**20041030083011] [prepared StructureAnalysis.Grammar for cyclic infices haskore@henning-thielemann.de**20041030111627] [MusicFormat: now the Haskell code is created by string construction, again haskore@henning-thielemann.de**20041030122011 The string is then parsed and pretty printed. Constructing Syntax objects was very cumbersome and probably made too many assumptions about the internals of Language.Haskell.Syntax ] [detection and replacement of loops; since we allow the insertion of parts of a loop (with 'take'), things become quite complicated haskore@henning-thielemann.de**20041030150952] [remove the special handling of cycling infixes which makes things considerably simpler haskore@henning-thielemann.de**20041030162924] [StructureAnalysis -> ContextFreeGrammar, condenseThres -> fromMedia, expand -> toMedia haskore@henning-thielemann.de**20041031131558] [by organizing Kantate147 trackwise instead of blockwise, larger structures can be discovered by the Grammar analyser haskore@henning-thielemann.de**20041031141013] [MusicFormat.music formats pure music haskore@henning-thielemann.de**20041031150350] [homogenous interface to examples with functions 'song', 'midi', 'main' haskore@henning-thielemann.de**20041031152239] [infinite MidiFile.T haskore@henning-thielemann.de**20041031182648 The data structure can be infinite, but the binary data file cannot. splitbyInst uses a more sophisticated custom implementation of 'partition'. performToMidi doesn't try to fix errors in a UserPatchMap and thus doesn't need to know all used instruments. New functions specialised to General MIDI became necessary. ] [module HaskoreSupport collects all functions that are not only of interest for Haskore haskore@henning-thielemann.de**20041031184922] ['merge' can't be used for mixing NoteOn and NoteOff events haskore@henning-thielemann.de**20041031190524] [splitByInst uses unfoldr haskore@henning-thielemann.de**20041031192029] [(Music.T, Context.T, UserPatchMap) -> (UserPatchMap, Context.T, Music.T) because this more friendly to currying haskore@henning-thielemann.de**20041031193855] [UserPatchMap is a new module which defines the corresponding data type haskore@henning-thielemann.de**20041031203100] [joined HaskoreSupport to HaskoreUtils haskore@henning-thielemann.de**20041031210356] [SaveMidi can use Control.Monad.Writer instead of the custom Output monad, removed module Monads haskore@henning-thielemann.de**20041031223009] [bug in readMidi: the tracks must be composed in parallel not in sequence haskore@henning-thielemann.de**20041102220430] [use 'replicate' and 'sequence' to load a number of MIDI chunks haskore@henning-thielemann.de**20041102223521] [LoadMidi: EndOfTrack is removed from the end of each track, because it is redundant and different from what performToMidi generates haskore@henning-thielemann.de**20041102231624] [don't merge tracks with mergeTrack but merge the resulting music with 'parallel' composition haskore@henning-thielemann.de**20041103224312] [(+:+) and (=:=) ready for infinite application haskore@henning-thielemann.de**20041108063712] [alternative mergeTracks based on a binary mergeTracks2 haskore@henning-thielemann.de**20041108073223] [readTrackFromStart is a wrapper for readTrack for handle MIDI tracks that don't start at time 0 haskore@henning-thielemann.de**20041108081959] [GHC for performing the automatic tests haskore@henning-thielemann.de**20041108205809 With GHC the tests run faster. ReadMidi can be tested for NewResolution and Kantate147, where Hugs runs out of memory. Does this indicate a memory leak? It could not be provoked by starting readMidiPure with a simple (replicate 100000 somenote). Some CSound files had to be adapted since GHC chooses exponential format for some numbers, where Hugs uses fixed point format. ] [NewResolution: resolved ambiguity of Marimba haskore@henning-thielemann.de**20041108214645 There was Marimba and marimba. These led to two different tracks that were merged to single one after one readMidi-writeMidi cycle. Both of these instruments used overlapping notes of the same pitch. In this case ReadMidi.search cannot assign a NoteOff to the corresponding NoteOn properly. ] [explain mergeTracks variants haskore@henning-thielemann.de**20041108215940] [MIDI tracks are no longer merged at the MIDI level but at the Music.T level haskore@henning-thielemann.de**20041108220538] [readNote encapsulates the functionality for converting a MidiEvent to a Music.T note haskore@henning-thielemann.de**20041108223943] [ReadMidi: Use an array for looking up program numbers of General midi instruments haskore@henning-thielemann.de**20041108232421] [ReadMidi: extracted 'relTime' from 'search' haskore@henning-thielemann.de**20041108234142] [ReadMidi.getFirst simplified, no need for 'reverse' haskore@henning-thielemann.de**20041110204544] [ReadMidi.splitBy simplified, no need for 'reverse' haskore@henning-thielemann.de**20041110212256] [ReadMidi.getRest: factored out a 'map' haskore@henning-thielemann.de**20041110213523] [ReadMidi.getFirst -> moveTempoToHead, only moves tempo event to head rather than returning a pair (remaining track, first tempo) haskore@henning-thielemann.de**20041110215916] [ReadMidi.makeUPM simplified, could be even simpler with UserPatchMap implemented by FiniteMap, I assume haskore@henning-thielemann.de**20041110222341] [ReadMidi internally converts UserPatchMap to FiniteMap haskore@henning-thielemann.de**20041110225030] [ReadMidi: 'newTracks' and 'search' work on continuous tracks, 'splitBy isTempoChg' is performed after 'newTracks' haskore@henning-thielemann.de**20041111205225] [ReadMidi: 'search' doesn't 'reverse' haskore@henning-thielemann.de**20041111211522] [ReadMidi: cleaned up 'readTrack' haskore@henning-thielemann.de**20041111213718] [ReadMidi: bundle NoteOn and NoteOff in a RichEvent haskore@henning-thielemann.de**20041111222955 newTracks -> mergeNotes search -> searchNoteOff ] [Chords.Chord -> Chord.T haskore@henning-thielemann.de**20041113201230] [define common intervals and chords haskore@henning-thielemann.de**20041113214702] [more declarative TeX file names: Equivalence.tex, Introduction.tex haskore@henning-thielemann.de**20041113215705] [HaskoreExamples doesn't export other modules haskore@henning-thielemann.de**20041113222135] [repeatM without M haskore@henning-thielemann.de**20041113223426] [Drums.DrumSound -> Drum.T haskore@henning-thielemann.de**20041113224628] [Bits -> BitOperation, use qualification for Bit operations, use functions from Data.Bits where possible haskore@henning-thielemann.de**20041114093814] [LoadMidi: prefixed MidiReader function names with 'get' haskore@henning-thielemann.de**20041114103000] [added Fractal to the TestSuite, unfortunately it makes problems with ReadMidi.searchNoteOff haskore@henning-thielemann.de**20041114114921] [we must remove notes of zero duration in order to let the Fractal example work haskore@henning-thielemann.de**20041114124522] [revM -> Music.reverse haskore@henning-thielemann.de**20041114132651] [reduced shadowing of global identifiers haskore@henning-thielemann.de**20041114133921] [factored event time out off MidiFile.Event data structure haskore@henning-thielemann.de**20041114150259] [merged MidiFile.Event and LoadMidi.MidiFileEvent haskore@henning-thielemann.de**20041114152503] [factored MidiFile.Channel out off MidiFile.MidiEvent haskore@henning-thielemann.de**20041114155536] [MidiFile.KeyName -> Key haskore@henning-thielemann.de**20041114175032] [relative MIDI event times in writeMidi, loadMidi, saveMidi haskore@henning-thielemann.de**20041114221606] [relative MIDI event times in readMidi haskore@henning-thielemann.de**20041115230232] [KDevelop: main language is Haskell haskore@henning-thielemann.de**20041115230348] [readTrack: handle relative times properly, readNote, readTrackFromStart no longer necessary haskore@henning-thielemann.de**20041116000353] [Markov chains haskore@henning-thielemann.de**20041117225405] [MusicFormat uses ShowS, respects operator precedences and parentheses haskore@henning-thielemann.de**20041117230041] [removed discussion topics from table of contents haskore@henning-thielemann.de**20041120183806] [remove .aux, .out, .toc files because they are automatically generated and interfere with commutation of patches haskore@henning-thielemann.de**20041120185739] [subsections and TOC item for Drum and Trill haskore@henning-thielemann.de**20041120190027] [moved 'metro', definitions of standard tempos and polyrhythms to new module Tempo haskore@henning-thielemann.de**20041120190328] [MidiFile.Type turned into Enum haskore@henning-thielemann.de**20041121164040] [WriteMidi.performToMidiBase provides the base functionality for performToGeneralMidi and performToMidi haskore@henning-thielemann.de**20041121180251] [move commas and periods out of quotes haskore@henning-thielemann.de**20041121193130] [WriteMidi.performToMEvs can now change the program within a track haskore@henning-thielemann.de**20041121211003 This is essential for tracks of mixed instruments, which in turn essential for infinite music. ] [infinite binary midi files with bad chunk size can be created, but 'timidity' seems to read the file until the end before playing haskore@henning-thielemann.de**20041121224253] [removed type related suffixes from the main functions of LoadMidi and SaveMidi haskore@henning-thielemann.de**20041122214907] [condense ideas about generalized instruments and MIDI controllers haskore@henning-thielemann.de**20041123094926] [exclusive use of \figref haskore@henning-thielemann.de**20041123181347] [exclusive use of \secref haskore@henning-thielemann.de**20041123183952] [index for Tutorial, turned some \em into \keyword haskore@henning-thielemann.de**20041123210521] [Macros.tex: specialized versions of \code for functions, types, and expressions haskore@henning-thielemann.de**20041123214201] [separate module for Pitch handling haskore@henning-thielemann.de**20041123215958] [perform -> Performance.fromMusic haskore@henning-thielemann.de**20041123222421] [removed CSound prefixes from identifiers in CSoundScore haskore@henning-thielemann.de**20041123224140] [Haddock documentation haskore@henning-thielemann.de**20041124161938] [readMidi -> ReadMidi.toMusic haskore@henning-thielemann.de**20041124230539] [writeMidi -> WriteMidi.fromMusic haskore@henning-thielemann.de**20041124234107] [performToMidi -> Performance.fromMidi haskore@henning-thielemann.de**20041124235102] [some thoughts about UserPatchMaps haskore@henning-thielemann.de**20041125101053] [Haddock documentation generation added to darcs' tests haskore@henning-thielemann.de**20041125213831] [new module for MML parser haskore@henning-thielemann.de**20041125214602] [WriteMidi.splitByInst -> Performance.slice haskore@henning-thielemann.de**20041125223512] [UserPatchMap: simplifications haskore@henning-thielemann.de**20041125230631] [UserPatchMap.T consists of pairs of pairs rather triples haskore@henning-thielemann.de**20041126222657] [ReadMidi.splitBy using List.groupBy haskore@henning-thielemann.de**20041126225926] [UserPatchMap.T maps from instrument name to channel and program number. haskore@henning-thielemann.de**20041126235234 It contains no longer the GeneralMidi name because there might be instruments which don't have one. ] [specialization of Media.foldBinFlat: Music.foldBinFlat haskore@henning-thielemann.de**20041127123536] [specialization of Media.mapList: Music.mapList haskore@henning-thielemann.de**20041127152551] [Music.cut -> Music.take, Music.cutList -> Music.takeLine haskore@henning-thielemann.de**20041127155100] [specialization of Media.foldList: Music.foldList haskore@henning-thielemann.de**20041127171804] [MML: avoid use of Music.Atom and Music.Rest constructors haskore@henning-thielemann.de**20041127173329] [Music.drop haskore@henning-thielemann.de**20041127195604] [currently don't know how to get CSound playing in realtime, thus commented out things in PlayCSound haskore@henning-thielemann.de**20041127204231] [Music.take accelerated to linear time haskore@henning-thielemann.de**20041127205441] [revised NOTES about future improvements: generalized instruments, controllers/modulators haskore@henning-thielemann.de**20041127210754] [Optimization.tempo need no longer constructors of Music.T haskore@henning-thielemann.de**20041202232333] [Optimization.transpose haskore@henning-thielemann.de**20041202235250] [removed low-level stuff from definition of 'trill', thus making it even more flexible haskore@henning-thielemann.de**20041205224323] [Optimization.mergeControl is now more aggressive, it also combines controllers if they are not adjacent haskore@henning-thielemann.de**20041205223337] [Temporal.Temporal -> Temporal.Class haskore@henning-thielemann.de**20041205232757] [Media.T -> Media.Class haskore@henning-thielemann.de**20041205233556 No longer use a module import to select the wanted underlying data structure (List based or based on binary operators), but use a type class to do that. This requires that no constructors of the data structures are accessed. Unfortunately, since the data structure based on binary operators can represent neither empty sequences nor empty parallel compositions, it needs Temporal.Class primitives to be able to insert a rest of zero duration. Thus a Temporal.Class context must be added to the signature of the 'serial' and 'parallel' methods. ] [CSoundOrchestra.Expression: bundle comparisons in one constructor haskore@henning-thielemann.de**20041206001353] [CSoundOrchestra.Expression: bundle constructors for binary operators haskore@henning-thielemann.de**20041206002844] [CSoundOrchestra.Expression: bundle constructors for unary functions haskore@henning-thielemann.de**20041207005641] [CSoundOrchestra: removed Orc infixes haskore@henning-thielemann.de**20041209215443] [CSoundOrchestra: write* -> *toString haskore@henning-thielemann.de**20041209231320] [CSoundScore: write* -> *toString haskore@henning-thielemann.de**20041210222429] [separate build directory for each platform, allows for simultaneous compiling on different systems haskore@henning-thielemann.de**20041210230957] [moved flattenTuple functions from CSound to HaskoreUtils haskore@henning-thielemann.de**20041216221650] [play music via MIDI from NEdit haskore@henning-thielemann.de**20041227212717] [Drum: explicit exports, drumLine using 'map' haskore@henning-thielemann.de**20050103144555] [notes about a class for pitch depend objects haskore@henning-thielemann.de**20050106184008] [randomPermute -> shuffle, uses partition instead of filter twice haskore@henning-thielemann.de**20050114143820] [shuffle: TestSuite -> HaskoreUtils haskore@henning-thielemann.de**20050114144415] [replaced verbatim by lstlisting environments because they support syntax highlighting haskore@henning-thielemann.de**20050123180931] [new directory src/Haskore as preparation for the hierarchical module structure; Makefile in the root directory haskore@henning-thielemann.de**20050123193115] [moved TeX files to src/Doc haskore@henning-thielemann.de**20050123200046] [new directory Media for modules related to temporal media haskore@henning-thielemann.de**20050123203753] [merged directories FrontEnd and BackEnd to Interface; FrontEnd/MML.lhs -> Interface/MML.lhs haskore@henning-thielemann.de**20050123210207] [CSound: moved to hierarchical name space haskore@henning-thielemann.de**20050123213750] [MIDI: moved to hierarchical name space haskore@henning-thielemann.de**20050125210606] [realtime play works now via a named pipe and 'system' haskore@henning-thielemann.de**20050201231852 I could not setup a pipeline with Shell-Haskell I could not use stdin and stdout, but a named pipe instead. The play doesn't start reliably. It seems to start and fail alternatingly. :-) ] [Test/TestSuite -> Test/Suite haskore@henning-thielemann.de**20050206102301] [CSound.Tutorial: pureToneTable = fromIntegral pureToneTN haskore@henning-thielemann.de**20050206104108] [General: new part in hierarchical name space haskore@henning-thielemann.de**20050206112005 Contains: Bit, Utility, MarkovChain ] [GHC/IOExtensions removed from hierarchical module space haskore@henning-thielemann.de**20050206114554] [Process: new part in hierarchical name space haskore@henning-thielemann.de**20050206115827] [Test removed from hierarchical module space haskore@henning-thielemann.de**20050206130031] [HaskoreExamples -> Miscellaneous haskore@henning-thielemann.de**20050206131130] [Haskore.lhs removed from hierarchical module space haskore@henning-thielemann.de**20050206133101] [Example: moved to hierarchical name space haskore@henning-thielemann.de**20050206134129] [Music: new part in hierarchical name space, first citizen: Haskore.Music.Format haskore@henning-thielemann.de**20050206135730] [Player, Performance, PerformanceContext -> Music directory haskore@henning-thielemann.de**20050206141829] [Music.lhs: moved to hierarchical name space haskore@henning-thielemann.de**20050206144954] [Basic: new part in hierarchical name space haskore@henning-thielemann.de**20050206153047 Contains: Chord, Drum, Interval, Pitch, Tempo, Trill ] [import all modules from hierarchical standard library rather than from Haskell 98 library haskore@henning-thielemann.de**20050206160314] [CSound accepts only control rate for 'line' haskore@henning-thielemann.de**20050206174204] [read "???" :: StdGen -> mkStdGen haskore@henning-thielemann.de**20050206214644] [Makefile: hugs-ext -> hugs, removed hugs-all haskore@henning-thielemann.de**20050207095003] [AutoTrack: initial version from 2000-04-30 stefan.ratschan@gmx.at**20050207211840] [AutoTrack: executable is compiled with 'ghc --make' autotrack@henning-thielemann.de**20050207214827] [AutoTrack: song names start with capital autotrack@henning-thielemann.de**20050207215020] [AutoTrack joined to Haskore tree haskore@henning-thielemann.de**20050207215553] [AutoTrack: added note about the origin in each file autotrack@henning-thielemann.de**20050207221020] [AutoTrack: some simplifications autotrack@henning-thielemann.de**20050207223906] [AutoTrack: simplified remLen and musicDur autotrack@henning-thielemann.de**20050207230827] [AutoTrack: musicDur without recursion autotrack@henning-thielemann.de**20050207231627] [AutoTrack: adapted to current state of Haskore haskore@henning-thielemann.de**20050208122746 Since the interpretation of pitch has changed the generated MIDI files have too high pitch now ] [AutoTrack: verbatim -> haskelllisting environment haskore@henning-thielemann.de**20050208125122] [AutoTrack.Scales -> Haskore.Basic.Scale haskore@henning-thielemann.de**20050208130348] [AutoTrack/Utils.repeatMN -> Haskore.Music.replicate haskore@henning-thielemann.de**20050208135605] [moved some general functions from AutoTrack/Utils to Haskore.General.Utility haskore@henning-thielemann.de**20050208135932] [AutoTrack.rhythm: (sort l == l) is quite an expensive monotony check haskore@henning-thielemann.de**20050212130829] [AutoTrack.Rhythm: createRhythm should now work with infinite rhythms, too haskore@henning-thielemann.de**20050212131636] [AutoTrack.Rhythm: Rhythm.Rhythm -> Rhythm.T, removed 'rhythm' prefix from functions haskore@henning-thielemann.de**20050212134330] [Utility: select haskore@henning-thielemann.de**20050212135427] [AutoTrack.Rhythm: handle all cases in countInR haskore@henning-thielemann.de**20050212135713] [AutoTrack: divided Charts into ChartBar, ChordChart, EventChart, ScaleChart haskore@henning-thielemann.de**20050220220158] [AutoTrack: Styles.splitToDur simplified haskore@henning-thielemann.de**20050220221148] [AutoTrack: Instruments -> Instrument haskore@henning-thielemann.de**20050221222357] [AutoTrack: Styles -> Style haskore@henning-thielemann.de**20050221225124] [AutoTrack: changed order of parameters of Options.exit haskore@henning-thielemann.de**20050221225456] [AutoTrack: manual also in postscript haskore@henning-thielemann.de**20050221225742] [AutoTrack: ChordSym -> ChordSymbol haskore@henning-thielemann.de**20050221231117] [AutoTrack: Options -> Option haskore@henning-thielemann.de**20050225130306] [AutoTrack: Rhythm.Rhythm -> Rhythm.T, again - why was this reverted? haskore@henning-thielemann.de**20050310215848] [MIDI.Load.Parser: bundled all types for the state in a triple haskore@henning-thielemann.de**20050310223945] [MIDI.Load: use replicateM to parse multiple bytes haskore@henning-thielemann.de**20050310233202] [AutoTrack.ChordSymbol: simplify parsing with State monad haskore@henning-thielemann.de**20050311182809] [Music.Format.enclose using showParen haskore@henning-thielemann.de**20050313091414] [Performance.C' -> Performance.Cons' haskore@henning-thielemann.de**20050314094456] [MidiFile.C -> MidiFile.Cons haskore@henning-thielemann.de**20050314094938] [Media.Class -> Media.C haskore@henning-thielemann.de**20050314100844] [Media.Temporal.Class -> Media.Temporal.C haskore@henning-thielemann.de**20050314101631] [AutoTrack: ChartBar, ChordChart, EventChart, ScaleChart, Style: C -> Cons haskore@henning-thielemann.de**20050314114920] [AutoTrack: moved to hierarchical name space haskore@henning-thielemann.de**20050318192619] [AutoTrack: moved filterMusic from Utils to Style, since it is only used there haskore@henning-thielemann.de**20050318193503] [AutoTrack.Style: eliminated compiler warnings with respect to unhandled patterns haskore@henning-thielemann.de**20050318194505] [AutoTrack: check generation of documentation haskore@henning-thielemann.de**20050318200148] [AutoTrack: Utils -> Transposeable, it contains only the modulo-transposition class now haskore@henning-thielemann.de**20050318201656] [new: MonadParser, extracted from MIDI.Load haskore@henning-thielemann.de**20050318204215] [AutoTrack: Style.playToString -> playToStream haskore@henning-thielemann.de**20050410160822] [AutoTrack: experimentally added 'harmonic' style haskore@henning-thielemann.de**20050423193633] [notes: Cabal, Testing, IDE haskore@henning-thielemann.de**20050424121336] [type variable 'quant' for times and volumes in Performance.T haskore@henning-thielemann.de**20050424163357 Every day use needs efficiency. In this case 'quant=Float' is a good choice. Property testing needs accuracy. In this case 'quant=Rational' is a good choice. The type variable makes things more complicated but I don't see an easier alternative. ] [manual restructuring: merged Music, Performance, Player into one section haskore@henning-thielemann.de**20050424171015] [replaced MIDI overview as verbatim ASCII image by a crappy Inkscape graphic haskore@henning-thielemann.de**20050424190923] [added QuickCheck properties for the axioms in Equivalence.tex and test them in the test suite haskore@henning-thielemann.de**20050425091430] [(curry id) -> (,) haskore@henning-thielemann.de**20050425215846] [present QuickCheck test functions as alternative form of the axioms haskore@henning-thielemann.de**20050427080926] [limit the size for music trees computed with the QuickCheck.Arbitrary instance for Music.T haskore@henning-thielemann.de**20050430111749] [test algebraic properties only with notes of positive duration haskore@henning-thielemann.de**20050430135957 I detected a pathological counterexample for parallel commutativity for notes of length zero. Namely: m0 = d 0 0 [] m1 = d 0 0 [] +:+ c 0 0 [] Performance.fromMusic (m0 =:= m1) -> [d, d, c] Performance.fromMusic (m1 =:= m0) -> [d, c, d] ] [moved from Hugs 2002-11 to 2005-03 haskore@henning-thielemann.de**20050430151755] [run QuickCheck tests within HUnit haskore@henning-thielemann.de**20050430171843] [run MIDI and CSound tests in the HUnit framework haskore@henning-thielemann.de**20050430181743] [use also transposition, tempo changes, and instrument changes for the construction of random music haskore@henning-thielemann.de**20050501145451 The problem is that 'arbitrary' carries the size information and makes everything smaller, even values which are not related to music size such as the tempo ratio. If the size parameter is too small (untilM (0<) arbitrary) runs forever. ] [toMaybe haskore@henning-thielemann.de**20050501174240] [maximum0 allow computation of durations of empty parallel compositions haskore@henning-thielemann.de**20050501182839] [Music.dropLine': nothing can be dropped from an empty list haskore@henning-thielemann.de**20050501193155] [Optimization.composition removes empty parallel and serial compositions haskore@henning-thielemann.de**20050501202514] [check Music.take and Music.drop with QuickCheck haskore@henning-thielemann.de**20050501202938] [adopt TeX version of the HCAR article haskore@henning-thielemann.de**20050501210300] [HCAR article updated for 2005 spring issue haskore@henning-thielemann.de**20050501210436] [quickCheck for optimizations and Music.reverse haskore@henning-thielemann.de**20050503085527] [now all tests run within HUnit, including infinite music, precedence, grammar, format haskore@henning-thielemann.de**20050503103715] [replace Atom data type by Maybe Note haskore@henning-thielemann.de**20050516182545] [to avoid redundancy use the HUnit package shipped with Hugs-2005-03 haskore@henning-thielemann.de**20050527165536] [Temporal instances for Media.List and Media.Binary don't need instance extensions anymore haskore@henning-thielemann.de**20050613195203] [parametrize Music.T with the note type haskore@henning-thielemann.de**20050614211714 Two note instances are provided: A simple note containing of pitch and attributes (Music.Melody) A note equipped with an instrument (Music.Standard) 'setInstrument' is now 'StdMusic.fromMelody'. Thus the type checker verifies that only one instrument is assigned to each note. ] [note definition moved to module Melody haskore@henning-thielemann.de**20050615184421] [new instance of Music, namely Music.MIDI, supports predefined instruments and drums haskore@henning-thielemann.de**20050615194534] [parametrize Melody with note attribute haskore@henning-thielemann.de**20050616192342] [partitionMaybe based on foldr haskore@henning-thielemann.de**20050617213247] [StdMusic: replaced [NoteAttribute] by record items 'velocity' and 'pfields' haskore@henning-thielemann.de**20050617213429] [fix IOExtensions and move to Haskore.IO Sarah_Eisenstat@brown.edu**20050620172133] [removed GHC directory and adapt Makefile to Haskore.IO haskore@henning-thielemann.de**20050622182709] [MIDI patches suggested by Bo Herlin Sarah_Eisenstat@brown.edu**20050620172436] [rewrite CSound.Orchestra and documentation Sarah_Eisenstat@brown.edu**20050620172312] [fix CSound Tutorial code Sarah_Eisenstat@brown.edu**20050620172351] [changes CSound Orchestra to use a table of function names and argument counts Sarah_Eisenstat@brown.edu**20050621144200] [add "=" to the list of CSound functions Sarah_Eisenstat@brown.edu**20050623183552] [changes Tutorial Pfield references Sarah_Eisenstat@brown.edu**20050623183619] [CSound tutorial: fix problems reported by the test suite haskore@henning-thielemann.de**20050626132114 pluck: changed third argument from 0 to (pchToHz notePit) delay: updated prototype orchestra files ] [CSound: added signatures haskore@henning-thielemann.de**20050626141704] [CSound.OrchestraFunction (module name in singular), some simplifications haskore@henning-thielemann.de**20050626150129] [CSound.Orchestra: LineFunctionDef stores the definition of a signal haskore@henning-thielemann.de**20050626155633] [parametrise Performance with the note type haskore@henning-thielemann.de**20050624204300 The default players support only StdMusic.Note so far. ] [simplified Functor instance of Media, foldBin preserves structure haskore@henning-thielemann.de**20050625134410] [Media.mapM, Music.foldBin haskore@henning-thielemann.de**20050625174228] [conversion from Music to Performance with the State monad with (performance, duration) as result and Context as state haskore@henning-thielemann.de**20050625175801 replaced T' by PState replaced T'' by TLastDur ] [Performance.fromMusic with foldList, simplified fancyPlayer haskore@henning-thielemann.de**20050625210451] [fancyPlayer: interpretation of Slurred was improperly converted to event time differences haskore@henning-thielemann.de**20050626123737] [class Music.Playable.C allows to fetch pitch and velocity from any note type haskore@henning-thielemann.de**20050701141759 We store the context data 'transposition' and 'velocity' in Performance.Events and update this when interpreting phrases. The final pitch and velocity is computed using the new class when it comes to an backend. ] [Haskore.IO -> Haskore.General.IO haskore@henning-thielemann.de**20050710162924] [CSound.Score.getId -> List.lookup, NameMap parametrized with intrument type, RandDist haskore@henning-thielemann.de**20050705203128] [CSound.Score.statementFromEvent does not need Playable class any longer haskore@henning-thielemann.de**20050706203637 Conversion of notes of arbitrary type to back-end specific data is too complex for type classes. ] [CSound.Tutorial: 'scored' includes conversion from Melody; instrument functions have PFields as parameters haskore@henning-thielemann.de**20050708105238] [CSound.Tutorial: resolved merge conflicts in 'scored' haskore@henning-thielemann.de**20050710174221] [CSound.Tutorial: applyPFields haskore@henning-thielemann.de**20050710175738] [PerformanceContext: eliminated restriction to StdMusic haskore@henning-thielemann.de**20050710220717] [Note ordering decoupled from ordering of note record fields haskore@henning-thielemann.de**20050710220908] [CSound.Tutorial: custom note attribute type replacing PFields for more type safety haskore@henning-thielemann.de**20050711164930] [Melody: Split module into Melody (with note attribute type parameter) and Melody.Standard (with fix NoteAttribute type) haskore@henning-thielemann.de**20050712113525] [CSound.Tutorial bug: tut18 provides one instrument but score5 needs two of them haskore@henning-thielemann.de**20050712200620 Replaced score5 by score3. This leads to the same binary sound output. ] [CSound.Tutorial: more consistency checks for instruments in the Music and in the CSound score haskore@henning-thielemann.de**20050712201901] [Haskore.Performance: new directory containing Performance.Context, Player haskore@henning-thielemann.de**20050712205123 The directory Music is now reserved for different instances of Music.T. ] [MIDI.Render: remove 'test' prefix from function names haskore@henning-thielemann.de**20050924221422] [CSound.Score.fromMusicStd now returns a score rather than IO haskore@henning-thielemann.de**20051002164442] [StdMusic: re-export note lengths and other basic stuff from Music haskore@henning-thielemann.de**20051002164815 For simple song it should now suffice to import Melody.Standard and Music.Standard unqualified. For more advanced songs Melody or Music can be imported qualified. ] [HCAR report Nov 2005, included changes from the editor haskore@henning-thielemann.de**20051019162648] [incorporated Paul Hudak's modifications to the Nov 2005 report haskore@henning-thielemann.de**20051020105149] [Re-recorded patch of Sarah Eisenstat: CSound.Orchestra with type parameter for the number of output channels haskore@henning-thielemann.de**20051030153840] [named fields in InstrBlock haskore@henning-thielemann.de**20051030155618] [CSound.Orchestra.Orc -> Orchestra.Cons haskore@henning-thielemann.de**20051030160234] [getChannelCount works also for undefined values of their type haskore@henning-thielemann.de**20051030162837] [simplified monadic code for Delay lines and the Orc monad haskore@henning-thielemann.de**20051030175730] [CSound.Orchestra: CSound listings reverted to 'verbatim' environment; fixed typesetting of listings with non-executable code haskore@henning-thielemann.de**20051030180154] [UNIX shell script for executing all CSound examples haskore@henning-thielemann.de**20051030193328] [CSound.Tutorial: Arguments of delay were flipped haskore@henning-thielemann.de**20051030200539 With the right argument order tut17 can be fixed. tut20 remains broken because it expects that the delay time of 'delay' can be controlled in time. Neither CSound V4 nor V5 seems to support that. ] [CSound.Tutorial: use Mono output where only mono instruments where played haskore@henning-thielemann.de**20051030202821] [simplified UserPatchMap.partialMatch haskore@henning-thielemann.de**20051101215909] [UserPatchMap.deflt defined with GeneralMidi.Instrument haskore@henning-thielemann.de**20051101222803] [simplified MIDI.UserPatchMap.fromInstruments haskore@henning-thielemann.de**20051204134440] [StandardMusic: distinguish between melody instrument and drum notes haskore@henning-thielemann.de**20051102083407] [MIDI: replaced Event type names containing primes, instead SchedEvent for events with time information haskore@henning-thielemann.de**20051113143301] [Utility: zipWithMatch, zipWithMatch3 for lists of equal length; application to midi event lists in MIDI.Write haskore@henning-thielemann.de**20051113145016] [Utility: 'limit' is a combination of 'min' and 'max' haskore@henning-thielemann.de**20051113162553] [uniform order of velocity and pitch in function arguments and records haskore@henning-thielemann.de**20051113181555] [MIDI.Load: simplifications using liftM and liftM2 haskore@henning-thielemann.de**20051116230603] [new module: TimeOrderedList generalises MIDI event list haskore@henning-thielemann.de**20051120170226] [use TimeOrderedList.T for performance haskore@henning-thielemann.de**20051120193848] [simplified TimeOrderedList.partition using pairMap haskore@henning-thielemann.de**20051120213808] [TimeOrderedList: discretizing of times, simplifies MIDI.Write.eventsFromPf haskore@henning-thielemann.de**20051130102847] [MidiFile: defined normalVelocity, maximumVelocity haskore@henning-thielemann.de**20051204183321] [Performance.BackEnd: new module providing an interim performance structure which contains a back end specific representation of notes haskore@henning-thielemann.de**20051204184348] [Player: PasHandler -> PhraseInterpreter haskore@henning-thielemann.de**20051031113228] [moved MIDI.Read.splitBy to General.Utility haskore@henning-thielemann.de**20051210125031] [MIDI.Read: use TimeOrderedList for RichEvents haskore@henning-thielemann.de**20051210132117] [MIDI.Read: simplified some top-level pattern matching using 'case' haskore@henning-thielemann.de**20051210143829] [MIDI.Read: use MidiNote.T in definition of RichEvent haskore@henning-thielemann.de**20051210180915] [MIDI.Read: readTrack does now process a back-end performance haskore@henning-thielemann.de**20051210230833] [TimeOrderList.partition & slice: predicate depends on event body only haskore@henning-thielemann.de**20051210231841] [MIDI.Read: separated conversion from MidiNote to StdNote from readTrack haskore@henning-thielemann.de**20051211072133] [MidiFile: extracted sorting of coinciding events to TimeOrderedList haskore@henning-thielemann.de**20051211112320] [Utility: new flipPair haskore@henning-thielemann.de**20051211130708] [MIDI.Read: generic conversion from performance to music moved to Performance.BackEnd haskore@henning-thielemann.de**20051211130941] [General.Utility: extracted new modules General.String and General.Monad haskore@henning-thielemann.de**20051211134809] [MIDI.Read: UserPatchMap -> ChannelPatchMap haskore@henning-thielemann.de**20051211145646] [MIDI.Read: distinguish between generic toMusic and specialized toMusicGM (General MIDI) haskore@henning-thielemann.de**20051211153319] [class Playable removed haskore@henning-thielemann.de**20051211154615] [Music.Rhythmic: generalisation of Music.Standard with type parameter for instrument and drum haskore@henning-thielemann.de**20051211170117] [MIDI.UserPatchMap with instrument type parameter haskore@henning-thielemann.de**20051211182529] [MIDI.Write: use true functions instead of UserPatchMap.T haskore@henning-thielemann.de**20051216183952] [test suite: start tkdiff only if contents differ haskore@henning-thielemann.de**20051223185618] [RhyMusic: switched order of type parameters 'instr' and 'drum' haskore@henning-thielemann.de**20051223191119] [module Music.GeneralMIDI is an instance of Music.Rhythmic with enumerations for Drum and Instr, replaced most occurences of StdMusic by MidiMusic haskore@henning-thielemann.de**20051223201417] [MIDI.General: cleaned up instrument and drum related definitions haskore@henning-thielemann.de**20051223234133] [UserPatchMap -> InstrumentMap, provides both instrument and drum map, now haskore@henning-thielemann.de**20051225120657] [MidiFile.drumKey -> GeneralMidi.drumMinKey haskore@henning-thielemann.de**20051225154451] [InstrumentMap: distinguish between conversion from and to MIDI parameters haskore@henning-thielemann.de**20051225154647] [MIDI: moved conversion between MidiNote and MidiEvent to MIDI.Note; simplified ReadMidi.searchNoteOff haskore@henning-thielemann.de**20051226213825] [Music.Rhythmic.Note: removed pFields because they are CSound specific and instrument specific haskore@henning-thielemann.de**20051227100341 Additional parameters should be carried in 'instr' data types. Replaced PFields constructor in NoteAttributes by Vibrato and Tremolo. They are still unused. ] [Performance.BackEnd: new fromPerformance haskore@henning-thielemann.de**20051227112230] [CSound.Score: assemble statement lines with 'unwords' haskore@henning-thielemann.de**20051227113352] [CSound: new modules InstrumentMap and Note, analogous to MIDI haskore@henning-thielemann.de**20051227113533] [MIDI.Note.velocityFromStd: velocity parameter with type Rational haskore@henning-thielemann.de**20051227152210] [CSound.Tutorial: based on Music.Rhythmic, no longer a custom note definition haskore@henning-thielemann.de**20051228104338] [CSound.Generator: separated generator definitions from Score module haskore@henning-thielemann.de**20051228111741] [Performance: eDur -> eventDur, eNote -> eventNote, eVelocity -> eventDynamics, etc. haskore@henning-thielemann.de**20051231110844] [Performance: cDur -> contextDur, cKey -> contextTranspose, cVelocity -> contextDynamics haskore@henning-thielemann.de**20051231113329] [MIDI.Render: play songs with automatically generated patch map using General MIDI instruments haskore@henning-thielemann.de**20060101162133] [Chord.fromIntervals got a parameter for inversion haskore@henning-thielemann.de**20060101163527] [WhiteChristmas: demonstrates usage of chords and drums haskore@henning-thielemann.de**20060101164125] [Scale.continue: continues a scale to all octaves haskore@henning-thielemann.de**20060101164717] [Chord: for a sequence of chords compute a sequence of inversions such that the pitches of the chords vary minimally haskore@henning-thielemann.de**20060102092001] [WhiteChristmas: use automatic inversion planning haskore@henning-thielemann.de**20060102092438] [Chord, inversion planning: construct the notes from scratch haskore@henning-thielemann.de**20060102103737] [WhiteChristmas: chords without octave specification haskore@henning-thielemann.de**20060102104411] [Chord, inversion planning: specify trend by the center pitch instead of the inversion of the boundary chords haskore@henning-thielemann.de**20060102111005] [WhiteChristmas: specify trend by the center pitch instead of the inversion of the boundary chords haskore@henning-thielemann.de**20060102111253] [Cabalize Haskore Gabriel Ebner **20051204003315] [ChordSymbol: parse and format Jazz chord symbols haskore@henning-thielemann.de**20060105105200] [ChordSymbol.typeToChord: put relative and absolute pitch specifications into one list haskore@henning-thielemann.de**20060105140614] [Basic.ChordType: new module extracted from AutoTrack/ChordSymbol.lhs; handles chord types like minor, major and its modifications haskore@henning-thielemann.de**20060105205737] [specialised signatures for {Midi,Std}Music.fromMelody and fromMelodyIgnoreAttr haskore@henning-thielemann.de**20060304214550] [LoopTreeTagged: data structure for an arbitrary(?) directed graph represented as tree with feedback haskore@henning-thielemann.de**20060305163910] [LoopTreeTagged: simplified unwind by using a list of collected tags, instead of doing this implicit by the construction of a cascaded comparison function haskore@henning-thielemann.de**20060305165417] [LoopTreeTagged: check for multiple definition of a tag haskore@henning-thielemann.de**20060305182901] [new module LoopTreeRecursive: similar to LoopTreeTagged but more comfortable to use haskore@henning-thielemann.de**20060305183152] [LoopTreeRecursive: toTagged and fromTagged with flexible tag type haskore@henning-thielemann.de**20060306112354] [LoopTreeRecursive: toTaggedUnique assigns globally unique labels haskore@henning-thielemann.de**20060306113913] [comments on the Rhythmic Music data type and related changes in Drum and MIDI handling haskore@henning-thielemann.de**20060307115524] [the value of Staccato is interpreted as reciprocal by the FancyPlayer haskore@henning-thielemann.de**20060307143105] [Player: added functions for absolute interpretation of Staccato, Legato, Slurred haskore@henning-thielemann.de**20060307170908] [Player: make absolute interpretation of Staccato, Legato, Slurred default haskore@henning-thielemann.de**20060307174540] [CSound.Tutorial: replace fromIntegral by the specialised function tableNumber in order to discriminate table numbers from floating point numbers haskore@henning-thielemann.de**20060308105010] [TestSuite: separate the actions on CCSound examples (verify, diff, update) from the generation of the contents haskore@henning-thielemann.de**20060308120122] [CSound.Orchestra: new SigExp constructor TableNumber should be prefered to encoding table numbers with floating point numbers, as in constructor Const haskore@henning-thielemann.de**20060308125202] [CSound.Orchestra: several function definitions by extensive pattern matching replaced by 'case's haskore@henning-thielemann.de**20060308140533] [Utility.mapInit: alternative implementation using foldrf haskore@henning-thielemann.de**20060308144241] [Utility.mapInit: another implementation using plain foldr haskore@henning-thielemann.de**20060308145521] [CSound.Tutorial: play failed for stereo sounds, fixed that by using AIFF output of CSound haskore@henning-thielemann.de**20060308152338] [CSound.Tutorial: replaced some \tt commands by more specific ones, e.g. \function haskore@henning-thielemann.de**20060308154636] [CSound.Tutorial: modified reverb examples such that the effects can be perceived clearly, use of legato effect haskore@henning-thielemann.de**20060308154912] [CSound.Tutorial: fixed tut20 by replacing 'delay' by 'vdelay' haskore@henning-thielemann.de**20060308182702] [CSound.Tutorial: added tut21 and tut22which demonstrate the use of general feedback loops haskore@henning-thielemann.de**20060308183312] [CSound.Orchestra: reordered arguments of signal processors to a more Haskellish way, replaced \tt by more specific macros haskore@henning-thielemann.de**20060309140330] [new modules: LoopTreeRecursiveGen, LoopTreeTaggedGen for trees with loops but a structure of sub-trees which is hidden in nodes of generic type haskore@henning-thielemann.de**20060309191118] [LoopTreeRecursiveGen, LoopTreeTaggedGen: define instances for Eq and Show, which require undecidable instance and cause instance context reduction loops when used in CSound.Orchestra.SigExp haskore@henning-thielemann.de**20060310113824] [LoopTree*Gen: avoid undecidable instances and other difficulties by the classes CollEqual and CollShow haskore@henning-thielemann.de**20060311221011 They allow for implementation of Eq and Show instances for collections without having instances for the members. However coding instances for these type classes is boring. ] [CSound.Orchestra: build SigExp on top of LoopTreeRecursiveGen haskore@henning-thielemann.de**20060311221550 The same data placed in a LoopTreeTaggedGen is used for output. That is the former runFix is replaced by the conversion from LoopTreeRecursiveGen to LoopTreeTaggedGen. ] [CSound.Orchestra: reduced indirections in Index and MultiDef constructor, thus eliminated warnings about unhandled cases haskore@henning-thielemann.de**20060311231142] [new: Example.Guitar demonstrates simulation of playing chords on a guitar haskore@henning-thielemann.de**20060312171027] [CSound.Orchestra: CollShow and CollEq instances of SigTerm can re-use Show and Eq instances since the signature of collShowsPrec and collEqual are now specialised to LoopTreeTagged.T haskore@henning-thielemann.de**20060313093230] [Port Shell to ghc-6.4's GHC.Handle API Gabriel Ebner **20051204003012] [adaption to GHC-6.4.1: remove Data.FunctorM haskore@henning-thielemann.de**20060326210406] [adaption to GHC-6.4.1: use HUnit from GHC libraries haskore@henning-thielemann.de**20060326211413] [adaption to GHC-6.4.1: replace Data.FiniteMap by Data.Map haskore@henning-thielemann.de**20060326222123 Wrapper Haskore.General.Map provides more convenient signatures for lookup functions. ] [adaption to GHC-6.4.1: reduced redundant imports haskore@henning-thielemann.de**20060326224639] [adaption to GHC-6.4.1: Debug.QuickCheck -> Test.QuickCheck haskore@henning-thielemann.de**20060326224846] [initial support for SuperCollider haskore@henning-thielemann.de**20060329074359] [ChildSong6: use 'loudness' instead of 'velocity' for bassline haskore@henning-thielemann.de**20060329075352] [SuperCollider.example: gimmick - lowpass filtered frequency control results in a glissando effect haskore@henning-thielemann.de**20060329214206] [SuperCollider: start a new sound for each note haskore@henning-thielemann.de**20060330054910] [SuperCollider: pass sound parameters immediately to s_new haskore@henning-thielemann.de**20060330072910] [generator for unique ids with recycling haskore@henning-thielemann.de**20060330204956] [SuperCollider.Play: support of polyphonic music haskore@henning-thielemann.de**20060330205924] [Utility: equalField, equalRecord for easy implementation of Eq instances haskore@henning-thielemann.de**20060331074310] [SuperCollider: play music with multiple instruments haskore@henning-thielemann.de**20060331074557] [removed SuperCollider.Play from Hugs modules, because Hugs has problems with the casting tricks of the SuperCollider wrapper haskore@henning-thielemann.de**20060331075234] [Schedule: new module for running IO actions according to a time table haskore@henning-thielemann.de**20060331082211] [Basic.Schedule: threadDelay seems to wait one tick too long, manually reduced waiting time haskore@henning-thielemann.de**20060402204241] [SuperCollider.Play: use multiSet method instead of multiple set haskore@henning-thielemann.de**20060402205048] [SuperCollider.Play: separated Example module haskore@henning-thielemann.de**20060402222819] [SuperCollider: added server startup code to the Makefile haskore@henning-thielemann.de**20060402223044] [SuperCollider.Performance: new module extracted from SuperCollider.Play haskore@henning-thielemann.de**20060403095948] [SuperCollider.Play: open the network file handle only once per performance haskore@henning-thielemann.de**20060403103308] [SuperCollider.InstrumentMap added haskore@henning-thielemann.de**20060403132845] [TimeOrderedList: splitByTime, flatten, mapCoincident haskore@henning-thielemann.de**20060403150146] [Performance: better support for trailing rests haskore@henning-thielemann.de**20060403173713] [SuperCollider.Play: playing now also includes the trailing rest haskore@henning-thielemann.de**20060403174220] [SuperCollider.Example: more complex example based on Rhythmic music with custom instruments haskore@henning-thielemann.de**20060403211448] [CSound.Note: Pitch is wrapped with Maybe haskore@henning-thielemann.de**20060404101502] [TimeOrderedList: split into TimeOrderedList and TimeOrderedListPad haskore@henning-thielemann.de**20060404110708] [Notes: some remarks on GHC-6.4.1, generalized instruments haskore@henning-thielemann.de**20060404111404] [Music.Format -> Process.Format haskore@henning-thielemann.de**20060404111958] [SuperCollider.Example: add drum sounds and rhythm haskore@henning-thielemann.de**20060404124122] [Haskore.cabal: included SuperCollider interface haskore@henning-thielemann.de**20060411164658] [adapted files to extra wishes of the unlit invoked by 'Setup.lhs haddock' haskore@henning-thielemann.de**20060411220129 expanded TABs to spaces replaced some blank lines by > sign ] [attach interpreter info to Setup haskore@henning-thielemann.de**20060412110339] [only import modules from the hierarchy haskore@henning-thielemann.de**20060412110848] [Cabal: added test suite as executable haskore@henning-thielemann.de**20060412111224] [HCAR article updated for 2006 spring issue haskore@henning-thielemann.de**20060421142212] [TimeList: mapBody, mapTime, FunctorM instance added haskore@henning-thielemann.de**20060502181715] [adapt to changes in SuperCollider.UId haskore@henning-thielemann.de**20060520185136] [Utility.splitInit added, roundDiff generlized to Integral types haskore@henning-thielemann.de**20060520185337] [Schedule: added routines which always check system time in order to keep in sync haskore@henning-thielemann.de**20060520190630] [update Readme haskore@henning-thielemann.de**20060712122234] [remove Shell module and import it from the new ShellPipe package haskore@henning-thielemann.de**20060719080035] [adapt to recent changes in the SuperCollider wrapper Hsc haskore@henning-thielemann.de**20060828091540] [example song: Heute wollen wir das Ränzlein schnüren haskore@henning-thielemann.de**20060914183906] [Raenzlein: added chord accompaniment haskore@henning-thielemann.de**20060914190810] [SuperCollider interface: adapt to Sound.SC3 module naming scheme haskore@henning-thielemann.de**20060916144147] [IO: use 'bracket' for file access haskore@henning-thielemann.de**20060922134745] [MonadParser, MIDI.Load: replaced parser monad by a State transformer on top of Maybe haskore@henning-thielemann.de**20060929123214] [Readme: how to start a SuperCollider example haskore@henning-thielemann.de**20061108135731] [NOTES: flexible instruments are implemented now haskore@henning-thielemann.de**20061110210218] [Schedule: split into modules Timer and Timer.Thread haskore@henning-thielemann.de**20061112002416 moved TimeList specific parts to TimeOrderedList and TimeOrderedListPad ] [Timer: made waitUntil a generic routine haskore@henning-thielemann.de**20061112095811] [Timer.wait with Integer number of microseconds implemented by repeated waitInt haskore@henning-thielemann.de**20061112103840] [Timer.Posix: timer based on Unix' sleep, it is as inaccurate as threadDelay though haskore@henning-thielemann.de**20061112112107] [Chord interval-pitch conversions: eliminated 'head' by case handling haskore@henning-thielemann.de**20061117084528] [Utility.headWithDefault: reduces usage of 'head', which is a partial function haskore@henning-thielemann.de**20061117090106] [TimeList: add runTimeStamp haskore@henning-thielemann.de**20061205072239 runTimeStamp passes the favorized execution time to the action generalized schedule functions to IO like monads in appreciation to UDPMonad ] [SuperCollider: play music with time-stamped messages, this does still not work as expected haskore@henning-thielemann.de**20061205072818] [MonadParser: module removed haskore@henning-thielemann.de**20061205074842] [moved untilM to Haskore.General.Monad haskore@henning-thielemann.de**20061205080712] [LoopTreeRecursive: use MonadState class instead of fixed State type haskore@henning-thielemann.de**20061227230947] [Graph: generalizes LoopTrees by a sharing mechanism haskore@henning-thielemann.de**20061228110443] [LoopTree*: trees have branches, not nodes haskore@henning-thielemann.de**20061228141526] [TagDictionary: manage branch points in a graph haskore@henning-thielemann.de**20061228141816] [RhyMusic.noteFromMelodyNote allows conversion from melodies with arbitrary attributes to rhythmic music haskore@henning-thielemann.de**20061229195527] [RhyMusic.fromMelody -> RhyMusic.fromStdMelody haskore@henning-thielemann.de**20061229201147] [RhyMusic.fromMelody added, converts from general melodies haskore@henning-thielemann.de**20061229202850] [SuperCollider.Performance: simplified eventsFromNotes haskore@henning-thielemann.de**20070103211324] [TimeList.runTimeStampGrouped: groups after quantization and thus avoids ordering errors by SuperCollider haskore@henning-thielemann.de**20070103213309] [TimeList.runTimeStampGrouped passes the original times to the event actions haskore@henning-thielemann.de**20070103231804] [perform formatting test with GHC because Hugs seems to convert our binary MIDI files to UTF-8 haskore@henning-thielemann.de**20070104112858] [MIDI files: use [Word8] instead of String haskore@henning-thielemann.de**20070104113912] [SuperCollider.Play: adapt to multi-parameter messages s_new, n_set haskore@henning-thielemann.de**20070128193522] [IdGenerator: different implementations for testing haskore@henning-thielemann.de**20070129084357] [SuperCollider.InstrumentMap/Note: unliterated haskore@henning-thielemann.de**20070129085616] [SuperCollider.InstrumentMap: more sophisticated table of instrument names and SuperCollider graphs haskore@henning-thielemann.de**20070129100657] [SuperCollider.InstrumentMap: simplified construction of associations haskore@henning-thielemann.de**20070129110835] [SuperCollider.InstrumentMap: added support for drums haskore@henning-thielemann.de**20070130093954] [SuperCollider: use new instrument map with parameters haskore@henning-thielemann.de**20070130100322] [HCAR article updated for 2006 autumn issue haskore@henning-thielemann.de**20070315063711] [SuperCollider.InstrumentMap, Example: simplifications haskore@henning-thielemann.de**20070315082310] [Notes: SuperCollider.InstrumentMap haskore@henning-thielemann.de**20070315084201] [SuperCollider.InstrumentMap: type synonym for tables of instruments without parameters haskore@henning-thielemann.de**20070315085101] [CSound.SoundMap: copy of SuperCollider.InstrumentMap, allows instrument with parameters haskore@henning-thielemann.de**20070315095338] [CSound.Tutorial: test voice (phoneme) signal generator haskore@henning-thielemann.de**20070315095603] [SuperCollider.InstrumentMap: in accordance with CSoundTutorial support instruments with 4 parameters haskore@henning-thielemann.de**20070315095913] [example song: Heut ist ein besondrer Tag haskore@henning-thielemann.de**20070315100106] [CSound.Tutorial -> CSound.TutorialCustom haskore@henning-thielemann.de**20070317102936] [CSound.Tutorial re-added with less custom code haskore@henning-thielemann.de**20070317103940] [CSound.Tutorial: removed custom code haskore@henning-thielemann.de**20070317111723] [CSound.Instr: replaced by newtype Instrument haskore@henning-thielemann.de**20070317150639] [CSound.SoundMap: make noteDur a parameter of InstrumentSigExp haskore@henning-thielemann.de**20070317152650] [CSound.SoundMap: creation of InstrBlock taken from Tutorial haskore@henning-thielemann.de**20070317194442] [CSound.Orchestra: more efficient and clean handling of global signals haskore@henning-thielemann.de**20070317195104] [CSound.Orchestra: build orchestra file in a line oriented manner haskore@henning-thielemann.de**20070317213224] [MidiFile: converted ControlNum to an enumeration haskore@henning-thielemann.de**20070318105530] [MIDI: turn Program, Channel, Pitch, Velocity from Int to types with range checking constructors haskore@henning-thielemann.de**20070318135709] [MidiNote: order of fields adapted to CSound.Note and SuperCollider.Note haskore@henning-thielemann.de**20070318202936] [Test: show numbers of atomic tests if requested haskore@henning-thielemann.de**20070318205800] [TimeList: avoid 'head' by 'case' haskore@henning-thielemann.de**20070318210109] [TimeList: 'case' -> listToMaybe haskore@henning-thielemann.de**20070318212725] [Notes: instrument maps haskore@henning-thielemann.de**20070319070922] [Parser: module re-added, re-introduce 'force' for more laziness on parsing haskore@henning-thielemann.de**20070521062021] [SuperCollider: adapt to Transport type class haskore@henning-thielemann.de**20070625064543] [SuperCollider.Example: string sound with computed random values haskore@henning-thielemann.de**20070625071456] [SuperCollider.Life: module for simplified life music performance haskore@henning-thielemann.de**20070630180850] [Makefile: try to start JACK in a real-time-proof manner haskore@henning-thielemann.de**20070630181249] [SuperCollider.InstrumentMap: factor out parameter handling - withXParameters haskore@henning-thielemann.de**20070701095257] [SuperCollider.scheduleMusic -> performance haskore@henning-thielemann.de**20070701102635] [SuperCollider.Life -> InstallPlay haskore@henning-thielemann.de**20070703081544] [SuperCollider.Life: re-added with functions that work immediately in the IO monad haskore@henning-thielemann.de**20070703091306] [SuperCollider.Life: support global effects on instruments haskore@henning-thielemann.de**20070705081952] [SuperCollider.Life: interactive playing of tones haskore@henning-thielemann.de**20070705095208] [SuperCollider.Life.playKeyboard: show names of played notes haskore@henning-thielemann.de**20070705100829] [Process.Format: separate functions for formatting notes and rests haskore@henning-thielemann.de**20070706151110] [Interface.MED.Text: import print-out from OctaMED haskore@henning-thielemann.de**20070706152054] [SuperCollider.Life: bass for Air song haskore@henning-thielemann.de**20070706162618] [SuperCollider.Life: fixed handling of velocities haskore@henning-thielemann.de**20070707152910] [SuperCollider.Music.mapDurNote added, map a note inclusively of its duration haskore@henning-thielemann.de**20070707210950] [SuperCollider.Life.air: with global effects, rhythm, melody haskore@henning-thielemann.de**20070707211709] [SuperCollider.Performance: use type synonym haskore@henning-thielemann.de**20070707213207] [SuperCollider.Life: factor out Example.Air and Play.Channel haskore@henning-thielemann.de**20070708111805] [SuperCollider.Play.Channel: distinct InstrumentParameters and DrumParameters types haskore@henning-thielemann.de**20070708114944] [SuperCollider.InstallPlay -> SuperCollider.Play.Install haskore@henning-thielemann.de**20070708115848] [SuperCollider.Play.Install: Channel management moved to several small modules haskore@henning-thielemann.de**20070708173230] [SuperCollider.Play.melody: add 'out' UGen to instrument haskore@henning-thielemann.de**20070708173949] [SuperCollider.Example.Air: xylophone, new chords haskore@henning-thielemann.de**20070708181153] [SuperCollider.Example.Air: random pikes in introduction haskore@henning-thielemann.de**20070708194659] [MIDI.Render: play by Timidity with JACK haskore@henning-thielemann.de**20070709091026] [SuperCollider.Air: simplified chords at the end haskore@henning-thielemann.de**20070715153407] [Makefile, start of Jack&SuperCollider: sudo should be applied outside 'make' haskore@henning-thielemann.de**20070715153828] [Readme: how to start Jack&SuperCollider haskore@henning-thielemann.de**20070715154047] [HCAR article updated for 2007 spring issue; mainly references to other projects were removed haskore@henning-thielemann.de**20070715154403] [Timer.Immediate: a timer that doesn't wait and can be used for non-real-time application haskore@henning-thielemann.de**20070715170339] [SuperCollider.Play: the final stop message is also send with a time stamp haskore@henning-thielemann.de**20070715172417] [Timer.waitUntilSeconds added haskore@henning-thielemann.de**20070721112153] [Timer.getClockTime: turned into a method of the Timer record haskore@henning-thielemann.de**20070721121141] [SuperCollider.Play: the installation of sounds is also send as message in the performance haskore@henning-thielemann.de**20070721164253] [SuperCollider.Play: prepend initial 'reset' message to the stream of messages haskore@henning-thielemann.de**20070808151158] [Haskore.cabal: use supercollider-ht package haskore@henning-thielemann.de**20070810154727] [SuperCollider: adapt to recent changes in hsc3 haskore@henning-thielemann.de**20070812181155] [SuperCollider.Example.glissando: soften reverb haskore@henning-thielemann.de**20070814080209] [SuperCollider.Play.melody: generate a lazy list of OSC messages instead of writing them to a file immediately haskore@henning-thielemann.de**20070814081842] [SuperCollider.Example.glissandoToFile: render audio file for the glissando example haskore@henning-thielemann.de**20070814082137] [SuperCollider.Play: separate initialization (synchronous) and playing phase (asynchronous) haskore@henning-thielemann.de**20070816104856] [SuperCollider.Example.glissando: 'lag' is the right choice for smoothening the frequency control haskore@henning-thielemann.de**20070816123656] [SuperCollider.Play: use Score data type for both kinds of music (melody and general music) haskore@henning-thielemann.de**20070816144411] [SuperCollider.Schedule: module extracted from Play for generation of collections of OpenSoundControl messages for a SuperCollider performance haskore@henning-thielemann.de**20070817080327] [SuperCollider, MIDI.Render, CSound: rhyMusic -> rhythmicMusic, make NoParam variant the default one haskore@henning-thielemann.de**20070817103845 SuperCollider.InstrumentMap -> SoundMap ] [SuperCollider.Schedule: generate schedules for rhythmic music haskore@henning-thielemann.de**20070817165949] [SuperCollider.Render: support for non-realtime synthesis haskore@henning-thielemann.de**20070817175427] [SuperCollider.Example: provide schedules for all examples, thus they can be rendered to disk haskore@henning-thielemann.de**20070817183812] [SuperCollider.Example.strings: lfSaw allows start phases different from zero, random phases eliminate strong attack of the string sound haskore@henning-thielemann.de**20070817185139] [SuperCollider: allocate unique NodeId for global effects haskore@henning-thielemann.de**20070818204110] [SuperCollider: factor out handling of instruments with and without parameters from Schedule.fromMusic haskore@henning-thielemann.de**20070819184657] [SuperCollider.Schedule.Install+Channel: create schedules from songs without sound maps, similar to the Play/* modules haskore@henning-thielemann.de**20070820094609] [SuperCollider.Life -> SuperCollider.Play.Life haskore@henning-thielemann.de**20070821063538] [SuperCollider.Schedule.fromMusicGlobalEffect: make it working haskore@henning-thielemann.de**20070821091317 separate attachment of UGen parameters and output channel assignment avoid cascaded application of SCIO.replaceOut and SCIO.out ] [SuperCollider.Schedule.fromRhythmicMusicSoundEffects: allows instrument specific effects for common rhythmic musics haskore@henning-thielemann.de**20070822124539] [SuperCollider: fixed import and export lists haskore@henning-thielemann.de**20070823093332] [Utility.splitBy: implement using segmentBefore, because we relied on a particular implementation of groupBy which may change haskore@henning-thielemann.de**20070830070821] [SuperCollider.Example: capitalized file names haskore@henning-thielemann.de**20070909111437] [SuperCollider.Example: explicitly clip signal haskore@henning-thielemann.de**20070909111837 We must clip in order to prevent wrap-around high values when writing to an Int16 file. Respect unconventionial parameter order of clip2 ] [PlayCSoundExamples.sh: keep the rendered songs haskore@henning-thielemann.de**20070910083439] [Performance.Fancy, Default: provide conversions from music to performance with default parameters haskore@henning-thielemann.de**20070910133152 turn more RhyMusic into RhythmicMusic ] [Performance.fromMusic with initial changes on the context haskore@henning-thielemann.de**20070910142946] [Haskore.cabal: more details haskore@henning-thielemann.de**20070910161604] [Basic.Duration: new module for definition of note durations and formatting haskore@henning-thielemann.de**20070911095710] [AutoTrack.Rhythm.withDrum, withMusic: switched parameter order haskore@henning-thielemann.de**20070912082937] [Haskore.Composition: new directory for composition support haskore@henning-thielemann.de**20070912095841] [Readme: explain usage of SuperCollider.playKeyboard haskore@henning-thielemann.de**20070913101641] [SuperCollider.SoundMap: use a phantom type parameter for distinction of Instrument and Drum haskore@henning-thielemann.de**20070913102152 now we need only one version of most instrument functions while maintaining type safety ] [SuperCollider: unify more *Instr* and *Drum* function pairs to *Sound* functions haskore@henning-thielemann.de**20070913190720] [SuperCollider.Schedule.Install,Channel: custom Environment type Channel: automatic reservation of the channels for the audible output haskore@henning-thielemann.de**20070913202936] [ContextFreeGrammar: use maximumKey haskore@henning-thielemann.de**20070916075413] [Media: note on FunctorM -> Traversable haskore@henning-thielemann.de**20070916081543] [SuperCollider.Performance.eventsFromNotes: try a different approach, which does not need Either haskore@henning-thielemann.de**20070916192915] [SuperCollider.Performance: support instruments with duration dependent sound haskore@henning-thielemann.de**20070916200745 This alone is not of much use, because the example sounds we have dependent both on duration and on overlap, but overlap is still specified as tempo dependent 'legato'. ] [revised Notes and discussion of earlier modifications haskore@henning-thielemann.de**20070923133738] [ShellPipe -> shell-pipe haskore@henning-thielemann.de**20070930111552] [TimeListPad.append, concat: added haskore@henning-thielemann.de**20070930162301] [Performance: replace State monad by Reader monad haskore@henning-thielemann.de**20070930163631 Actually we don't even need Monad functionality but only Applicative ] [fancy player: split handling of several types of phrases haskore@henning-thielemann.de**20070930171623] [Media.fold*Flat -> switch* haskore@henning-thielemann.de**20071002091550] [Medium.Controlled, Medium.LabeledControlled: types of media which integrate functionality which was added by Music so far haskore@henning-thielemann.de**20071002092941] [Music: use Medium.Controlled as basis for the Music datatype haskore@henning-thielemann.de**20071003202849] [Optimization of controllers: use partitionMaybe and cumulation of controllers haskore@henning-thielemann.de**20071003211734] [ContextFreeGrammer for Medium.Controlled: re-use functions from the corresponding module for plain Medium haskore@henning-thielemann.de**20071004093048] [Music.filter, partition, partitionMaybe added haskore@henning-thielemann.de**20071005085032] [TimeList: filter, partition, foldr haskore@henning-thielemann.de**20071019102354] [Performance: preserve rests temporarily in order to make conversion to Performance more lazy haskore@henning-thielemann.de**20071019103133 This allows certain recursive musics like mel = a 0 wn () +:+ b 1 wn () =:= rest qn +:+ mel ] [CSound, SuperCollider: distinguish between Parameter and Attribute haskore@henning-thielemann.de**20071020160227 Parameters are frequency, velocity, duration Attributes are optional information replace Parameter by Attribute in many identifiers, especially SuperCollider.Note.fromRhyNoteNoParam ] [SuperCollider.SoundMap: turn the Sound type from a pure black box into a function which maps a parameter black box to a UGen haskore@henning-thielemann.de**20071020162828 Currently parameters in the parameter black box cannot be modified and thus it is safely implemented as 'undefined' :-) ] [SuperCollider.SoundMap: equip InstrumentParameters and DrumParameters with values haskore@henning-thielemann.de**20071020180727 SoundParameter class added ] [TimeOrderedList: use event-list package haskore@henning-thielemann.de**20071021101533] [TimeOrderedList, MIDI: use EventList abstractions, avoid constructors haskore@henning-thielemann.de**20071024140221] [SuperCollider: use EventList abstractions, avoid constructors haskore@henning-thielemann.de**20071025195910] [Performance: use EventList abstractions, avoid constructors haskore@henning-thielemann.de**20071026102626] [Performance: remove SchedEvent type synonym for more abstraction haskore@henning-thielemann.de**20071026133756] [CSound.Score: use EventList abstractions, avoid constructors haskore@henning-thielemann.de**20071026141526] [TimeList: hide Event structure haskore@henning-thielemann.de**20071026143003] [TimeList: hide list structure haskore@henning-thielemann.de**20071103214616] [SuperCollider: automated tests haskore@henning-thielemann.de**20071103220036] [Player: use TimeListPad.map* functions haskore@henning-thielemann.de**20071104094650] [TimeListPad: hide list structure haskore@henning-thielemann.de**20071109075626] [TimeList.segmentBefore: re-added because it doesn't fit into EventList package haskore@henning-thielemann.de**20071109102929] [MidiRead.prepareTrack avoids code duplication haskore@henning-thielemann.de**20071109104017] [TimeOrderedList: custom data structure for event lists with absolute time stamps haskore@henning-thielemann.de**20071110170549] [TimeOrderListPad: no longer use TimeOrderedList.runCore, put more service into TimeOrderedList.runCore for the TimeOrderedList.run functions haskore@henning-thielemann.de**20071110171435] [SuperCollider.Example.Morph for Abi95 video haskore@henning-thielemann.de**20071115224120] [HCAR article updated for 2007 autumn issue haskore@henning-thielemann.de**20071128144633] [adapt to event-list-0.0.4: haskore@henning-thielemann.de**20071203080618 distinct types for relative and absolute event lists type for non-negative values SuperCollider.Note without type parameter ] [Duration.T: turn into a NonNegative.Wrapper.Rational haskore@henning-thielemann.de**20071203201635] [extracted MIDI definitions to a separate package and import it haskore@henning-thielemann.de**20071204132610] [General.MIDI: extracted and imported from package 'midi' haskore@henning-thielemann.de**20071204154950] [Test suite: use Random instance of GeneralMIDI.Instrument and GeneralMIDI.Drum haskore@henning-thielemann.de**20071204155551] [notes on local effects haskore@henning-thielemann.de**20071204160229] [adapt to midi-0.0.3: NonNeg.Integer values for MIDI times haskore@henning-thielemann.de**20071205113556] [MarkovChain: extracted into separate package and imported haskore@henning-thielemann.de**20071207111123] [adapt to non-negative package haskore@henning-thielemann.de**20071212151911] [Performance.Fancy: defltMap -> fancyMap, was a copy&paste mistake haskore@henning-thielemann.de**20071212202223] [Guitar: replaced negative durations by values of type Duration.Offset, added this type to Duration haskore@henning-thielemann.de**20071212203658] [use EventList.fromPairList, toPairList haskore@henning-thielemann.de**20071221100014] [Basic.Dynamics added haskore@henning-thielemann.de**20071221102007] [update package dependencies to SuperCollider packages 0.1 from Hackage and supercollider-ht with Transport.File haskore@henning-thielemann.de**20080220162658] [replace Shell.launch by System.Process.runInteractiveProcess haskore@henning-thielemann.de**20080221035042] [General.ShellPipe: separate module for calling shell commands with pipe connection, because Hugs has no System.Process haskore@henning-thielemann.de**20080221042657] [Makefile.ghci: check package dependencies with Cabal haskore@henning-thielemann.de**20080221133344] [Notes: problem with MIDI notes with overlap haskore@henning-thielemann.de**20080221153914] [Data.FunctorM -> Data.Traversable using GHC-6.4 compatibility package haskore@henning-thielemann.de**20080226093726] [make Medium data types instances of Traversable, Foldable, Functor haskore@henning-thielemann.de**20080226094532] [Performance.sequenceReader based on Traversable.sequenceA haskore@henning-thielemann.de**20080226102336] [Media -> Medium haskore@henning-thielemann.de**20080226105825] [AirMain for stand-alone executable haskore@henning-thielemann.de**20080226133234] [SuperCollider.Play.Life.germanKeyboard: replace umlauts by escape codes haskore@henning-thielemann.de**20080226143553 however the keyboard input will be broken, if the umlauts in the terminal are encoded differently as in the program code ] [SuperCollider.Play: wait for response on _every_ synchronous message haskore@henning-thielemann.de**20080226144139] [Cabal-1.2 configuration which works on both GHC 6.4.1 and 6.8.2 haskore@henning-thielemann.de**20080226144837] [version ranges for package dependencies haskore@henning-thielemann.de**20080310201407] [Example.Raenzlein -> Cabal haskore@henning-thielemann.de**20080404152113] [StdMelody: list of 'NoteAttribute's converted to 'NoteAttributes' record with Accessor functions haskore@henning-thielemann.de**20080404163327] [StdMelody.fromMelodyIgnoreAttr restricted to () attribute type haskore@henning-thielemann.de**20080406132556] [Melody.Note record with Accessor functions haskore@henning-thielemann.de**20080406133021] [fromMelodyIgnoreAttr -> fromMelodyNullAttr haskore@henning-thielemann.de**20080406135958] [crescendo, diminuendo: additive change independent from current dynamics haskore@henning-thielemann.de**20080406141713 this poses problems with non-negative type and must still be fixed ] [loudness -> loudness1 in appreciation of zero-based logarithmically scaled notion of velocity haskore@henning-thielemann.de**20080406142355] [pairMap -> mapPair; mapFst, mapSnd added haskore@henning-thielemann.de**20080406161338] [Performance: separate type variables for time and dynamics, since time is non-negative and dynamics can be negative in future haskore@henning-thielemann.de**20080407082006] [MIDI.Render: play via pmidi and ALSA haskore@henning-thielemann.de**20080407093109] [Player: moved default and fancy player definitions to respective modules haskore@henning-thielemann.de**20080407102928] [Music.StdLoudness removed haskore@henning-thielemann.de**20080407104159] [Notes on different design of music haskore@henning-thielemann.de**20080411163011] [Revised new design of music, drop performance context haskore@henning-thielemann.de**20080411170621] [HCAR article updated for 2008 spring issue haskore@henning-thielemann.de**20080428144628] [Example.Detail: randomized chord pattern with controlable level of details haskore@henning-thielemann.de**20080619094625] [Makefile: jack-stop, supercollider-stop haskore@henning-thielemann.de**20080626053750]