Geia

From MusicIn2D

Revision as of 15:04, 4 September 2009 by WikiGod (Talk | contribs)
(diff) ← Older revision | Current revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Home < Geia

Contents

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
  • Add drums
    • Algorithms
      • Current dynamics for metal kit
      • Straight up rock style or 4 to the floor
      • Fills
  • 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
  • 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
  1. Changed text format to T2MF
  2. post text to txt2midi.php via http. Composition / file name taken from T2MF
  3. (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.
  4. 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


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.

Resource Links

MidiCSV Home Page

PHP Midi Class