Jump to content

Anglo Fingering Generator


Recommended Posts

My weekend project was to write a semi-intelligent Anglo fingering generation program.

 

You can try it out at http://www.jimandbarb.net/fingering/fingering.html

 

Simply paste in a tune in ABC format, hit the button, and it will choose some fingerings.

 

This is still a work in progress, but I'm curious if you find this useful. The heuristics the program uses to choose the fingerings are still pretty crude. It prefers certain buttons to others, and avoids finger-hopping. But I still need to teach it about bellows technique. It also only supports C/G Jeffries layouts, but it's not a big deal to add more formats, just a lot of typing.

 

For the technically inclined: This program was written in client-side Javascript, and was really just a way to teach this language to myself. The JS is un-obfuscated, so you can take a look if you want. The program recursively examines all possible fingering combinations, pruning and memoizing parts of the tree for efficiency. It uses the excellent abcjs library for rendering in standard notation.

 

-jim

 

Link to comment
Share on other sites

This seems quite an interesting and yet challenging piece of programming. In playing an Anglo, sometimes being at the end of your bellows (either extended or compressed) can dictate that you use an alternate fingering like a press A on the accidental row LH rather than either draw A. Have you incorporated this bellows management feature into your programming? Also, you may want to incorporate the playing of ornaments which are an integral part of many Irish tunes. And especially Irish Traditional Music emphasizes bounce in the playing, and it would be interesting to see if the program can reproduce this characteristic in its output.

 

I will be interested to see the outcome and look forward to comparing the program's answers to fingerings used by some well-known performers on the concertina.

 

Ross Schlabach

Link to comment
Share on other sites

Hi Jim - this looks like the start of a very interesting project. One thought building on Ross' post is I wonder if it could be developed to reflect that playing style of different players so you could have a tune of your choice with fingering in the style of, for instance, William Kimber and then compare it to the same tune using style of Scan Tester? Something for you to think about in a quiet moment (or year) or two? :)

Link to comment
Share on other sites

The program isn't set up to guess what chords to use for accompaniment, so it won't do arrangements like William Kimber or Scan Tester, but one could pretty easily program it with selectable modes for fingering choices, by meddling with the bits that calculate the cost function.

 

I kind of do want to hack on this. Maybe I will.

 

Ideas for future directions I might pursue:

 

Teach to understand scales and intervals, so that it can gracefully use any key.

Use ABC stylesheet directives to configure concertina information -- "%%concertina-layout Wheatstone" or "concertina-key G/D"

Introduce configurable fingering weights to encourage it to ... change bellows direction on the downbeat, or whatever.

Port it to Python, because maybe I want to.

Link to comment
Share on other sites

Those are all great ideas.

 

I think the concertina type (G/D, C/G, and Jeffries vs Wheatstone layouts) would best be presented as an HTML widget, which would then be passed to the JS script. This is pretty straightforward - just haven't gotten around to it.

 

Chords are a whole different ballgame!

 

So I think the next thing to do is just fix some problems in the hacky tree pruning part of the code. I'll probably rewrite that part to use the A-star algorithm next weekend.

 

-jim

 

The program isn't set up to guess what chords to use for accompaniment, so it won't do arrangements like William Kimber or Scan Tester, but one could pretty easily program it with selectable modes for fingering choices, by meddling with the bits that calculate the cost function.

 

I kind of do want to hack on this. Maybe I will.

 

Ideas for future directions I might pursue:

 

Teach to understand scales and intervals, so that it can gracefully use any key.

Use ABC stylesheet directives to configure concertina information -- "%%concertina-layout Wheatstone" or "concertina-key G/D"

Introduce configurable fingering weights to encourage it to ... change bellows direction on the downbeat, or whatever.

Port it to Python, because maybe I want to.

Link to comment
Share on other sites

My instinct tells me that A* might be overkill. I think I have my old algorithmics textbook around here... I bet I could dig up something easier than A* and just as sweet for this.

 

In the meantime, I've been poking around at it. I've got a version here that will accept wacky key signatures like "K: A# Locrian _B" or whatever. I'll email you the JS for that.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...