{
hunk ./src/NOTES 1
-
-Todo:
-
-* Performance.Context
-
-Should be an abstract datatype with set and get functions.
-
-* Music.T
-
-The data structure should be hidden.
-The user should use changeTempo and similar functions
-instead of the constructors Tempo etc.
-This way the definition of a Music.T
-stays independent from the actual data structure Music.T.
-Then changeTempo can be implemented silently
-using a constructor or using a mapping function.
-
-* PitchClass, Octave
-
-With the definition Pitch = (Octave, PitchClass)
-(swapped order with respect to original Haskore)
-the order on Pitch equals the order on pitches.
-The problem is that the range of notes
-of the enumeration PitchClass overlaps
-with notes from neighboured octaves.
-Functions like o0, o1, o2 etc. may support this order
-for short style functional note definitions.
-It should be e.g. o0 g == g 0.
-Alternatively one can put this into a duration function
-like qn', en', etc.
-Then it must hold e.g.  qn' 0 g == g 0 qn
-
-* Modularity
-
-Make the module names more consistent:
-Shall there be a WriteCSound module?
-
-CSound could be divided
-into a CSoundScore and a CSoundOrchestra module.
-
-ReadMidi depends on WriteMidi, which is strange.
-ReadMidi needs UserPatchMap,
-maybe this should be defined somewhere else,
-say in Midifile?
-
-* type variables
-
-Turn Time, Volume into type variables.
-I should wait with this until NumPrelude reaches some stability.
-A Time and Volume class could bundle the requirements we need
-for volume and time values.
-Alternatively I can introduce type classes Volume and Time
-which collect the inheritances that are necessary for type
-that shall serve as Volume or as Time.
-
-* tidy TeX
-
-check if all references to appendix still
-refer to an appendix
-make graphics with funcMetaPost,
-  e.g. the overview diagram in WriteMidi.lhs,
-       the mscanl picture in SaveMidi.lhs
-
-* Equiv.tex
-
-literal equivalence proofs still use an old notion of Tempo
-
-* Absolute pitch
-
-Find a definition for the absolute pitch
-that will be commonly used for MIDI, CSound, and Signal output
-
-Yamaha-SY35 manual says:
- Note $00 - (C,-2)
- Note $7F - (G, 8)
-But which A is 440 Hz?
-
-By playing around with the Multi key range
-I found out that the keyboard ranges from (C,1) to (C,6) (in MIDI terms).
-The frequency of the single instruments is not equal. :-(
-Most of them have (A,3) (MIDI) = 440 Hz,
-but some are an octave below, some are an octave above.
-In CSound it is (A,8) = 440 Hz.
-Very confusing.
-
-* Prelude functions
-
-Remove function definitions that are also present in the standard libraries
-of Hugs and GHC.
-
-Monads: Is the Output monad equivalent to one of the current standard libraries?
-        E.g. the Write Monad?
-Bitops: fromBase is in fact a Horner scheme, but uses the wrong coefficient order,
-        it doesn't convert to decimals but to the machine oriented representation of the number
-
-* Player
-
-Separate Player module from Performance.
-I've done it as far as possible,
-but unfortunately GHC and Hugs doesn't support cyclic imports.
-
-
-To think over:
-
-* Structure analysis
-
-Implement a function that finds
-common infixes in a stream of music
-and rebuild the structure of the song
-by turning identical infixes into equal Serial parts.
-The build can be assisted by a suffix tree
-or by a sorted list of all suffixes of the note stream.
-This function could be part of Optimization.
-
-* CSound
-
-What does velocity means to CSound?
-
-* Lyrics
-
-Text to be written under the staff or
-that might be even sung by a speech synthesizer.
-Maybe they should handled like a separate instrument
-or as some instrument specific data.
-In fact, lyrics are a detailed specification of the human voice instrument.
-
-* Note element order
-
-In my experience the note attribute list is used only sparingly,
-thus it may be better the first element for easy benefit from partial application.
-This should be thought over together
-with an alternative instrument declaration.
-
-* Note attributes
-
-Is it possible to replace this fixed type list
-by a type variable that can be choosen freely
-and matches the type the Player function expects?
-
-Should NoteAttributes be type variables
-to give full freedom and safety to the players?
-cf. next point
-
-* Instr
-
-As attributes and set by maps.
-No Instr constructor, use a setInstr function instead.
-The set of instruments could be represented
-by a type containing all instruments as constructors
-with additional values that are specific to the instrument.
-This would make it hard to share instruments
-between different songs.
-
-What's the meaning of several instrument maps?
-Are them MIDI specific?
-
-* CSound NameMap as FiniteMap
-
-One could implement the NameMap using FiniteMap.
-But since this is related to instruments,
-a future design of instrument settings
-may not need this map anymore.
-
-* Media
-
-Use the temporial media data structure as basis type
-for Haskore's Music.
-We can implement both representations of Media.T:
-a) Using binary constructors :+:, :=:
-b) Using List constructors Serial, Parallel
-
-By using Media.fold for processing of the data structure
-functions can stay independent of the particular implementation.
-
-* Control
-
-A control constructor that bundles Tempo, Trans, Volume.
-The control constructor can help managing an accumulator record
-for the values Tempo, Trans, Volume which is necessary for a performance.
-
-* Controller (Modulation)
-
-New Event constructor 'Control' for supporting MIDI controllers.
-This would also be useful for HaskToSignal.
-
-* Volume
-
-Like Trans and Tempo there should be a constructor Volume
-to change the volume relatively for a sub-block.
-
-* Volume scale
-
-People seems to agree that MIDI volume is on a logarithmic scale:
-
-http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&threadm=34CA9768.FA7BDD8D%40fox.uq.net.au&rnum=2&prev=/groups%3Fq%3Dvolume%2Blogarithmic%2Bgroup:comp.music.midi%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26selm%3D34CA9768.FA7BDD8D%2540fox.uq.net.au%26rnum%3D2
-
-http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&threadm=3A6E12CB.F4176FD2%40eatel.net&rnum=3&prev=/groups%3Fq%3Dvolume%2Blogarithmic%2Bgroup:comp.music.midi%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26selm%3D3A6E12CB.F4176FD2%2540eatel.net%26rnum%3D3
-
-16 ticks correspond to doubled amplitude on a Yamaha SY-35.
-One could argue that this definition is based on logarithm with basis two.
-Volume is different from the Velocity!
-Velocity ranges from $00 to $7F,
-but default is $40.
-
-
-* Lilypond
-
-Back-end for note sheets expressed in Lilypond.
-There was already some effort of doing so.
-
-
-Impossible or unlikely:
-
-* PitchClass range
-
-Is it better to let PitchClass range from (Af to Gs)
-instead of (Cf to Bs) which corresponds to the alphabet?
-This would arise problems, since the octave counting
-commonly starts with C. :-(
-
-* genMidiMap as FiniteMap
-
-Looking up General MIDI instruments
-requires the partial match,
-i.e. two instrument names matches
-if one of them is prefix of the other one.
-(cf. CSound.NameMap)
-
-
-
-References:
-
-* Audio processing and Haskore, Lava, Hawk, FRP (Functional reactive programming)
-
-http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&threadm=fa.cf8t0fv.k14vr4%40ifi.uio.no&rnum=9&prev=/groups%3Fq%3Dhaskore%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26selm%3Dfa.cf8t0fv.k14vr4%2540ifi.uio.no%26rnum%3D9
-
-* more people interested in Haskore
-
-http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&threadm=haberg-0906981953560001%40sl35.modempool.kth.se&rnum=14&prev=/groups%3Fq%3Dhaskore%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26selm%3Dhaberg-0906981953560001%2540sl35.modempool.kth.se%26rnum%3D14
-
-http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&threadm=remove.haberg-1408021913460001%40du139-226.ppp.su-anst.tninet.se&rnum=17&prev=/groups%3Fq%3Dhaskore%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26selm%3Dremove.haberg-1408021913460001%2540du139-226.ppp.su-anst.tninet.se%26rnum%3D17
-
-* another C based music programming language
-
-http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&threadm=01-08-083%40comp.compilers&rnum=18&prev=/groups%3Fq%3Dhaskore%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26selm%3D01-08-083%2540comp.compilers%26rnum%3D18
rmfile ./src/NOTES
}
