Main Menu

Dtab V1.03 WIP

Started by kevin, May 20, 2011, 10:32:28 AM

Previous topic - Next topic

kevin





 Dtab V1.03 WIP beta 6

    Been working on what I could only call house cleaning of Dtab the past day or so.   The V1.03 revision so far brings us the mouse wheel support, which has improved the use-ability from the mouse interface ten fold.   In fact I'm starting to find the mouse easier than the keyboard for many things.  Although if you know your way around the keys it's prolly still quicker.      

    Anyway, today we're introducing another helper feature for new users.  It's basically a tool tip styled concept that allows the user to move the mouse over a note head an query what it is.  It's not particular pretty, but will no doubt be handy Drum Tab newbies or new Dtab users.  Either way it's there now.  There'll be an option to turn it off.     Being able to query the note head and get the name of it's pretty hand.  So this stuff could be used in exporting also.  Where perhaps Dtab could work out insert a Staff Key for you.   Stuff like that would really take the guess work out of sharing tabs,  since  it's not uncommon for different tabs ro use the same note heads to mean different things..

    Another addition is a simple version query.  This is not really hands on feature, more a reminder service for users.  The current implementation requests what version of DTAB is current and compares that to your version.   The query support is already built into the web site, the prototype works ok, just matter of bringing that into DTAB at some point.      This is an area that i'm very keen to explore in the future.      
   

kevin


  Dtab V1.03 WIP beta 7 - Update Checker 
 
     Started bringing in the web controls, beginning with the update checker.  The form downloads the latest version about DTAB from UW.com.  Upon request the server spits back a standard formatted reply, which is just some tagged text.  You can actually query  any app on uw atm, but anyway.  This version of the form is manually started, but it'll only trigger once a month, every day/week seems like overkill.   Once a month is enough to keep people pretty much up to date.  The only interesting thing about the form is the version resolver.  Which can equate sub-versions & betas into a meaningful value and compare them.

   

kevin

#2
  Dtab V1.03 WIP beta 9 - Web Tab Downloader

  Today has been all about bringing the download / script engine into DTAB.   It's been pretty routine really, the script engine dropped nicely, only had a few drama's with some missing controls, mostly with the debugger output.   The current implementation is much like the prototype.  So to evoke a download you paste the full URL into the import tab text area.  When it sees a link it's pops the fetcher.  Which turn out to be quicker given it's just grabbing the page html (no images/scripts/ads etc ) from the site.  When the text gets here, it runs the sites pre-processer script (if one is available) to pull any key info out of the HTML from the page.     Making the manual process almost completely transparent to the end user.  

    I've written about a dozen site pre-processor scripts so far, the following piccy is of a fetched tab from mxtabs.  So when pasting the link, it runs the mxtabs pre-process script.  The script is dead simple, it's just looking for constants and and grabbing the text between them (example bellow).  Some are lot more complicated, since they offer more data in forms..  




; ------------------------------
;  Global Variables
; ------------------------------
;    PageURL = The full URL of this page
;    RawPage = THe entire document
;  PageTitle = The Title string from the page

