Minstrel Banjo

For enthusiasts of early banjo

I’m not great at reading music. That is to say, I can stare at a staff and slowly puzzle all of the notes out and painstakingly map them to the fingerboard, but I haven’t put in enough time for it to become second-nature. And transposing down two half steps on the fly with all the later tutors? I’m just not there yet.

So, music software is my friend. It’s helpful to be able to put in a melody and play it back at slower tempos and/or transpose melodies to G or D for Briggs tuning. Over the years I’ve tried a few different packages. Tabledit is like an old friend; it’s been around for years and has good support for creating tabs specifically for five string banjo (and numerous other instruments.) MuseScore is more notation-oriented and quite impressive for being free, as is Noteflight (Noteflight is web-based, which is pretty handy.). But in all of those programs, I eventually find myself frustrated by quirks in user interface and how cumbersome it can be to actually enter notes; because for every note you enter you have to specify at least two properties at once; the note and the duration.

Yesterday I spent some time fooling around with LilyPond, which is another free package that describes itself as a “Music engraving program.” I think I’ve found my new go-to solution. It renders beautiful notation and can output midi - it’s also quite different from all of the others in that you enter music as plain text instead of by clicking and dragging notes and other notation around a graphic staff. So this:

e4 d c d e e e2 d4 d d2 e4 e e2



Becomes this:

Full disclosure: I’m a computer programmer by day, so reducing music to a concise set of patterns and instructions seems to be a good fit with the way my brain works. It’s the same reason that I vastly prefer the LaTeX typesetting system to a visual word processor like MS Word for writing documentation; you spend your time working on your content, not fighting with formatting. I’ve heard it described as “WYSIYM” (What You See Is What You Meant) vs. “WYSIWYG” (What You See Is What You Get.)

In both cases, once you’ve entered your source information, you can render it into multiple formats, usually with just a couple of instructions and without changing the core information.

For example, transposition! I managed to get ‘Power of Music’ from the Rice 1858 instructor into LilyPond format, and all I had to do to get an arrangement for Briggs tuning was add one instruction to transpose from A to G:

\transpose a g { ...original melody in A goes here... }

 

And you get this:
I’ve attached the LilyPond source file (which is probably full of newbie mistakes), resulting PDF, and MIDI file for anyone who's curious. (I also tried adding the fingering hints from the original source, which may contain an error or two.) There’s definitely a learning curve, but for me I think that it’s eventually going to be a much faster way to arrange music digitally than pointing and clicking. It does support rendering tablature as well (and supports custom tunings along with a number of built-in instruments), but I haven’t wrapped my head around that yet.

(The '.ly' file is plain text, so you can open it in any simple text editor.)

Views: 473

Attachments:

Reply to This

Replies to This Discussion

I've been using Barfly for many years, but have lately been using Easy ABC, since Barfly is no longer supported. Its great for importing whole ABC tune books then transposing, editing and printing. I'm not on expert on ABC notation but have found that if use an existing file and edit the headers (I can never remember the format on those),  the notation is fairly simple, that being said I may give lilypond a go.

I've become somewhat familiar with MuseScore.  It was cumbersome when clicking and dragging notes and timing but once I became familiar with keyboard entry, it was much quicker.  I keep my right hand on the numeric pad (for the notes) and my left in the normal position (for timing) and entering notation goes pretty fast.  I just have to look up at the screen once in a while to make sure I haven't forgotten to change the time value somewhere along the line.   I haven't tried others so I'm not suggesting/promoting MuseScore.  A lot probably depends what you become accustomed to.

Lilypond is great fun to play around with. I've been playing with it for about a year now.
One of the interesting things is that you can save stuff from  many other notation programs
like Musescore, tabledit, texguitar, etc. in lilypond format. It gets kind if interesting to see how
the different programs set up the lilypond file.

Last June I posted the rattlesnake jigs in the "tune of the week" that was done with Musscore and Lilypond

If you use Lilyppond, one program to also have is a lilypond text editor which allows you to see what you to see what is actually happening to the score as you make changes.
A program called Frescobaldi is one of the better ones.

I'll include a link to the frescobaldi site and a couple of lilypond files for you to play with.

http://frescobaldi.org/

Attachments:

Oh, yes! I meant to link to Frescobaldi, its split-pane preview feature is really handy (and if you click on a note in the rendered preview it takes you right to it in the source code.)

One nice thing is once you get the style you like set up, you can just copy and paste your notation into the lilypond program and it does all the work. Although I always have to do some tweaking, but that can be half the fun.

Scott, that is great!

