Geia
From MusicIn2D
Home < GeiaContents |
Technical Stuff
Version Info
I re-designated Geia from version 2.1 to version 0.2.1 as of 8/12/09. This is due to the fact that I have decided to eventually allow others to use the software and algorithms, and there's a long way to go before reaching RC 1. The version history will reflect the appropriate relative version.
Version History
Current Version: 0.2.3 (August 2009)
- 0.0.1 (?) - Some of the original formulas for randomization were developed as part of an Excel spreadsheet, which used a macro to refresh the composition info.
- 0.1 (Jan 2008?) - The original web-based implementation provided the parameter randomization of the previous Excel based version, as well as generation of copy-and-paste CSV code for a 2D spiral melody.
- 0.1.5 (July 2009) - Added user parameterization, composition regeneration via the compositionID, and 2 harmony tracks.
- 0.2 (July 2009) - Added downloadable CSV file, print version, and drum dynamics suggestions. Expanded compositions to third dimension using modal transposition.
- 0.2.1 (August 2009) - Added smart key signature selection and correct spelling of enharmonic notes.
- 0.2.2 (August 2009)
- Converted CSV to T2MF format.
- Broke functions out into UDF files.
- Moved lookup data out of DB into application scope structures
- Created application.cfm to include UDFs and move data structures into request scope
- Implemented http call to phpMidi functions to create midi file from T2MF and provide direct download
- Commented out dynamics suggestions since I will be adding bass and drum tracks to the next version
- Added name field to composition form. Name combined with timestamp used for file names now for clarity
- 0.2.2 (August 2009) - Fixed key signature bug.
- 0.2.3 (August 2009) - Fixed a bug with harmony 2 not sending note_off in some instances
To do
- Fields
- Composer Name
- Add bass track
- Algorithms
- Current dynamics for metal kit with flat tonic pedal
- Basic movements based on chords using beginning bass styles or similar
- Walking bass through 4ths
- Algorithms
- Add drums
- Algorithms
- Current dynamics for metal kit
- Straight up rock style or 4 to the floor
- Fills
- Algorithms
- Add intros and endings
- Intro Algorithms
- Define a handful of possible approaches
- Instrument combinations
- Build up of instruments
- Solo instrument
- Long or short (length) of intro
- Chords, part of the melody, drone, etc
- Outro Algorithms
- End all on 1
- Drum fill then end all
- Drop to bass and drums to finish
- Drop to harmony
- Drop to melody
- Mirror intro
- Intro Algorithms
- Instruments and patches
- Allow definition of instruments and master patch list
- Allow assignment of instruments to specific tracks
- Allow subset of instrument voices overall
- Allow subset of instrument voices per track (subset of overall)
-
Break functions out into CFCs- 0.2.2
-
Convert text to Midi file- 0.2.2
- Changed text format to T2MF
- post text to txt2midi.php via http. Composition / file name taken from T2MF
- (txt2midi.php) creates and saves midi file URL to midi file) to CF page. Optionally, php file post midi file link to (midi2xml.php) to save a MIDIXML version.
- CF page uses midi file link to provide download and in page midi player
Algorithms
Spiral Method
- 32 Bars
- Single row permutations through modes in order of row values
- 3rd dimension via pitch axis modulation through the modes of the tonic scale in order of row values
- rhythmic permutation via clockwise/counterclockwise rotation of note durations per section
- Sections:
- chorus_tonic - 1st section
- melody is played
- piano harmony with quartals on 4s and 8s and single notes on 2s
- string pad harmony, whole note per row, 2 measures
- chorus_octave - recurrence of the tonic mode at the octave
- same as chorus_tonic
- root_breakdown - half-time feel breakdown when the parent scale of the tonic scale becomes the section tonic mode
- melody off
- piano harmony off
- string pad harmony on
- verse - all other sections
- melody off
- piano harmony on
- string pad harmony off
- chorus_tonic - 1st section
Jazz Standard Algorithm
- 32 Bars
- AABA Song Structure with 8 Measure progressions (4 measure expanded as 11223344) (GG progression 121-306)
- B section key based off of 1st change in A section (i.e. for 1-4-1-1, B section would be based off the 4)
- Different row and note durations for A and B sections
- Same Key, scale and mode throughout
- Head:
- Piano plays head with 5th harmony on 8ths, quartal triad on quarters, and 7th chords on halfs
- Bass plays measure root with kick drum pattern + chord root for piano's half note chords
- Guitar doubles piano melody for head
- Solo:
- Piano plays only quarter and half note chords
- Bass plays same as head
- Guitar solos modally
T2MF Reference
Format of the textfile: ----------------------- The following representation of the midievents is generated (between [] the form when -v is used: File header: Mfile <format> <ntrks> <division> Start of track: MTrk End of track: TrkEnd Note On: On <ch> <note> <vol> Note Off: Off <ch> <note> <vol> Poly Pressure: PoPr[PolyPr] <ch> <note> <val> Channel Pressure: ChPr[ChanPr] <ch> <val> Controller parameter: Par[Param] <ch> <con> <val> Pitch bend: Pb <ch> <val> Program change: PrCh[ProgCh] <ch> <prog> Sysex message: SysEx <hex> Arbutrary midi bytes: Arb <hex> Sequence nr: Seqnr <num> Key signature: KeySig <num> <manor> Tempo: Tempo <num> Time signature: TimeSig <num>/<num> <num> <num> SMPTE event: SMPTE <num> <num> <num> <num> <num> Meta text events: Meta <texttype> <string> Meta end of track: Meta TrkEnd Sequencer specific: SeqSpec <type> <hex> Misc meta events: Meta <type> <hex> The <> have the following meaning: <ch> ch=<num> <note> n=<noteval> [note=<noteval>] <vol> v=<num> [vol=<num>] <val> v=<num> [val=<num>] <con> c=<num> [con=<num>] <prog> p=<num> [prog=<num>] <manor> minor or major <noteval> either a <num> or A-G optionally followed by #, followed by <num> without intermediate spaces. <texttype> Text Copyright SeqName TrkName InstrName Lyric Marker Cue or <type> <type> a hex number of the form 0xab <hex> a sequence of 2-digit hex numbers (without 0x) separated by space <string> a string between double quotes (like "text"). Channel numbers are 1-based, all other numbers are as they appear in the midifile. <division> is either a positive number (giving the time resolution in clicks per quarter note) or a negative number followed by a positive number (giving SMPTE timing). <format> <ntrks> <num> are decimal numbers. The <num> in the Pb is the real value (two midibytes combined) In Tempo it is a long (32 bits) value. Others are in the interval 0-127 The SysEx sequence contains the leading F0 and the trailing F7.