;-----------------------------
;  Return Variables
;-----------------------------
;     SongName = The name of the song
;   ArtistName = The artist/band name
;   TabberName = The name of the tabber


 var StartPos,EndPos,TabbedByStart,TabbedByEnd,Tag
   
       ;-------------------------------------------- -------------------------------------------
       ;-------------------------------------------- -------------------------------------------
       If (InStr(PageTitle, "MXTabs.net",1)>0)
       ;---------------------------------------------------------------------------------------
       ;-------------------------------------------- -------------------------------------------

   print("Max Tabs Page")
           
           Tag = "drum tab by"

           EndPos = InStr( PageTitle, Tag,1)

           If (EndPos>0)
               EndPos = EndPos - 1
               StartPos = 1
               SongName = Trim(Mid(PageTitle, StartPos, EndPos - StartPos))
               Print( "Song:" + SongName)
           EndIf

           
   if (Html_LocateTags(PageTitle, Tag, "|", 1,StartPos,EndPos))

               StartPos = StartPos + Len(Tag)
               ArtistName = Mid(PageTitle, StartPos, EndPos - StartPos)
               ArtistName = Trim(ArtistName)
               Print( "Artist:" + ArtistName)

   endif


           Tag = "Tabbed by"

           TabbedByStart = InStr(PageTitle, Tag,1 )

           If (TabbedByStart > 0)
               TabbedByEnd = InStr( PageTitle, "|",TabbedByStart)
               If (TabbedByEnd > TabbedByStart)
                   TabbedByEnd = TabbedByEnd - 1
                   TabbedByStart = TabbedByStart + Len(Tag)
                   TabberName = Mid(PageTitle, TabbedByStart, TabbedByEnd - TabbedByStart)
                   TabberName = Trim(TabberName)
               EndIf
           EndIf


   goto Done

endif


done:

print("End of Program")

   


     Scripting at this point is limited to this particular process, can certainly see a number places where it'd be handy to externalize some of the processing.   But I guess that'll have to wait..  




kevin

#3
  Dtab V1.03 WIP beta 10 - Importer Rules

     This is one of those features that's been on the to do list for a while now, but never really made it's way into a release.  The rule concept allows the user to guide DTAB on how it should map certain staff lines and ultimately note heads upon those lines.   The current revision only supports the primary kit sounds, so there's still a bit of work to do.   But it's just matter of setting some tables .

     Being able to insert import rules into the raw tab document, allows the drum tab to the saved as regular text, then imported later as if it was a native Dtab file.  Normally if you  imported the same tab file over and over and it didn't understand a staff line,  it'd prompt you on how it should map the unknown staff.    So every time you imported the same drum tab, you'd have to tell if how to map the line.   With rules,  this is virtually a thing of the past.  

     At the moment, there's no gui form to customize the rules, they're manually inserted by into the document (Example bellow).  Ideally it be best to have a form where the user can add them, but anyway.



[DTAB]
  [STAFF]
     SN = SNARE [0=o] [2=o]
      B = BASS DRUM    
     CC = CRASH
  [/STAFF]
[/DTAB]





  This is the current format (subject to change), but basically anything inside the DTAB tags is our rule block. The block has a STAFF line remap list.  Each rule is on a separate line .

   Where the format is    Original Staff Name = Instrument       Any specific note head re mapping will be listed after then in the square tags.

   The rules allow for other 'flags' to be set in the importer also.   Which will effectively kill off some of the issues concerning inclusive and exclusive symbols for example (as found in repeats).   But anyway,  we'll just get to the first milestone done,  then get it out there in the wild..  



 

kevin


  Dtab V1.03 WIP beta 10 - Importer Rules Cont.

    The bare bones rule importer is up and running and has been wedged to the import process.  The rules  allow staff line remapping by the user as well as note head remapping on each staff line.    The importer treats user defined rules with higher precedence than it's own defaults.  So by adding a rule you're forcing it do something. 

     To be honest, a lot of the simple remaps could be hard coded into the importer, which on the surface seems like a good solution, until you hit some  those tabs  where the importer assumes the note heads meaning and remaps them into something else.   When such behaviors are hard coded into the program, overriding them becomes virtually impossible.   Which is why I'm reluctant to go down that road.     

     This is really one the areas where i see external scripts playing a big role in the future.   Certain pre-processing actions could be made external scripts.  The rule set could require the tab be passed to pre/post-processing scripts.  So really unusual formats of Drum Tab could be imported, without having to hard code such behaviors into the app.    Somebody still has to write to the processing routines, but issuing script updates is a lot easier than releasing the app every other week. 

      Tonight i've been adding messing around with a form where the user can create a rule set.  Slow going so far, not too sure as to how the user will made the selections etc.. but we'll get something..   


kevin