Today I googled for lilypond banjo minstrel and found your fine examples. I tabbed out  one Briggs tunes today, thanks to your template it was note that difficult. But I have a problem with the midi file, the midi ignores the repeats. The same happend with your example here, when generating with Frescobaldi the sheet with the repeats looks fine, but the midi is generated without repeats.....

Hi Manfred,

You can get the midi to observe repeats by splitting it into its own score block and using the \unfoldRepeats command - check out the Lilypond file for 'The Power of Music' in my original post.

With a bit more fussing you can also generate tablature, which I did for Lotus Jig.

Hi Andy, now I found it, thanks a lot.

Yes I made also tab, not yet double checked...

Attachments:

I use both Frescobaldi and Lilypond. The output is spectacular. Unfortunately, sometimes doing simple things is quite difficult. I wanted to tab Skeleton Dance so that it would have exactly four bars per line. I ended up downloading a short Scheme program to make that work. I still don't understand how that part works.

If you have a tolerance for the tedium of the input format, it makes the best output.

Hi Brian, 

with the \break command you can force a new line, see attached example

\version "2.18.0"
% \include "english.ly" % Use f & s for flat and sharp instead of is & es.

\header {
title = "The girl with the blue dress on" % Song Title
composer = "Briggs 1855" % Composer
arranger = "page 25"
enteredby = "Enterer" % Person who created this lilypond file
poet = "dGDF#A" % tuning
instrument = "Banjo"
copyright = "&copyright; now in the PD" %now in the PD% &copyright;
tagline = ##t % Controls Lilypond tagline on last page
}

\paper {
#(set-paper-size "letter")
#(include-special-characters)
two-sided = ##t
inner-margin = 0.5\in % For even total pages = 0.5, otherwise 0.7
outer-margin = 0.7\in % For even total pages = 0.7, otherwise 0.5
top-margin = 0.5\in
bottom-margin = 0.5\in
ragged-last-bottom = ##t % False = evenly spread over pages; True = compact with trailing white space
evenHeaderMarkup = \markup {
\fill-line {
\on-the-fly #print-page-number-check-first {
\fromproperty #'header:title
\fromproperty #'page:page-number-string
\fromproperty #'header:instrument
}
}
}
oddHeaderMarkup = \evenHeaderMarkup
}

% Macros
#(define RH rightHandFinger) % -\RH #1,2,3 - allows right hand notation
sl = \glissando % Slide

% Global settings
global = {
\time 2/4 % Time Signature
\numericTimeSignature % Keep time signature 4/4 not C.
\key g \major % Key
\tempo 4 = 120 % Tempo
}

% *** Chords go here
chordlist = \chordmode {}

% *** Notes go here
melody = {

s4 s8 d8 \3 | % 1
\repeat volta 2 {
b8 b16 d'16 \5 b8 g8 | %2
a8 b8 g8 b16 d'16 \5| % 3
c'16 fis16 c'16 d'16 \5 e8 fis8 | \break % 4
a8 g8 r8 d16 d'16 \5 | % 5
b8 b16 d'16 \5 b8 g8 | %6
a8 b8 g8 b16 d'16 \5| % 7
c'16 fis16 c'16 d'16 \5 e8 fis8 | % 8
a8 g8 r8 d8 | \break % 9
}

% B part
\repeat volta 2 {
g8 b16 d'16 \5 g8 b16 d'16 \5| %10
g8 g8 r8 d8| % 11
g8 b16 d'16 \5 g8 b16 d'16 \5 | % 12
fis8 a8 r8 d8| \break % 13
g8 b16 d'16 \5 b8 g8| %14
a8 b8 c'8 e'8| % 15
d'16 \1 d'16 \5 d'16 \1 d'16 \5 a8 d'8 \5| % 16
b8 g8 r4 | % 17
}

% Song termination bar
}

\score {
\new StaffGroup = "tab with traditional"
\chords {
\set chordChanges = ##t % Only print chord when it changes.
\chordlist % Chords
}
\set StaffGroup.instrumentName = "Banjo"
\override StaffGroup.SystemStartBracket.collapse-height = #1
% adds bracket even for single bar
\override Score.SystemStartBar.collapse-height = #1
% add start bar even for single bar
% *** Comment out from here to >> to remove traditional notation.

\new Staff = "banjo traditional"
\set Staff.midiInstrument = #"banjo"
\set strokeFingerOrientations = #'(down)
{
\accidentalStyle forget
\compressFullBarRests % Multi bars rest compressed to one bar.
\stemUp % Stems are all up on traditional notation.
\clef "treble_8" % G-clef dropped by one octave
\global % global variables
\melody % Music
}
>>
%}
% *** Comment out from here to >> to remove tablature notation.
\new TabStaff = "banjo tab"
\set TabStaff.tablatureFormat = #fret-number-tablature-format-banjo
\set TabStaff.stringTunings = \stringTuning < d' g d fis a> %eAEG#B
\set strokeFingerOrientations = #'(down)
\set TabStaff.minimumFret = #0 % This allows capoing
\override Beam.damping = #+inf.0 % makes all beams level
{
\compressFullBarRests % Multi bars rest compressed to one bar.
\tabFullNotation % Tab gets stems and rests
\stemDown % Stems are all down on tablature
\global % global variables
\melody % Music
}
>>
>>

