lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Accordion register sets


From: David Kastrup
Subject: Accordion register sets
Date: Tue, 05 Jul 2011 18:27:53 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

Hi, I have the following file (with outcommented usage examples at the
end) flying around, and I think it is a reasonably workable approach to
typesetting accordion register symbols.  It should also be a good
starting point for making extensions, like selecting Midi instruments at
the same time (having the registers available both as pure markup as
well as as music functions should help).

Comments?

% Accordion registration is tricky, partly because no two instruments
% offer the same registers.  In particular bass registers are not
% standardized at all and often left unspecified (orchestra scores
% don't use bass notes anyway).
%
% registration is indicated by using a control sequence name
% indicating the register set as either a markup function or a music
% function, taking a string as argument.  The music function is a text
% (super)script and can be employed either standalone or as
% superscript attached to a music event.

#(defmacro define-register-set (set-symbol instrument)
`(begin (define-markup-command (,set-symbol layout props name) (string?)
  (let* ((instrument ,instrument)
         (register (ly:assoc-get name (ly:assoc-get 'register instrument)))
         (reedbanks (ly:assoc-get 'reedbank instrument)))
   (interpret-markup layout props
    (let markup-builder ((dots
                          (or (ly:assoc-get 'dots register)
                           (append-map (lambda (x)
                                        (ly:assoc-get 'dots
                                         (ly:assoc-get x reedbanks)))
                            (ly:assoc-get 'reedbanks register))))
                         (result (markup #:musicglyph
                                  (ly:assoc-get 'glyph instrument))))
     (if (null? dots) result
      (markup-builder (cdr dots)
       (markup #:combine result
        #:translate (car dots) #:musicglyph "accordion.dot")))))))
  (define ,set-symbol (define-music-function (parser position register)
                       (string?)
                       (make-music
                        'TextScriptEvent
                        'direction
                        1
                        'text
                        (markup ,(symbol->keyword set-symbol) register))))))

% The register names in the default Discant register set have been
% more or less modeled after numeric Swiss notation like depicted in
% <URL:http://de.wikipedia.org/wiki/Register_%28Akkordeon%29>,
% omitting the slashes and dropping leading zeros.
%
% The names are basically three-digit numbers with the lowest digit
% specifying the number of 16' reeds, the tens the number of 8' reeds,
% and the hundreds specifying the number of 4' reeds.  Without
% modification, the specified number of reeds in 8' is in the symbol.
% Newer instruments may have register choices between 8' with and
% without cassotto.  Notationally, the central dot then indicates use
% of cassotto.  You can suffix the tens' digits "1" and "2" with "+"
% or "-" to indicate clustering the dots at the right or left
% respectively rather than centered.

#(define-register-set Discant
  '((glyph . "accordion.discant")
    (reedbank
     (L (dots (0 . 0.5)))
     (M (dots (0 . 1.5)))
     (MM (dots (1 . 1.5)))
     (MMM (dots (-1 . 1.5)))
     (H (dots (0 . 2.5))))
    (register
     ("1" (reedbanks L))
     ("10" (reedbanks M))
     ("11" (reedbanks L M))
     ("1+0" (reedbanks MM))
     ("1+1" (reedbanks MM L))
     ("1-0" (reedbanks MMM))
     ("1-1" (reedbanks MMM L))
     ("20" (reedbanks MMM MM))
     ("21" (reedbanks MMM MM L))
     ("2+0" (reedbanks MM M))
     ("2+1" (reedbanks MM M L))
     ("2-0" (reedbanks MMM M))
     ("2-1" (reedbanks MMM M L))
     ("30" (reedbanks MMM MM M))
     ("31" (reedbanks MMM MM M L))
     ("100" (reedbanks H))
     ("101" (reedbanks H L))
     ("110" (reedbanks H M))
     ("111" (reedbanks H L M))
     ("11+0" (reedbanks H MM))
     ("11+1" (reedbanks H MM L))
     ("11-0" (reedbanks H MMM))
     ("11-1" (reedbanks H MMM L))
     ("120" (reedbanks H MMM MM))
     ("121" (reedbanks H MMM MM L))
     ("12+0" (reedbanks H MM M))
     ("12+1" (reedbanks H MM M L))
     ("12-0" (reedbanks H MMM M))
     ("12-1" (reedbanks H MMM M L))
     ("130" (reedbanks H MMM MM M))
     ("131" (reedbanks H MMM MM M L)))))

% The default bass register definitions have been modeled after the
% article <URL:http://www.accordions.com/index/art/stradella.shtml>
% originally appearing in Accord Magazine.
%
% If you aren't composing for a particular target instrument, using
% the five reed definitions makes more sense than using a four reed
% layout: in that manner, the "Master" register is unambiguous.
% Since this is rather the rule in literature bothering about bass
% registrations at all, we use this as the default setting.
% Instrument-specific variants follow.

#(define-register-set StdBass
  '((glyph . "accordion.stdbass")
    (register
     ("Soprano" (reedbanks Soprano))
     ("Alto" (reedbanks Alto Soprano))
     ("Tenor" (reedbanks Tenor Alto Soprano))
     ("Master" (reedbanks Bass Tenor Contralto Alto Soprano))
     ("Soft Bass" (reedbanks Bass Tenor Contralto))
     ("Soft Tenor" (reedbanks Tenor Alto))
     ("Bass/Alto" (reedbanks Bass Alto Soprano)))
    (reedbank
     (Soprano (dots (0 . 3.5)))
     (Alto (dots (0 . 2.5)))
     (Contralto (dots (1 . 2)))
     (Tenor (dots (0 . 1.5)))
     (Bass (dots (0 . 0.5))))))

% StdBassIV is the variant used in four reed standard basses
% with low note E1 (Kontra-E) from Hohner.
%
% Notable orchestra instruments are most Morino models with MIII (the
% others are five-reed instead) and the Atlantic IV.  Most of those
% models have three register switches.  Some newer Morinos with MIII
% might have five.
%
% The prevalent three-register layout uses the middle three switches
% "Tenor", "Master", "Soft Bass".  Note that the sound is quite darker
% than the same registrations of C2-based instruments.

#(define-register-set StdBassIV
  '((glyph . "accordion.stdbass")
    (reedbank
     (Soprano (dots (0 . 3.5)))
     (Alto (dots (0 . 2.5)))
     (Tenor (dots (0 . 1.5)))
     (Bass (dots (0 . 0.5))))
    (register
     ("Soprano" (reedbanks Soprano))
     ("Alto" (reedbanks Alto Soprano))
     ("Tenor" (reedbanks Tenor Soprano))
     ("Master" (reedbanks Bass Tenor Alto Soprano))
     ("Soft Bass" (reedbanks Bass Tenor Alto))
     ("Bass/Alto" (reedbanks Bass Alto Soprano))
     ("Soft Bass/Alto" (reedbanks Bass Alto))
     ("Soft Tenor" (reedbanks Tenor Alto)))))

% Five-reed Morinos (without separate MIII) have all reedbanks spaced
% one octave apart starting with E1.  The reed starting at E5 usually
% is sounded together with the one at E4 and printed at equal height
% in the symbol (as see on black register switches of older midels).
% Only the rather new 7-register layout appears to offer E4 in
% isolation.
%
% Old Morinos have the 3 registers (later 5 registers) with the
% "Master" switch being in the middle.
%
% Judging from photographs of the 6 register symbols of an Tango VM,
% they would seem to have the 5-register Morino layout, but at the
% bottom an additional register only containing the bass reed.  This
% setting would not appear to offer chords.  The Tango VM register
% switches contain five dot rows, either diagonally without circle, or
% vertically in a circle.  While these layouts correspond quite better
% with the actual reed layout than the Morino switch symbols, they
% don't match the four-row dot layout used in literature.  So we just
% fold this instrument into the Morino layout, but offer the "Bass"
% register.
%
% The newer 7-register Morino design has no symbols on the switches to
% take as a model for register symbols.  For better correspondence
% with four-reed instruments (which may be used to play the part after
% all), we use a symmetrical dot for the E4-only register.
%
% Composers should likely prefer the five-reed versions of these
% symbols.  The mismatch of a four-reed instrument with five-reed
% symbols is easier to resolve for the player than the other way
% round.

#(define-register-set StdBassV
  '((glyph . "accordion.stdbass")
    (reedbank
     (Sopranos (dots (-0.5 . 3.5) (0.5 . 3.5)))
     (Soprano (dots (0 . 3.5)))
     (Alto (dots (0 . 2.5)))
     (Tenor (dots (0 . 1.5)))
     (Bass (dots (0 . 0.5))))
    (register
     ("Bass/Alto" (reedbanks Bass Alto Soprano))
     ("Soft Bass/Alto" (reedbanks Bass Alto))
     ("Alto" (reedbanks Alto Sopranos))
     ("Tenor" (reedbanks Tenor Sopranos))
     ("Master" (reedbanks Bass Tenor Alto Sopranos))
     ("Soft Bass" (reedbanks Bass Tenor Alto))
     ("Soft Tenor" (reedbanks Tenor Alto))
     ("Soprano" (reedbanks Soprano))
     ("Sopranos" (reedbanks Sopranos))
     ("Solo Bass" (reedbanks Bass)))))

% Golas are quite closer to standard registration, apparently.  We
% call an additional bass reed at Alto pitch "Contratenor".  For
% mostly esthetic reasons, we don't display it in the "Master"
% setting.  As a consequence, the register display is closer to
% standard as long as you don't use the rather special "Alto/Soprano"
% register which has bass notes at Alto pitch and chords at Soprano
% pitch.

#(define-register-set StdBassVI
  '((glyph . "accordion.stdbass")
    (register
     ("Soprano" (reedbanks Soprano))
     ("Alto" (reedbanks Alto))
     ("Soft Tenor" (reedbanks Tenor Alto))
     ("Master" (reedbanks Bass Tenor Contralto Alto Soprano))
     ("Alto/Soprano" (reedbanks Contratenor Soprano))
     ("Bass/Alto" (reedbanks Bass Alto Soprano))
     ("Soft Bass" (reedbanks Bass Tenor Contralto)))
    (reedbank
     (Soprano (dots (0 . 3.5)))
     (Alto (dots (0 . 2.5)))
     (Contralto (dots (1 . 2)))
     (Contratenor (dots (-1 . 2.5)))
     (Tenor (dots (0 . 1.5)))
     (Bass (dots (0 . 0.5))))))

% The default FreeBass is modeled after the default Discant register
% description.  Being a default, we just provide the normal 2 reed
% registrations.
#(define-register-set FreeBass
  '((glyph . "accordion.freebass")
    (reedbank
     (L (dots (0 . 0.5)))
     (M (dots (0 . 1.5))))
    (register
     ("1" (reedbanks L))
     ("10" (reedbanks M))
     ("11" (reedbanks L M)))))


%{
\new PianoStaff <<
  \set PianoStaff.instrumentName = #"Accordion"
  \new Staff { 
    d'4^\markup { \Discant #"12+1" }
    e' \Discant #"131" f'2
  }
  \new Staff {
    \clef bass
    \FreeBass #"10" c4
    <c e g>^\markup { \StdBassVI #"Soft Bass" }
    \StdBassVI #"Alto/Soprano" c2
    }
>>
%}

-- 
David Kastrup

reply via email to

[Prev in Thread] Current Thread [Next in Thread]