#5
  Dtab V1.03 WIP beta 12 - Tab Importer Rule Definer (Basic)

   This is the bare bones drum tab importer rule definer form.  The current version of the form lets the user map any unknown staff lines in hand written tabs  to a Dtab staff lines as well as attach any note head remappings.   So the tabber can use the form or enter the rules manually.   Even though it's far from  complete,  it seems to make the process fairly easy.   Could always be easier.  

   After thinking about it some more, moving towards a rule based importer creates more opportunities for us to tweak the application via remote updates.  For example, since drum tabbers often use the same the  style across many transcriptions, the importer could load a rule set based upon the tabber name.  
   The process could be made virtually transparent to the user,  just click and go, assuming it knows the tabber that is.  If not you could make your own rules for either the tabber or just that particular song.    It'd give precedence to rules defined in the song body over those loaded though, allowing them to overload  if needed.  

 



kevin

#6
 Dtab V1.03 WIP beta 14 - Importer Updates

    Still working away upon the V1.03 upgrade, was originally hoping  to get this out by the 1st of June, but that's not going to happen.   All of the big new things planned for this release,  are represent in one form or another, what's left now is a good tweaking and ironing out phase.    Probably the main area need  some tweaking is improving the Drum Tab Importers logic.  

    While the importer now supports a user definable rule set (outlined above),  there's a still some areas where the tabs need to be manually edited in order to successful import them.  To be blunt,  I suspect this will always be the case.  But after looking at more tabs than I care mention, some of common conventions do stand out that are worth supporting.   Such as some symbolic repeats & time signatures inside the bars data, row repeats, section repeats, rest messages and a few others.      It's unlikely  they'll all make this release, but they're on the to do list.  

   The current work, has been on catching some more triplet notations that seem to pop up.  One that seems fairly common in tunes that have shuffle feels is using the  EA and TT counting methods between 1/4 notes.  In other words the tick rate in this section of the bar drop back to 1/8 note triplets.   This a requires a bit of remapping in the importer,  but we end up with equivalent track imported and that's what matters.
         


Verse
C |x-----------|------------|------------|------------|X-----------|------------|
H |---x--x--x--|x--x--x--x--|x--x--x--x--|x--x—-o-—o--|---x--x--x--|x--x—-x—-x--|
S |---o-----o--|---o-d--o--o|---o-----o--|---o-d--o--o|---o-----o--|---o-d--o--o|
B |o--o--o--o--|o--o--o--o--|o--o--o--o--|o--o--o--o--|o--o--o--o--|o--o—-o--o--|
 |1ea2ea3ea4ea|1ea2ea3ea4ea|1ea2ea3ea4ea|1ea2ea3ea4ea|1ea2ea3ea4ea|1ea2ea3ea4ea|

C |------------|------------|X-----------|------------|X-----------|X--X--------|
H |x--x--x--x--|x--x--x--x--|---x--x--x--|x--x—-x-—x--|---x--x--x--|---o--------|
S |---o-----o--|---o-d--o--o|---o-----o--|---o-d--o--o|---o-----o--|------oooooo|
B |o--o--o--o--|o--o--o--o--|o--o--o--o--|o--o--o--o--|o--o—-o-o---|o-o-—-o--o--|
 |1ea2ea3ea4ea|1ea2ea3ea4ea|1ea2ea3ea4ea|1ea2ea3ea4ea|1ea2ea3ea4ea|1ea2ea3ea4ea|


     
 The importer can also allow the colon characters as the bar divider plus a other small tweaks.    



kevin

