Re: Draft: Extended mensural notation support

2015-02-23 Thread Carl Sorensen


On 2/23/15 10:38 AM, Lukas Pietsch lukas.piet...@freenet.de wrote:

I have a working draft of the Lilypond coding, which involves quite a bit
of
Scheme code, a patched Lilypond font with a section of new proposed
glyphs,
and a few minor patches to Lilypond's C++ codebase. Unfortunately, owing
to
the latter, the whole system currently works only with a patched,
custom-compiled Lilypond installation. I'd like to hear if there's
interest
among the Lilypond folks to merge these extensions into the standard
distribution, and how best to proceed to do so.

Wow -- this seems like a tremendous amount of work!  I'm basically
ignorant of mensural notation, but this seems like a great advance.

I think it should be implemented in LilyPond.  And I think that the things
you have found in LilyPond that are inconsistent with best practices (e.g.
the incorrect use of flexa when it should be obliqua or oblonga;
misnomer  of maxima and longa rests) should be fixed.

It would seem that the way to go about fixing this is to create a patch
for submission.  The patch should explain the need for all the changes in
the codebase, and should include regression tests for new features added.
If there are any changes (like changing the name of the long rests) that
will affect existing files, a convert-ly rule should be developed.

I'd encourage you to add this to the codebase.

Thanks,

Carl



___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Draft: Extended mensural notation support

2015-02-23 Thread Werner LEMBERG

I have a working draft of the Lilypond coding, which involves quite
a bit of Scheme code, a patched Lilypond font with a section of new
proposed glyphs, and a few minor patches to Lilypond's C++ codebase.
Unfortunately, owing to the latter, the whole system currently works
only with a patched, custom-compiled Lilypond installation.  I'd
like to hear if there's interest among the Lilypond folks to merge
these extensions into the standard distribution, and how best to
proceed to do so.

Congrats!  It's indeed very impressive.

 I think it should be implemented in LilyPond.

Yes.

 And I think that the things you have found in LilyPond that are
 inconsistent with best practices (e.g.  the incorrect use of flexa
 when it should be obliqua or oblonga; misnomer of maxima and
 longa rests) should be fixed.

Indeed.  Most of us are no experts in Gregorian chant, and if you are
willing to help here, this would be great.

 It would seem that the way to go about fixing this is to create a
 patch for submission.

No.  Not a patch, but a series of patches, adding the stuff in small,
incremental steps that are easy to review.  I'm willing to proof-read
all changes to the Metafont sources.

