download
VIDEO
screenshot

Progress...

Releases
InWork

Tutorial...

Goooal
Config
Practice
Play Midis
Sheetz
Recording
Repertoire
Sharing
Tricky Parts

App Reference...

MidiConfig'er
PianoCheater
Tinkerer
Txt2Mid
SFontEditor

Also see...

rep:)
bout piano
bout midi
linkz
PianoCheater stuff I'm workin' on...

web - sheet flipping - screen shots and better descrip of sections stuff
      redo videos :p

PianoCheater
   THINK - make wait4meEZ catch timer up to ya when ya play too fast...?
      ok to skip over 2-3 notes too?
   one bar count in to get yer fingers to the keys - only when learn=show2me
   DlgSht:
      SHEETZ:
         Fb in love story should be gb (f# actually!)
            check minor scale sharpened M6,M7 too
         ksig gettin chopped cuz offset is too high (etc)
         STEMZ BABYYY !!
            split note.bmp into heads(3), flags(3*2) monochrome;   draw stems
            notehead white/black+solfege?   (stem,flag stay track color)
         need intermediate representation to do...
            group notes at same start time
               combine stems,flags:
                  make RH stems below 4c go up, LH above go down
            beam-ing
            tie-ing (across bars)
            calc rests
            split (held long) notes of a chord (for ex)
            offset vertically stacked note heads
            calc accidentals to bar end
         get spritemap done...
            rests - draw w,h   blt q,e,  calc s,t from e
            beams, ties?   X,bb?   teeny tsig,bar# font?   triplet(4,5...)
            etc: accent,slur,phrase,portato,legato,fermata?(holder),<,>etc
                 8va/b, p/f/mp/etc
         scale bar w to narrowest that'll fit all the junk (#/b,.,flags,etc)
         stem dir rulez:
            <=a stem up  >=b stem down  (middle line in general)
            Notes sharing stem (block chords)
               stem dir=dir for note furthest away from middle line of the staff
            Notes sharing beam
               stem dir=dir of note farthest from the center of staff,
               to keep beam near staff.
            Different rhythms being played at the same time by the same player
               write one rhythm with stems up,  other stems down
            Two parts for different performers written on same staff
               If parts have same rhythm, written as block chords.
               If not, stems for "high" or "first" part point up and
               stems for other will point down.
               especially important when two parts cross
               otherwise no way for performers to know that "low"
               part should be reading the high note at that spot.
         horizontal splitting transition similar to page flipping
         holding accidental to bar end
         beam-ing and tie-ing rules...:/  (beam within a beat)
         phrase marks,   dyna notes,   rec overlay,   8va/b,   rests
      scribble (text,lines and hilitn?) over sheets (n save txt,xy to mid)
   AutoChord
      include lowest bass octave
      show /bass if lowest key diff than chord bass
      show key offset (I,IV,V biz) - but maybe as m2,M2,5,m7,M7,etc
      show inversion b=1st c=2nd d,e for 7ths and 9ths
   DlgSngL
      copy2learn:
         wipe pract;  stamp a "notes" w packname
         tracks w/ sound=piano (and other keyboard sounds)
         auto ? it (and if not already, label if left/right)
      DlgStat
         auto populate dates in pract,notes !!   n autosort.
         marking song as done doesn't refresh DlgStat
   DlgLrn
      need to take into account future key changes when drawing solfege color
         (not just use current key on future notes)
      maybe make current keysig on keyboard look more keyish w/ Red "bracket"
      loopin - when hopping back, wait for all notes up before hopping?
      how to make keyboard not GAP up the time :/
         back to yellow bar?  teeny kbd?  ...hmmm
      what to do bout endtime for rec notes - hmmm :/
         if obvious (existing checks), you're done else...
         have to check for ANY future noteoffs beyond this sect
            if none, use tNow, else sect tEnd
      add ctrls picked via tinker app'ing * to name; stuff in 33 px - PER TRAK:/
      ??show key w/ lt/dk blue hilight instead of lt/dk grey notekey color??
      wait4me
         what's makin it halt when it SEEMS like it shouldn't?
         mayyyybe leave bg tracks on for a very short dur (64th?)
         what if midiout doesn't do vol cc?  :(
            fallback to JUST bg noteoffs?  (and leave off probably?)
      tinker is getting "overkicked" on beat 1 of bar :/
   use a dang CtlList for track display!
      in place editing for track,sound,dev instead of dlg.  and del trk?
   use CERtain devs for sounds- piano esp'ly
   often writing a dummy recorded/@ymd.mid :(

Tinkerer
   AutoLyrc => melo track=> init'd times for just txt.  copy/pastable format
   when you add a marker, add a section too...  less hassle...
   editing overlapping lyrc evs...:/
   TrackStamper
      store pattern and snippet FNs in song dsc somehow (fit in track name?)
         load em upon DlgPat re-opening
      how to dir-ize clips?   instGroup/timesig/barlen/genre(rock,etc)/
      riff2song func to replicate a riff thru the blues progression (for ex)
         (stamp it in modulated - 4 I,2 IV,2 I,1 V,1 IV,2 I)
         mod TrackStamper to do this...?   (cccc ffcc gfcg<, etc, etc)
         (add a transpose syntax, velocity adjust too?)
      when DlgPat exits, del device\clip.mid and tell pchtr to exit
         similar to SHUTUP! in Tinker's Shut()  (what about regular clip playin?
   EvOps dlg:
      add param:  offset for copy/paste to move 1st ev to time=0, etc
      add param:  paste reps to dup clip for a bunch of bars
   ksig - show it?  editing with Cmbo controls instead of blah text
   timesig
      trunc time to bar (keysig too)
      deleting one doesn't take it out of TIME calcs
         timesig still shows in bars, but not in ctrl display
         also when copying/killing time;   also unroll?
   why does printpreview show up in monochrome ?? :(
   pcheater can try to open tinker when it has a blocking dialog up... RATS:(
   save to .song for use w/ Txt2Mid
   when saving a song w sheet dir as a new filename, copy dir too :/
   NoteFix
      limit to btw BarBgn and BarEnd?  adjust noteup velo too??
      check that it hasn't introduced overlapping (hung) notes
                                              across tracks that share a channel
   fuller editing
      COPY to track function similar to "move to track"...
      need to be able to delete time (and events in it) less than a bar
      need to be able to stamp riffs (at any time pos, not just @bar) and clear
      SaveClip - keep tmpo,tsig (all initial ctrls?) in if avail
      set velocities over a range of time to crescendo/decrescendo/etc
      add control events over a range    (w/ different "curves" too?)
         for funky pan/wow effects, etc
      move ALL events of one track to another w/out having to selct(bounce back)

make some perl scripts to write notes and such ala psl
   define whqest61,drumNotes,ctrl,etc
   Note=octStep,time,dur,velDn[,velUp=64,fng='']
   Ctrl=name,time,valu
   TmS, DrS, TmI, etc

RepRpt
   put nondated etc notes in too?  pic.png for rec'd mp3/mids?  n user?
   more info?  #bars, #sheet/mid,
      revisit, sheetsync, solo/lead/comp/riff, quality,
      genre\ComposerArrangerArtistYearAlbum_tracknumTrackName,
      tempo, avg velo, varying velo(yn)??

MidiConfig'er
   window to show midiin on picked in device, button to play chord on out dev
   need to make yamaha_xg,roland_gs devtypes (once somebody HAS such a beast)

SFontEditor
   Mid2Wav
      show stats like current,max #notes/#voices, etc, etc?  min,max sample?
      is drum treatment ok?
      mod code so you can do midi withIN 64 sample dspBuf
   WavRip
      are loop points ok?  or just messed up in .WAVs?  i hear clicks :/
         find out EXACTLY what endLoop pos SHOULD be
         make sure SF2Rip sets correctly and EdiSn edits correctly
      reproc'ing already proc'd wavs loops em all :/
      dir for noteranged samples/stereo=>single pset (wipe suffixes somehow?)
         what about when no SMPL chunk :/
      just stick into a SFontBank prefix

Mid2Song
   shouldn't allow dup ctrl events (same ctrl same time) - use last one
      hmm, what about lyrics, etc at same time...  bump time by 1 or somethin?

_____________________________________ l8r ______________________________________

a.pianocheater.com/SongClip dir too?
REALLY consider an array struct instead of RecIns :/

- lyrc,mark are UNchan'd, same for tmpo/tsig/ksig?
- what about "extra" controls?  (not in cc.txt)  during Song2Mid/Mid2Song

hmmm...
   Stv
      CtlList - editing - ui glitches
         rightmost cell can expand beyond ctl when horiz scrolling
         probs w ins at end leaving an empty nonChk cell - del it?
         when click down in one cell, and let up in another
         how to tab out?  (to next/prev control)
         scrolling :(
      what's with Zord() in Control class??
      make a SOLID BSrch instead of plain loops...

Tinkerer
   bite into standard notation rendering.
   look at "tracker" front end key editing
   draw NPrs events as just lines on top of note bg...?
   note selecting...  hmmm...
      drag selection to bounce to an edit track
      edit op on that track
      bounce whole track back
      select all/none buttons, etc, etc?
      veloScale ,  ??
   custctrl makes keys do toolbar buttons, etc?  Bgn,End,etc...
   rats:
      how to edit overlapping markers and other ctrls
         (same time+trak - 2 events)
      tsig editing - what about when we delete drumtrack :/
      don't overlap onto notes on OTHER tracks sharing channel
   show durs in e,s,t,etc?  (with artic?  can't?)
   move velOn,velOff,moveTrack to "edit defaults" dialog?
   menus in tinker instead of a kajillion buttons?
   NoteChk:  ("sanitize notes")
      ons w no offs:
         add off for short dur or ending before next on
      extra up (off w no on):
         rare - toss last off?
      dual drums (dup notes on,on,off,off):
         lose 2nd (extra) on,offs
      overlapping notes on tracks sharing chan:
         put on sep chans if avail?
      progch probs:
      1) progch mid note sep'ing tracks on a chan
         - noteon on 1st, noteoff on 2nd:
         display prob, but technically correct
         move off to track w on
      2) [progch nonotes progch] making empty tracks
         move controllers to 2nd track
   calc fingering somehow?  user picks range of time for a hand pos
      "Right Now" a good test.
   time scaling:
      record midi with tempo sways as straight time (only way ya can)
      have user tap in beats and use these to
         make tempo changes and adjust note start+durs
   find some better distinct colors for byTrackNo/SoundNo coloring...
   kill - clean up to do only one EvDel
   printing
      drum notes need thicker velocity color (like nondrum notes)
      controllers lines are probably WAY too thin
      print preview???  or just a list of "pg 1.. - # cols" text listing?

PianoCheater
   add to SongList dialog's Find()
      checkboxes:
         single instrument song (pick instrument set?)
         has drums;  has REC track;  has sheets;  learn on
      improve search
         solo piano, sounds used (piano? drums?), #bars,
         list off this STUPH in song list?
   spoonfeeder:
      fingering covered by pink rec note trail (for fng switch on same note)
      count in - starts just pre "current section" w bg,learn tracks
      Hop to a random marker to get a song down completely solid?
   editing:
      EdCmd controllers - should they "auto take out" assoc'd EdCmd keys ?
         SONG     pick song in listctrl (0..127 => pos 0..len-1)
                  strips  song< song> song<10 song>10
         TMPO     set tempo from x..x+127     36..163?, 65..192?
                     (maybe only resolution of 64?)
                  strips  tmpo< tmpo> tmpo<10 tmpo>10
         DRMVOL   (sets directly)
                  strips  drmVol< drmVol> drmVol<10 drmVol>10
         TIME?  SND?   maybe using pbend somehow?
         CTLMAP?  (play w changing devTyp map via MidiCfg before this)
            which dev?
            CCMap      ;Top,<1,1>,Bot  (show it where?)
         valJ bender - "joggles" pos in Time, SndList?
         ModStr - NoRec,ValMax,ValMap,Dev,Chn,Dup?,Time?
      for bar#1 evs - config in dev/cc.txt?
      "compile" cci+ccmap? - in=rawcc, out=songcc/./cco + mod
      ...we NEVER want 2 devs' (keys or matching octrls) routed to same track
   overlapping notes
      split em into 2 preserving all on/off velos?
      edit device/channel and changroup(+ vs .) and ins/del/scoot trk?
         or just in Tinker?
      never record over any existing note ever?
   chord symbol markers so tinker can apply a left hand pattern over the
      whole song (build left track)   (or maybe Txt2Trak?)
   strip soundname quietly if unknown to dev in DrumMap load?
   songlist editing
      transition column l8r
         pause after song
         wait x bars after song
         make a transition song composer thingy that makes a song/drumfill/etc
            with tempo transition from old song's tempo to new song's
   section editing
      trunc markers to bar boundary (on load?  in tinker?)
      cust CtlCmbo like songlist;  show 'section => nxtSection@time' ??
      add filtering (mute/noteMod/veloMod) per section per track - in .song fmt
         dblclick a section to pop track filter edit
   use MCC's init in MidiO.GMInit ?  or in pcheater?
   use mouse (joystick too?) as extra midiin controller?
   paged lyrics (toggled on/off over tracks display) w custom ctrl?
      and chord symbols?
      store PAGE sync commands in .trak?
   GS,XG devices...  wierd sysex CCs (GSMidi, XGMidi, combos or each?)
   When turning REC on for a track, WHINE if there are rep'd sections in song
   if no keymap in midi/device/kbd(whatever), pcheater should whine n kick cfg
   keep DevName for save (so uses . instead of resolved devname)?

Mid2Song
   rename a song to *_BAD.mid if can't be parsed.
   programchange can split a noteDn to track1 and noteUp to track2 :(
      ideal fix would be moving noteUp to track1.
         check all noteUps for noteDn?
         or pair all note Dn/Up evs into note structs?
            ulong time, dur;  ubyte note, velD, velU, fing;
            ulong time;       ubyte ctrl, valu, val2, x;
         leaving NPrs events wherever :/
      similar to what tinker's NoteChk does...
   if < 16 chans used and have tracks sharing chan w progch,ungroup from chan

Txt2Trak
   put main .txt file into .song (so .txt now has a prefix w song info etc)
   riffs within same .txt file  (note subroutines?  syntax?)
      put stuff btw #riff  and #riffend in temp file and
         map  to tmpFN
      del temp fns at end
   hmm:
      how to do double gracenotes ??
      for crescendo/decr:  ctrl curves (from,to,dur,curvetype)
      parallel tracks in same file starting in col40
         allowing blank lines n such??
      for vocal tracks, some kinda verse2 syntax for
         alternate tweaks to melody
         (like the teeny notes - on the 2nd rep, etc)
      notenotes and lyrics and markers in .txt to go to .song somehow ?
      new app - Tab2Song ??  Not really possible due to no timing info ?
         actually, just do single bars on each chord?
      do more chords and inversions like jfugue:  (^ 1st inv, ^^ 2nd, etc)
      x  maj      0 4 7                x  min      0 3 7
      x  aug      0 4 8                x  dim      0 3 6
      x  dom7     0 4 7 10             x  maj7     0 4 7 11
      x  min7     0 3 7 10                sus4     0 5 7
         sus2     0 2 7                x  maj6     0 4 7 9
      x  min6     0 3 7 9                 dom9     0 4 7 10 14
         maj9     0 4 7 11 14             min9     0 3 7 10 14
         dim7     0 3 6 9                 add9     0 4 7 14
         min11    0 7 10 14 15 17         dom11    0 7 10 14 17
         dom13    0 7 10 14 16 21         min13    0 7 10 14 15 21
         maj13    0 7 11 14 16 21         dom7<5   0 4 6 10
         dom7>5   0 4 8 10                maj7<5   0 4 6 11
         maj7>5   0 4 8 11                minmaj7  0 3 7 11
         dom7<5<9 0 4 6 10 13             dom7<5>9 0 4 6 10 15
         dom7>5<9 0 4 8 10 13             dom7>5>9 0 4 8 10 15

EdiSn
   keep in?
   keys play wave at preset piano note frqs
   button to move to next "post quiet" spot
   when going to mag=non0, keep pos of cursor not just leftmost spot on screen
   cache the full wav samples at current mag?  (depends on W)
   loop point view (end of loop on left half, begin loop on right half)
   # times to loop - configurable?
   fx processing, FFT, yadda yadda yadda, blah, blah, blah