#7
  Dtab V1.03 WIP beta 15 - Importer Updates Cont.

      Been working through various charts testing the Drum Tab importer, getting better.  The triplet detection has been further improved, but the main addition today is the ability for staff line detection to basically guess staff names where there's no separator between the bar data and staff name exist.  Guess is perhaps over stating it,  an assumption would be more accurate.  But it seems to work so far, but there will no doubt be some charts that break it..

       Another annoying little issue found in a number of tabs, is that even though the bars are in 4/4 (16 ticks per bar), the tabber appends an extra tick.  No idea why, prolly for visual alignment.  Which can present a problem when there's no count, as the importer would just assume a fixed 1/16 note tick rate.  So appending the leading tick would push the following notes over by one.   So it's all displaced.   The importer now tries to spot this situation, and upon occurring,  it attempts to align the bar to the current time signature by mapping it's own counting in.   Which allows it to map the input timing to the internal timing.  

     Anyway, the following snippet has an example of the two issues together.  While the importer is able to import it correctly, there's no doubt some combination that won't..    


C1-x---------------|-----------------|-----------------|-----------------|
H ---x-x-x-x-x-x-x-|-x-x-x-x-x-x-x-x-|-x-x-x-x-x-x-x-x-|-x-x-x-x-x-x-x-x-|
S -----o--g----o--g|-----o--g----o--g|-----o--g----o--g|-----o--g----o--g|
B -o-------o-------|-o-------o-------|-o-------o-------|-o-------o-o-----|






kevin

#8
  Dtab V1.03 WIP beta 19 - Importer Updates Cont.

   Yep, still working away on the import logic.   Been working my way through various different drum tab forms, mainly importing and double checking them against the chart.   Which is sometimes tricky as the structure of the music in the tab isn't always clear.   But anyway, the testing is helping spot many often small tweaks needed to import the import quality.  

  The only really new feature is the importer can better bar divider detection.  Which is generally the pipe character |, but sometimes it isn't.  In those situations the user would have to do a search/replace.   You've got to remember, originally the tab import was built around it's own standardized version of Drum Tab.   It wasn't until later revisions that people wanted it to import hand written stuff.   Anyway, the import attempts to detect the main staff divider in the tab automatically.  It seems to work well in the tabs i've tested, but there's bound some tabs that use a number of divider characters. Where it'd fail..    

  Here's a bit of example of a tab section that looks like standard tab, but uses some custom characters..  


                    {-------6x--------}
Rd I-x---------------I-----------------I-----------------I
HH I-----x---x---x---I-x---x---x---x---I-x---x---x---x---I
SN I-----@-------@---I-----@-------@---I-----@-------@---I
BD I-o-o----g--o-----I-o-o----g--o-----I-o-o-------o-o-o-I
    1 + 2 + 3 + 4 +   1 + 2 + 3 + 4 +   1 + 2 + 3 + 4 +


   While you can replace the divider characters and repeat brackets easy enough and get this importing correctly into older DTAB editions (V1.02),  The V1.03 importer can just load this as is.   Much more convenient.     The only thing it doesn't do, is auto remap the @ character to an alternative note head.    Not too sure as to what the @ note head is meant to represent in this particular tab, I suspect it's a rim click in this song, but @ is also used as rim shot in other charts.  Sadly there's no mention of the instrument key to clarify the mapping.    No matter, such things are easily fixed using the importer rule set and it's note head remapping.  




Shuffle Feel / Triplet Assumption

    Found a few songs that are written with an 8th note triplet trick rate, but without counting to guide the importer.   In this case, the importer wouldn't have any way of remapping the import bar, since a bar of 4/4  time 1/8 note triplets is the same length as a 3/4 bar of 1/16th notes.   To detect this, it looks for "played in triplet" tags in the  body.  If found, the decoder defaults to a triplet 3 feel, rather than a binary feel.     



This song is played in triplets. So instead of a mesure being 1e&a2e&a3e&a4e&a it\'s 1ea2ea3ea4ea.
This will make it a bit harder at first but it's a fun song.

Intro
        X3
C|------------|------------|------------|------------|------------|x--x--------|
S|------------|------------|---o-----o--|---o-----o--|---o-----o--|---o--oooooo|
F|------------|-------ooo--|o----oo----o|o----oooo-oo|o----oo----o|------------|
B|------------|------------|o--o--o--o--|o--o--o--o--|o--o--o--o--|o--o--o--o--|




   