To simplify the process, I suggest that you get write access to the
lilypond git repository so that you can add such incremental patches
to one or more separate branches (I like this method bettern than the
`modern' way of forking lilypond at github, then followed by push
requests) – unfortunately, with Rietveld you only see all commits
squeezed to a single commit.  After a first review, you could add a
new branches that replaces older ones with better commits, etc., etc.
If we have concensus, it should be easy then to merge everything into
`staging'.


Werner
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Draft: Extended mensural notation support

2015-02-23 Thread Lukas Pietsch
David Kastrup dak at gnu.org writes:

 You state The notation samples, which include numerous highly uncommon
 and idiosyncratic forms, will be encoded in the corpus in an XML-based
 format.  If the forms are highly uncommon and idiosyncratic, can they
 be described by an XML-based expressions that are _not_ highly uncommon
 and idiosyncratic?
 
 For me the most important question arising is not as much whether we
 should merge your support for a particular set of uncommon and
 idiosyncratic notation, but rather what kind of support we would need in
 LilyPond such that this and other forms of uncommon and idiosyncratic
 notations can be supported _without_ recompilation of LilyPond.
 
 Do you have an idea how LilyPond could be generally better for such
 tasks out of the box?
 

Indeed, I quite agree it's a matter of how best to make the basic Lilypond
system most efficiently extendable. I'd like to think of what I'm proposing
as a thing with two layers. 

There is a set of core functional extensions that will just enhance the
coverage of standard features of mensural notation: an improved glyph set
for mainstream white notation, support for mainstream black notation, a
consistent and user-friendly set of commands for such things as
perfect/imperfect meters, rests, coloration and so on. This will be standard
stuff and useful for all users of mensural notation. 99% of it will be
implemented either in Metafont or in a Scheme stylesheet, which a user will
be able to simply include (just as they now include gregorian.ly to get
quadratic notation). There are only a very few small patches to the C++ code
that will be needed to support this, and they should be easy enough to merge
into the standard distribution without affecting anything else.

The second layer is a general support mechanism that provides an
infrastructure for adding further, user-defined features such as additional
alternative glyph sets, non-standard note shapes and so on. Think of it as
similar to the way shape notes are implemented now: a standard extension
mechanism that allows users to define their own new sets of noteheads on the
fly. The idiosyncratic features required by the TML project will be
implemented as one such set of user-defined extensions. The standard
distribution merely needs to provide the general functional infrastructure
for it. That, too, can be done entirely in Scheme; no further changes in the
C++ codebase are needed for it beyond those mentioned above. 

Best
Lukas



___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Draft: Extended mensural notation support

2015-02-23 Thread David Kastrup
Lukas Pietsch lukas.piet...@freenet.de writes:

 Indeed, I quite agree it's a matter of how best to make the basic
 Lilypond system most efficiently extendable. I'd like to think of what
 I'm proposing as a thing with two layers.

 There is a set of core functional extensions that will just enhance
 the coverage of standard features of mensural notation: an improved
 glyph set for mainstream white notation, support for mainstream black
 notation, a consistent and user-friendly set of commands for such
 things as perfect/imperfect meters, rests, coloration and so on. This
 will be standard stuff and useful for all users of mensural
 notation. 99% of it will be implemented either in Metafont or in a
 Scheme stylesheet, which a user will be able to simply include (just
 as they now include gregorian.ly to get quadratic notation). There
 are only a very few small patches to the C++ code that will be needed
 to support this, and they should be easy enough to merge into the
 standard distribution without affecting anything else.

 The second layer is a general support mechanism that provides an
 infrastructure for adding further, user-defined features such as
 additional alternative glyph sets, non-standard note shapes and so
 on. Think of it as similar to the way shape notes are implemented
 now: a standard extension mechanism that allows users to define their
 own new sets of noteheads on the fly. The idiosyncratic features
 required by the TML project will be implemented as one such set of
 user-defined extensions. The standard distribution merely needs to
 provide the general functional infrastructure for it. That, too, can
 be done entirely in Scheme; no further changes in the C++ codebase are
 needed for it beyond those mentioned above.

Sounds really good.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Draft: Extended mensural notation support

2015-02-23 Thread Lukas Pietsch
Werner LEMBERG wl at gnu.org writes:

 
 No.  Not a patch, but a series of patches, adding the stuff in small,
 incremental steps that are easy to review.  I'm willing to proof-read
 all changes to the Metafont sources.
 
 To simplify the process, I suggest that you get write access to the
 lilypond git repository so that you can add such incremental patches
 to one or more separate branches (I like this method bettern than the
 `modern' way of forking lilypond at github, then followed by push
 requests) – unfortunately, with Rietveld you only see all commits
 squeezed to a single commit.  After a first review, you could add a
 new branches that replaces older ones with better commits, etc., etc.
 If we have concensus, it should be easy then to merge everything into
 `staging'.

Thanks for this advice. I'm afraid I have to admit I'm a total novice at
dealing with these kinds of versioning tools, commits and branches and
stuff, so I can only hope I'll manage these things without messing up too
much. I also found dealing with Metafont a real challenge - I just about
managed to get the shapes the way I wanted them, but the code might still be
quite messy and technically sub-optimal. 

Lukas
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


[PATCH] Add scheme engraver for StaffTab notation

2015-02-23 Thread Ricardo Wurmus
Hi,

I failed to authenticate with Rietveld via git-cl (using the web interface it
works just fine); the reason is given as WebLoginRequired.  Since I don't know
how to fix this, I'm sending my patch along with this email.

It adds new tunings for the Chapman Stick and a StaffTab engraver.

Here's an example of how to use it:



nyan.ly
Description: Binary data

I'm not particularly fond of the position of the fret indicators, nor do I like
that they get so very close to the annotations (arr. Ricardo Wurmus) on the
top right.

This is not *exactly* the same as StaffTab notation as the string numbers on the
very left, next to the note lines are not indicated, but it works well enough to
be useful for Stickists.

Here's the patch:

From 5cb85101ce9772cef8ed005021a2f4b53743d38c Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus rek...@elephly.net
Date: Mon, 23 Feb 2015 23:00:54 +0100
Subject: [PATCH] Add scheme engraver for StaffTab notation

The StaffTab notation is a system combining graphic elements of
tablature with standard music notation and Emmett Chapman's finger
symbols for notating tapping on a Chapman Stick.
---
 ly/stafftab.ly|  26 
 ly/string-tunings-init.ly |  16 +++
 scm/lily.scm  |   1 +
 scm/stafftab-engraver.scm | 344 ++
 4 files changed, 387 insertions(+)
 create mode 100644 ly/stafftab.ly
 create mode 100644 scm/stafftab-engraver.scm

diff --git a/ly/stafftab.ly b/ly/stafftab.ly
new file mode 100644
index 000..869b460
--- /dev/null
+++ b/ly/stafftab.ly
@@ -0,0 +1,26 @@
+\layout {
+  \context {
+\Score
+\accepts StaffTab
+  }
+  \context {
+\Staff
+\name StaffTab
+\alias Staff
+\denies Voice
+\defaultchild StickVoice
+\accepts StickVoice
+\description Same as @code{Staff} context, except that it is accommodated for typesetting a piece in StaffTab notation.
+%% Here come all the context modifications (different font, whatever)
+  }
+  \context {
+\Voice
+\name StickVoice
+\alias Voice
+\description Same as @code{Voice} context, except that it is accomodated for typesetting a piece in StaffTab notation.
+
+\remove Fingering_engraver
+\remove New_fingering_engraver
+\consists #stafftab-engraver
+  }
+}
diff --git a/ly/string-tunings-init.ly b/ly/string-tunings-init.ly
index 034e9a2..e0a09e9 100644
--- a/ly/string-tunings-init.ly
+++ b/ly/string-tunings-init.ly
@@ -85,8 +85,24 @@ for documentation purposes.)
 \makeDefaultStringTuning #'cello-tuning \stringTuning c, g, d a
 \makeDefaultStringTuning #'double-bass-tuning \stringTuning e,, a,, d, g,
 
+%% tunings for 12-string Chapman Stick
+\makeDefaultStringTuning #'stick-classic-tuning \stringTuning d' a e b, fis, cis, c,, g,, d, a, e b
+\makeDefaultStringTuning #'stick-matched-reciprocal-tuning \stringTuning c' g d a, e, b,, c,, g,, d, a, e b
+
+
 defaultStringTunings = #(reverse! defaultStringTunings)
 
 %% convert 5-string banjo tuning to 4-string by removing the 5th string
 four-string-banjo = #(lambda (tuning)
 			 (take tuning 4))