\layout {
\context {
\Score
% Remove string numbers (as tablature includes that inforamtion.
\override StringNumber.transparent = ##t
% set right hand digit names
\override StrokeFinger.digit-names = ##("t" "i" "m" "" "")
% Adjust the final number below to change spacing between notes.
% 32 means smallest note is assumed to be a 32nd note.
% \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/32)
}
}
\midi { } % Produce a midi file of the music. Commented out for now.
}

%{
convert-ly.py (GNU LilyPond) 2.18.2 convert-ly.py: Processing `'...
Applying conversion: 2.17.0, 2.17.4, 2.17.5, 2.17.6, 2.17.11, 2.17.14,
2.17.15, 2.17.18, 2.17.19, 2.17.20, 2.17.25, 2.17.27, 2.17.29,
2.17.97, 2.18.0
%}


Brian Kimerer said:

I use both Frescobaldi and Lilypond. The output is spectacular. Unfortunately, sometimes doing simple things is quite difficult. I wanted to tab Skeleton Dance so that it would have exactly four bars per line. I ended up downloading a short Scheme program to make that work. I still don't understand how that part works.

If you have a tolerance for the tedium of the input format, it makes the best output.

OK. Thanks for the pointer. Lilypond is a super good tool for typesetting music once you figure out how to use it, but it can be really difficult to figure out how to use it. 

I don't remember running into the \break command. However, if I remember properly, Lilypond was occasionally putting fewer than 4 bars on a line, in which case the \break would not help. Here is the scheme that I downloaded from the interwebs.

%% The following is a custom engraver written in scheme
% It is used to force Lilypond to write exactly four measures per
% line in the output.
% I don't know how it works. It was found on the web at
% http://lilypond.1069038.n5.nabble.com/Four-Bars-per-Line-System-aga...
%
% This is basically a modulo counter that inserts a break
% every four lines.
%
% The engraver is used in the \Layout at the bottom
%
#(define (line-break-every-nth-engraver bars-per-line)
(lambda (context)
(make-engraver
(acknowledgers ((paper-column-interface engraver grob source-engraver)
(let ((current-bar (ly:context-property context 'currentBarNumber)))
(if (= (remainder current-bar bars-per-line) 1)
(if (eq? #t (ly:grob-property grob 'non-musical))
(set! (ly:grob-property grob 'line-break-permission) 'force)
(set! (ly:grob-property grob 'line-break-permission) '())))))))))

I wonder what a "grob" does. That's a great word, "grob".

The engraver is used in the \layout command further down. to wit:

\layout {   indent = 0\mm
  \context { 
\Score
%% the following line necessary if you want to put more
%% measures to a line than Lily wants to allow
\override NonMusicalPaperColumn #'line-break-permission = ##f
\consists #(line-break-every-nth-engraver 4)
}
}

Once again, I do not understand how this all works. The Google gave it to me.

Just as a little background info, I have been programming computers since 1968. I make my living at it. And yet, Lisp and Scheme seem to escape my understanding. Time to hang up those spurs and spend more time on my music.

It seems that the <pre> tag that I used in my previous post has caused the text to be truncated. Here it is again, but with the tabstops removed by the html parser so that it is all there, even though unreadable.

#(define (line-break-every-nth-engraver bars-per-line)
(lambda (context)
(make-engraver
(acknowledgers ((paper-column-interface engraver grob source-engraver)
(let ((current-bar (ly:context-property context 'currentBarNumber)))
(if (= (remainder current-bar bars-per-line) 1)
(if (eq? #t (ly:grob-property grob 'non-musical))
(set! (ly:grob-property grob 'line-break-permission) 'force)
(set! (ly:grob-property grob 'line-break-permission) '())))))))))

And the \layout is:

\layout {
indent = 0\mm
\override StringNumber.transparent = ##t
\context {
\Score
%% the following line necessary if you want to put more
%% measures to a line than Lily wants to allow
\override NonMusicalPaperColumn #'line-break-permission = ##f
\consists #(line-break-every-nth-engraver 4)
}
}

Reply to Discussion

RSS

© 2018   Created by John Masciale.   Powered by

Badges  |  Report an Issue  |  Terms of Service