kevin

#9
  Dtab V1.03 WIP beta 21 - Importer Updates Cont.

    Much of the work in this upgrade now is revolving around testing the import quality.  Recently all I've been doing is importing tracks and manually validating them.  Which is about the only way to get an idea of how well this version is working, but it's pretty time consuming.   But through this test and retest process we can work out how well it understands the chart and where it gets lost, at least that's the theory.    The importer is lot like the parser in compiler though, where it assumes an order of operations.  Changing that order (even only slightly) can break charts that used to import correctly,  which is why this can be so time consuming.

   Yesterday was a good example of this, while running through my collection I found a simple looking tab that you'd assume would import 100% at first glance, but in reality crashes DTAB.   Turned into a bit of wild goose chase trying to locate the problem, which appeared to be time sig issue, but turned out to be something a little deeper where the song rebuilder wasn't sizing the song buffer correctly.    Fixing this, uncovered another oddity.  Where certain types of staff rows with multiple repeats on them, seem to be interpret as row repeats.  No idea why !  

   Eg.


  ||----repeat 4x---||                                 ||---repeat 16x---||
CC ||----------------||----------------|-------X--------||----------------||
RD ||x--xX--xx--xX--x||x--xx--xx--xx--X|x--xx---x--xx--x||x--xX--xx--xX--x||
SD ||---go--og--go--g||---go--gg--go--o|---go--og--go--o||---go--gg--go--g||
BD ||o-------o-------||o-------o-------|o-------o-------||o-------o-------||


 This row should be (5+1+1+17)=24 bars, but after importing it becomes 384 bars..   erm.. :)   - There's bound to be a trigger, but what makes this even stranger, is that there are other almost identical rows that import correctly...  What fun..  

 
 Edit:  Found the repeat issue, turns out it was possible for the multi bar repeat to skip over the first divider character.  The above imports as 24 bars now.  


 

 Dtab V1.03 WIP beta 22 - Repeat Detection .

      Some tabbers embed Repeat Value* markers inside the bar data (example bellow).   Such repeat segments in older versions of the dtab would be lost,  but V1.03 can detect this explicit situation.  However there are times where the tabber means to repeat the previous bar in similar a manner,  which is not currently supported.   Might need a switch for that actually.


      Anyway, so this row of staff lines imports as a 4 bar block.  (pic bellow)


  CC|---------------|x--------------|---Repeat  1x--|
  HH|---------------|--x-x-x-x-x-x-x|x-x-x-x-x-x-x-x|
  SN|-------------o-|----o-------o--|----o-------o--|
  BD|---------------|o-----o-o------|o-----o-o------|



kevin

#10
  Dtab V1.03 WIP beta 24 - Moving Onto Doc's

    Added a number of little tweaks to the user editing interface, such as the ability to click upon a section heading to edit it,  the titles section also responds to this, which just saves hitting the menu.   Moreover, add section now includes some section name suggestions, such as Verse,Chorus  etc etc.   Allowing you less clicks/ keyboard interaction when you're in a hurry.    

    Today i've been looking at the DTAB doc's.  Been wanting to get around to dynamically generating the pages for ages now.  The existing doc's aren't anything fancy, just some html pages.  Looks a bit odd since they use the original Dtab logo graphical.    Thankfully the existing version is just plain html,  so I think the easiest way to upgrade them would be to knock up a cut'n paste app to run through and grab the main content sections and wedge those it into a new template, prolly a few pages here and there where that wouldn't work too well, but it should be OK.   Sure beats doing it by hand ! :)

   

 Doc's Parser/Converter

    The previous picture is a mock up of the old content thrown into the new template manually a few hours ago, since then I've knocked up a little conversion program in PlayBASIC that runs through the old pages grabs the sections and wedges them all into the new form.  There's a few errors in it, but all and all it's much easier.  One handy thing about using a builder now, is that it can dynamically correct old links etc that might appear in the pages.   Will probably leave the doc's in the original form (for the time being) and just run the builder in the future.    The second picture is of what the builder produces.

   Edit:  The 3rd picture is from the final converter, this one just cleans up the links and has better formatting in the output.  

   