+
+%% convert 12-string Chapman Stick tuning to 10-string tuning
+ten-string-stick = #(lambda (tuning)
+ (append (list-head tuning 5) (list-head (list-tail tuning 6) 5)))
+
+%% get either the bass or the melody string group
+stick-string-group = #(lambda (tuning group)
+   (let ((num (/ (length tuning) 2)))
+(if (equal? group 'bass)
+ (list-head tuning num)
+ (list-tail tuning num
diff --git a/scm/lily.scm b/scm/lily.scm
index 6322e01..151e913 100644
--- a/scm/lily.scm
+++ b/scm/lily.scm
@@ -585,6 +585,7 @@ messages into errors.)
 define-grob-interfaces.scm
 define-stencil-commands.scm
 scheme-engravers.scm
+stafftab-engraver.scm
 titling.scm
 text.scm
 
diff --git a/scm/stafftab-engraver.scm b/scm/stafftab-engraver.scm
new file mode 100644
index 000..f280255
--- /dev/null
+++ b/scm/stafftab-engraver.scm
@@ -0,0 +1,344 @@
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 2015 Ricardo Wurmus rek...@elephly.net
+
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond.  If not, see http://www.gnu.org/licenses/.
+
+(use-modules (srfi srfi-26))
+
+
+;; settings
+(define staff-padding-bass 2.5)   ; Padding below bass staff
+(define 

Re: Draft: Extended mensural notation support

2015-02-23 Thread Joram Berger
Hi Lukas,

once again, I am no expert on ancient notation. So I don't know whether the
length of the stems in your renaissance style are required to be exactly as long
as they are now. They roughly end in the middle of a staff space for notes on
this position and on a staff line for notes on a staff line – but not quite.
My aesthetic feeling would prefer it if these stems are about 5% - 10% of a
staff space longer to make the visual impression that the ‘bubble’/the thicker
end of the stem is centred visually between the staff lines or on the staff line
and not just reaching a very tiny bit over it as it is now.

To illustrate what I mean, I attached a small part of your score (stems only).
The first and the third stem are from your original and the second and fourth
stem are my proposition (only regarding the thicker end of it – of course they
would have to reach down to the note head).

What do you think?


Two more questions:
- What usage scenarios are you thinking about for these styles?
  A complete renaissance score to reproduce a historic original, incipits,
  renaissance and modern staffs in the same score, anything else?
- How easy would is it to reuse the musical content of an ancient staff in a
  modern staff to show a modern equivalent?

Cheers,
Joram
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [PATCH] Add scheme engraver for StaffTab notation

2015-02-23 Thread Werner LEMBERG

 Here's the patch:

Just having a quick look (since I don't understand Tab notation at
all) I ask you the same as almost everybody else who commits a patch
the first time: Please try to limit the line length to 80 characters!


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [PATCH] Add scheme engraver for StaffTab notation

2015-02-23 Thread Ricardo Wurmus

Werner LEMBERG writes:

 Just having a quick look (since I don't understand Tab notation at
 all) I ask you the same as almost everybody else who commits a patch
 the first time: Please try to limit the line length to 80 characters!

The line length in the patch is already limited to 80 characters.  I use
fci-mode in Emacs to display the fill column and it is set to 70
characters and is crossed at only one point.  Do you want me to change
the maximum length from 70 to 80?

The example (which is not part of the patch) has no strict length
restrictions.

StaffTab notation is very much unlike common tab notation, so
familiarity with guitar tabs would not help.  Familiarity with the
Chapman Stick, however, would help.  It is primarily like regular
notation with a few additions and a few modifications:

- the shape of the note head indicates what finger is to be used to play
  the note.  A perfectly circular disc-shaped note head indicates that
  the first/index finger is to be used; a diamond-shaped note head
  indicates the second finger; a triangle the third finger; a rectangle
  the fourth.

- as the Stick has 10 to 12 strings the note lines can be abused to
  represent strings.  In a grand staff with two systems the upper staff
  represents the first string group (the melody strings to be played
  with the right hand), the lower staff represents the second string
  group (the bass strings to be played with the left hand).  String
  markers (somewhat faint, wide rectangles) are added onto the note
  lines if a string number is provided in the sources.  The markers are
  somewhat spread horizontally to show an approximation of the chord
  shape.

- fret numbers are computed from the string number and pitch; they are
  collected for all notes at a timestep and string group, joined by a
  dot, and printed over (for strings in the upper staff) or under (for
  bass strings) the note.

That's pretty much all there is to it.

~~ Ricardo


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Draft: Extended mensural notation support

2015-02-23 Thread Werner LEMBERG
 To simplify the process, I suggest that you get write access to the
 lilypond git repository so that you can add such incremental
 patches to one or more separate branches (I like this method
 bettern than the `modern' way of forking lilypond at github, then
 followed by push requests) – unfortunately, with Rietveld you only
 see all commits squeezed to a single commit.  After a first review,
 you could add a new branches that replaces older ones with better
 commits, etc., etc.  If we have concensus, it should be easy then
 to merge everything into `staging'.
 
 Thanks for this advice. I'm afraid I have to admit I'm a total
 novice at dealing with these kinds of versioning tools, commits
 and branches and stuff, so I can only hope I'll manage these
 things without messing up too much.

Don't worry, we will assist you.  If you restrict your actions to one
or more separate branches, you won't interfere with anything else.

 I also found dealing with Metafont a real challenge - I just about
 managed to get the shapes the way I wanted them, but the code might
 still be quite messy and technically sub-optimal.

Indeed, it is sub-optimal – a lot of glyphs defined in
`parmesan-custom.mf' are simple translations from outline fonts.  It
would be necessary to convert them to *constructed* outlines so that
size-specific parameters are taken into account.  This is a very
time-consuming process, I fear, but in the end you get something
better :-)


Werner
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [PATCH] Add scheme engraver for StaffTab notation

2015-02-23 Thread Werner LEMBERG

 Just having a quick look (since I don't understand Tab notation at
 all) I ask you the same as almost everybody else who commits a
 patch the first time: Please try to limit the line length to 80
 characters!
 
 The line length in the patch is already limited to 80 characters.

Indeed, the line length is OK in stafftab-engraver.scm, but both
stafftab.ly and string-tunings-init.ly exceed the limit.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [PATCH] Add scheme engraver for StaffTab notation

2015-02-23 Thread Ricardo Wurmus

Werner LEMBERG writes:

 The line length in the patch is already limited to 80 characters.

 Indeed, the line length is OK in stafftab-engraver.scm, but both
 stafftab.ly and string-tunings-init.ly exceed the limit.

Ah, I see.  Sorry about that.  I already modified stafftab.ly to break
the description, but in string-tunings-init.ly there are also other
tunings that exceed 80 characters, such as guitar-seven-string-tuning,
bass-five-string-tuning, and bass-six-string-tuning.

Can a tuning definition be continued on the next line?  If so: how?

I will also break the definition of ten-string-stick at an appropriate
point in the next iteration of the patch.

~~ Ricardo


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [PATCH] Add scheme engraver for StaffTab notation

2015-02-23 Thread Ricardo Wurmus

David Nalesnik writes:

 When I apply your patch and try to compile the example file I get:

 warning: cannot find or create new `StaffTab'
 warning: cannot find or create new `StaffTab'
 warning: cannot find or create new `StickVoice'
 warning: cannot find or create new `StickVoice'
 MIDI output to `nyan.midi'...

I do get the same warnings, but they have no effect on the resulting
MIDI file or the PDF.  This may be related only to generating MIDI.  I'd
be glad for pointers as to how to prevent these warnings.

 I notice that the version statement in nyan.ly is 2.14.2.  Are you working
 off 2.19.16?

Yeah, that version statement is very old because the example is really
old already.  I started working on this a couple of years ago and left
it sitting as an extension for anyone interested in StaffTab notation
with Lilypond, but recently decided to clean this all up and submit it
upstream as a proper patch.

I'm working off latest master.  I should have changed the version
statement to avoid confusion.

~~ Ricardo


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [PATCH] Add scheme engraver for StaffTab notation

2015-02-23 Thread David Nalesnik
Hi Ricardo,

On Mon, Feb 23, 2015 at 4:42 PM, Ricardo Wurmus rek...@elephly.net wrote:


 Here's the patch:


When I apply your patch and try to compile the example file I get:

warning: cannot find or create new `StaffTab'
warning: cannot find or create new `StaffTab'
warning: cannot find or create new `StickVoice'
warning: cannot find or create new `StickVoice'
MIDI output to `nyan.midi'...

I notice that the version statement in nyan.ly is 2.14.2.  Are you working
off 2.19.16?

--David
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [PATCH] Add scheme engraver for StaffTab notation

2015-02-23 Thread David Nalesnik
On Mon, Feb 23, 2015 at 5:15 PM, David Nalesnik david.nales...@gmail.com
wrote:

 Hi Ricardo,

 On Mon, Feb 23, 2015 at 4:42 PM, Ricardo Wurmus rek...@elephly.net
 wrote:


 Here's the patch:


 When I apply your patch and try to compile the example file I get:

 warning: cannot find or create new `StaffTab'
 warning: cannot find or create new `StaffTab'
 warning: cannot find or create new `StickVoice'
 warning: cannot find or create new `StickVoice'
 MIDI output to `nyan.midi'...

 I notice that the version statement in nyan.ly is 2.14.2.  Are you
 working off 2.19.16?


Oh, sorry.  My dumb mistake!  Need to alter the path on the \include...

--David
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: [PATCH] Add scheme engraver for StaffTab notation

2015-02-23 Thread David Nalesnik
On Mon, Feb 23, 2015 at 5:24 PM, David Nalesnik david.nales...@gmail.com
wrote:



 On Mon, Feb 23, 2015 at 5:15 PM, David Nalesnik david.nales...@gmail.com
 wrote:

 Hi Ricardo,

 On Mon, Feb 23, 2015 at 4:42 PM, Ricardo Wurmus rek...@elephly.net
 wrote:


 Here's the patch:


 When I apply your patch and try to compile the example file I get:

 warning: cannot find or create new `StaffTab'
 warning: cannot find or create new `StaffTab'
 warning: cannot find or create new `StickVoice'
 warning: cannot find or create new `StickVoice'
 MIDI output to `nyan.midi'...

 I notice that the version statement in nyan.ly is 2.14.2.  Are you
 working off 2.19.16?


 Oh, sorry.  My dumb mistake!  Need to alter the path on the \include...


Hmmm... moved the contents of stafftab.ly directly into the example file,
same result.  Not sure what is happening here.

--David
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel