Suff:Algo
From JimboWiki
· Suff Home · Style Research · Functional Requirements · Algorithm · Patches ·
Previously developed similar software
- "Sharle" - Chong Yu, MIT 1996 [1]
- Java source available[2]
- Uses objects and hierarchy heavily - can Max handle this sort of computation?
- Uses expert system decision making
- Uses weighted probabilities
- "Experiments in Musical Intellegence" - David Cope, 1981-2006 [3]
- Attempts to replicate composers' styles by mimicing rhythmic patterns
- Utilizes LISP heavily
- Supposedly artificially intelligent - sounds pretty much like identical rhythmic patterns used with different notes
- Clearly not as random as the goal application
My Design
- Development
- Cycling '74's Max
- Real Time Algorithm
- Calculations
- Rhythm
- Calculate by previous note and placement in measure - ex. one triplet is most likely to be followed by 2 other triplets
- Or - Random using natural note event probabilities (see Suff:Progs)
- Pitch
- Recalculate probabilities each time a note is played - Base on proper music theory
- Allow for key changes and progressive chord movement
- Velocity
- Calculate by placement in measure/phrase
- Rhythm
- Data Storage
- Rhythm
- Consider storing a basic rhythm line for repetition later - this might break the "computerized" style, so it might not be desirable
- Pitch
- Store possible pitch values in a table
- Associate with probability
- Velocity
- No storage required - calculate by known values
- Rhythm
- Process Flow
- Select duration
- How?
- Random using natural note event probabilities? (see Suff:Progs)
- Calculated using probability table? (2 triplets probably follow 1 triplet played on beat)
- How?
- Select velocity
- Calculate by position in measure. 1,3 accented, off beats not so much.
- Select Pitch (and trigger "noteon" object)
- How? Need to figure a way to make the probability table work and stay updated
- End Note at duration end
- Duration end from "advmetro" (see Suff:Progs) triggers note end
- Trigger next note
- Triggered at same time as note end
- Select duration
- Calculations
- Pre Process Algorithm
- Data Storage
- Single Note
- Start time
- Expected duration/end time
- Instrument
- Phrase / riff
- List of notes
- Used as a guideline - possibly have the ability to randomize or interact with other instruments' lines
- Possibly generate a bunch of phrases before the song is "written"
- Possibly don't tie phrases to "real notes" - instead use "relative notes" so phrases can be applied to whatever key the song is in when the phrase is used
- Phrase Order
- Have a way to organize the song
- For instance, maybe a chorus happens ever 8 bars in a particular song. The song ends in 48 bars. There's a beginning phrase and an ending phrase that need to be played on time
- Single Note
- Process Flow
- working on it...
- Data Storage