kevin


  Dtab V1.03 WIP beta 26 - Round Up

      Tonight i've been working on cleaning the app up for it's V1.03 release, nothing really large in terms of code, just dropping in the odd bit of  functionality to round out the edges.   One such addition would be the auto song & artist name selection in the Import Tab page.  Originally the form would default to a blank name when saving.   Now it runs a quick scan over the text in the import drum tab form, looking for possible song and artist name tags.   If it find one or both, it gives you a file name suggestion, much like when you save  the current song as DTB file, or export it to Midi/Tab.

     Some other tweaks would be the addition of the URL support to the file history,  so If you import a drum tab directly from a web site, it'll remember the URL for you.   Not huge additions, but those little tweaks that help take some of the chore out of it.   Which is really my aim with this release.   There's still a few more tidbits on the to do list that I want tackle,  but for now V1.03 has more than enough functionality to keep users tabbing away.   

     

   

kevin

#12
   Dtab V1.03 WIP beta 28 - Full Screen (window) Edit Mode

      Found a few more parts that needed cleaning up yesterday, there was some buttons on the rule definer dialog that weren't fully hooked up.  None of the really big stuff, just things like deleting and importing.  There was an odd problem with the export rules to tab feature, which would work once, but cleaned the song on the second time.    But that seems to been solved now.

      This morning I've added a new display mode to the editing interface, not too happy with the layout of the main window really, can't do much about the controls really, given they're part and particle of legacy VB6 apps.   I'd like to replace them with custom components, but they do the job for now. Annoyingly they render differently between different OS's as well, yeah thanks MS :(  - Anyway,  one thing I've always thought was missing is the ability to hide the edit controls when editing or during song play back, just so the user can maximize the display area.   So we've added a full screen mode.

      To enter full screen mode we use the ESC key to toggle the interface changes.  It purposely doesn't remember this setting between edit sessions though, as it's likely a new user might tap the ESC key and have no idea what happened.   There's nothing more frustrating than firing up some new application and inadvertently  hitting a hot key combination or clicking upon something you shouldn't have..  

      Anyway, so in full screen mode the main interface looks like this (bellow).  Got a few more things I'd like to do with the layout still, but I guess they'll have to wait..

kevin


Dtab V1.03 RC1b WIP  - Docs & Dialog Clean ups

       Been working on another pass over the documentation mainly, but have done a little of rearranging of some dialogs which didn't format correctly, due to the addition of the second crash cymbal line.    Updating the doc's is difficult for V1.03, mainly since I know that this is an intermediate step.  So some of the added functionality in this edition, will more than likely change and morpth in future updates.  Knowing that, i've chosen to gloss over some of the new sections, and leave some parts out of the documentation entirely, such as Dtab Script.     

       The new doc build process and the updated doc template has really helped freshed them up,  one things that's become obvious is the some sections are getting too long for page.  To counter this, those pages have a section INDEX in them, so you jump up/down the document a bit easier.

       Baring there's no show stopping  issues discovered between now and the weekend,  I'm looking to build the release version in the next couple of the days.  Should be fun !




kevin

   Dtab V1.03 Released

      The V1.03 upgrade has just been released, as you can no doubt see there's lots of new additions and functionality tweaks.  The focus of this update has been on improving the feel of the editing environment, Doc's  and the  Drum Tab importation features, to name a few.  


  Quick Feature Overview:

   - Scroll Wheel Support for editing.

   - Drum tab importer has been updated to support a number of modern tabbing conventions right out of the box.

   - Importer now features a user definable rule set to guide the import process.  Supports staff lines and note head remapping.

  - Importer / includes built in downloader and tab decoder.  It can grab a tab and it's song information directly from the page (support most major drum tab sites)

   - Full screen edit mode & more



 Download
   
      Download DTAB