+pl 38.jcn2
+ - added to beams.ly
+ - open-up beam spacing for mult > 3
+ - fixed hang/sit to overlap iso aligne with staffline
+ - fixed inter beam spacing, paper*.ly
+ - scsii-menuetto.ly fixes
+ - init/property.ly
+ - property settings for beam quantiseing and damping
+
+pl 38.jcn1
+ - provisionary multiple-beam fix
+
pl 38
- bf: \> \! \ff (crescendo overlap)
- misc feta-fixes, flageolet sign.
TOPLEVEL_MAJOR_VERSION = 0
TOPLEVEL_MINOR_VERSION = 1
TOPLEVEL_PATCH_LEVEL = 38
-TOPLEVEL_MY_PATCH_LEVEL = jcn1
+TOPLEVEL_MY_PATCH_LEVEL = jcn2
# use the above to send patches, always empty for released version:
# please don't move these comments up; the patch should fail if
% Creator: mf-to-table.py version 0.4
-% Automatically generated on Wed Dec 24 16:30:21 1997
+% Automatically generated on Mon Dec 29 10:52:00 1997
% Do not edit
% input from out/feta16.log
% name=\symboltables {
% Creator: mf-to-table.py version 0.4
-% Automatically generated on Wed Dec 24 16:30:29 1997
+% Automatically generated on Mon Dec 29 10:52:03 1997
% Do not edit
% input from out/feta20.log
% name=\symboltables {
\include "paper16.ly"
\include "paper20.ly"
-
default_paper = \paper{
\paper_sixteen
}
right = 1
up = 1
down = -1
+% zillie spellink?
center=0
-
-stemup = {
- \skip 1*0;
- % Stupid hack to make < { \stemup } > work
- \property Voice.ydirection = \up
- }
-stemboth= {
- \skip 1*0;
- \property Voice.ydirection = \center
-}
-stemdown = {
- \skip 1*0;
- \property Voice.ydirection = \down
-}
-
+\include "property.ly"
arithmetic_basicspace = 2.;
arithmetic_multiplier = 4.8\pt;
- %
- interbeam = 2.667\pt;
+ % three beams span two interlines, including stafflines:
+ % 2 interbeam + beam_thickness = 2 interline - staffline_thickness
+ % ( beam_thickness = 0.48 interline for now...)
+ % interbeam = interline - (beam_thickness + staffline_thickness) / 2
+ % interbeam = 2.84;
+ % ugh: interline *in fact* is rule_thickness + "interline"?
+ interbeam = 3.14;
gourlay_energybound = 100000.;
gourlay_maxmeasures = 14.;
arithmetic_multiplier = 6.\pt;
%
- interbeam = 3.333\pt;
+ % three beams span two interlines, including stafflines:
+ % 2 interbeam + beam_thickness = 2 interline - staffline_thickness
+ % ( beam_thickness = 0.48 interline for now...)
+ % interbeam = interline - (beam_thickness + staffline_thickness) / 2
+ % interbeam = 3.6;
+ % ugh: interline *in fact* is rule_thickness + "interline"?
+ interbeam = 3.9;
+
gourlay_energybound = 100000.;
gourlay_maxmeasures = 12.;
--- /dev/null
+% property.ly
+% list of properties that lily recognises
+% and some shorthands (ugh)
+
+%{
+
+PROPERTIES
+
+name value effect shorthand
+
+[Voice]
+ydirection -1 force stem down \stemdown
+ydirection 0 stem direction free \stemboth
+ydirection 1 force stem up \stemup
+
+[Score?]
+beamslopedamping 0 no damping \beamslopeproportional
+beamslopedamping 1 damping1) \beamslopedamped
+beamslopedamping 100000 zero slope \beamslopezero
+
+[Score?]
+beamquantisation 0 no quantisations \beamposfree
+beamquantisation 1 quantise pos and slope \beamposnormal
+beamquantisation 2 quantise avoide wedge2) \beampostraditional
+
+
+[Staff?]
+instrument ascii midi instrument table lookup
+
+
+1) after beam slope damping table suggested in [Wanske]
+2) [Wanske] as well as [Ross] suggests that beams sloped upward must not
+ start sitting on a staffline, and beams sloped downward must not hang
+ from a staffline (similar for beam-ends). This would create a wedge
+ that is traditionally being avoided because it could easily be filled-up
+ with ink.
+ However, avoiding these wedges restricts the freedom of beams quite a lot
+ while they don't seem to be a problem in modern printing.
+ In no piece of sheetmusic engraved after 1953 (Baerenreiter) i've seen
+ these wedges being avoided.
+
+%}
+
+%hmm, (these) abbrevs suck, imo
+% i guess they're meant as some form of doco
+% that's what i use them for...
+% should compile a list with recognised properties!
+stemup = {
+ \skip 1*0;
+ % Stupid hack to make < { \stemup } > work
+ \property Voice.ydirection = \up
+ }
+stemboth= {
+ \skip 1*0;
+ \property Voice.ydirection = \center
+}
+stemdown = {
+ \skip 1*0;
+ \property Voice.ydirection = \down
+}
+
+% ugh, cluttering global namespace...
+none=0
+free=0
+normal=1
+traditional=2
+infinity=10000
+
+beamslopeproportional = {
+ \property Score.beamslopedamping = \none
+}
+
+beamslopedamped = {
+ \property Score.beamslopedamping = \normal
+}
+
+beamslopezero = {
+ \property Score.beamslopedamping = \infinity
+}
+
+% this sucks, you'd want to pass an array, at least
+% (or embedded code: you still can't dictate the slope / stemlength)
+beamposfree = {
+ \property Score.beamquantisation = \none
+}
+
+beamposnormal = {
+ \property Score.beamquantisation = \normal
+}
+
+beampostraditional = {
+ \property Score.beamquantisation = \traditional
+}
+
\version "0.1.7";
\score{
- \melodic \multi 3 <
+ \melodic { \multi 3 <
{ \octave c';
\meter 8/4;
\duration8;
\stemup [c c'' a' f']
\duration128;
\stemup [c c'' a' f']
+ r32
\duration 8;
\stemup ['g 'g 'g 'g]
\stemup ['g 'g 'g 'g]
\duration 128;
\stemup ['g 'g 'g 'g]
+ r32
}
{ \octave c';
\stemdown [a' 'a c e]
\duration128;
\stemdown [a' 'a c e]
+ r32
\octave c;
\duration 8;
\stemdown [d'' d'' d'' d'']
\duration 128;
\stemdown [d'' d'' d'' d'']
+ r32
+ } >
+ {
+ % ugh, "duration mode"
+ \duration 8;
+ [g8 g] [a a] [b b] [c' c']
+ \duration 16;
+ [g16 g g g] [a a a a] [b b b b] [c' c' c' c']
+ \meter 4/4;
+ \duration 32;
+ [g32 g g g g g g g] [a a a a a a a a]
+ [b b b b b b b b] [c' c' c' c' c' c' c' c']
+ \duration 64;
+ \meter 2/4;
+ [g64 g g g g g g g g g g g g g g g]
+ [c' c' c' c' c' c' c' c' c' c' c' c' c' c' c' c']
}
- >}
+ }
+ \paper{
+ gourlay_maxmeasures = 1.;
+ }
+}
% % because piece is set very tightly
IImenuetto = \melodic{
+ \property Voice.beamslopedamping = \infinity
\clef"alto";
\property Staff.instrument = cello
\meter 3/4;
%%2
\textstyle "finger"; % ugh.
- < [ bes8^"1" e8 c8_"2"_"4" >
- a8 bes8-. g8-. ] a4-.^"4" |
+ < [ bes8^"1"( e8 c8_"2"_"4" >
+ )a8 bes8-. g8-. ] a4-.^"4" |
%%3
+ \property Voice.beamslopedamping = \normal
< d4 'bes4-. > g4-. [ f8-. e8-. ] |
+ \property Voice.beamslopedamping = \infinity
%%4
- < [ f8 'a > e8 d8 cis8-. 'b8-. 'a8-. ]
+ < [ f8( 'a > e8 )d8 cis8-. 'b8-. 'a8-. ]
%%5
< a2 f2 d2 > bes!4-. |
%%6
%%9
\clef "violin";
< e'2 a2 \f >
+ \property Voice.beamslopedamping = \normal
[ d'8( e'16 )f'16 ] |
+ \property Voice.beamslopedamping = \infinity
%%10
- < [ e'8 g8 > d' cis'_"2" e' a () g8 ] |
+ < [ e'8( g8 > d' cis'_"2" )e' a () g8 ] |
%%11
\multi 2 <
{\stemup a4() d'4 cis'4-. }
{ \stemdown f2 e4 } > |
\stemboth
%%12
- < [ g'8^"4" d8 > f' e' f' d'^"3"() c' ] |
+ % oeps: slur gets attached at d8 iso g'8!
+% < [ g'8^"4"( d8 > f' e' )f' d'^"3"() c' ] |
+ % wrong still...
+ < { [ g'8^"4"( f' e' )f' d'^"3"() c' ] } { [ d8 ] } > |
%%13
\clef "alto";
\multi 2 <
%%16
[ f( e8 )f a8-. g8-. bes8-. ] |
%%17
- < a2^"0" fis2_"3" > bes4 |
+ < a2^"0"^\trill fis2_"3" > bes4 |
%%18
- < { [ c'8 () bes8 c' a8 ] } es8 > fis4 |
+ < { [ c'8 () bes8 c' a8 ] } es8 > fis4^\trill |
%%19
< d'4-\downbow g4 'bes4 > < c'4-\upbow g4 c4 > < [ bes8 d8 > a8 ] |
%%20
%%22
< { [ g8 () f8 g8 e8 ] } cis8 > < f4 d4 > |
%%23
- [ 'g8 g8 ] < e4. 'a4. > d8-\upbow |
+ \property Voice.beamslopedamping = \normal
+ [ 'g8 g8 ] < e4.^\trill 'a4. > d8-\upbow |
+ \property Voice.beamslopedamping = \infinity
%%24
\textstyle "roman"; % ugh
< d2.^"fine" 'a2. 'd2._"3 mins.">
plet_spanner_p_->spec_p_ = defp;
announce_element (Score_elem_info(plet_spanner_p_,0));
}
+
+ Scalar prop = get_property ("beamslopedamping");
+ if (prop.isnum_b ())
+ {
+ beam_p_->damping_i_ = prop;
+ }
+
+ prop = get_property ("beamquantisaton");
+ if (prop.isnum_b ())
+ {
+ beam_p_->quantisation_ = (Beam::Quantise)(int)prop;
+ }
+
announce_element (Score_elem_info (beam_p_, span_reqs_drul_[LEFT]));
}
}
IMPLEMENT_IS_TYPE_B1 (Beam, Spanner);
+// ugh, hardcoded
const int MINIMUM_STEMLEN[6] = {
0, // just in case
5,
{
slope_f = 0;
left_y = 0.0;
+ damping_i_ = 1;
+ quantisation_ = NORMAL;
+ multiple_i_ = 0;
}
void
This neat trick is by Werner Lemberg, damped = tanh (slope_f) corresponds
with some tables in [Wanske]
*/
- slope_f = 0.6 * tanh (slope_f);
+ if (damping_i_)
+ slope_f = 0.6 * tanh (slope_f) / damping_i_;
quantise_yspan ();
- beam_thickness + staffline_thickness
+ n * interline
*/
+
+ if (!quantisation_)
+ return;
+
Real interline_f = paper ()->interline_f ();
Real internote_f = interline_f / 2;
Real staffline_thickness = paper ()->rule_thickness ();
if extend then stems must not get shorter
*/
+ if (!quantisation_)
+ return;
+
Real interline_f = paper ()->interline_f ();
Real internote_f = interline_f / 2;
Real staffline_thickness = paper ()->rule_thickness ();
const int QUANTS = 6;
Real qy[QUANTS] = {
- -staffline_thickness,
+ 0,
beam_thickness / 2,
- beam_thickness + staffline_thickness / 2,
+ beam_thickness,
interline_f / 2 + beam_thickness / 2 + staffline_thickness / 2,
- interline_f - staffline_thickness,
+ interline_f,
interline_f + beam_thickness / 2,
};
/*
Real staffline_thickness = paper ()->rule_thickness ();
Real beam_thickness = 0.48 * (interline_f - staffline_thickness);
Real interbeam_f = paper ()->interbeam_f ();
+ if (multiple_i_ > 3)
+ interbeam_f += 2.0 * staffline_thickness / 4;
Real xspan_f = stems.top ()->hpos_f () - stems[0]->hpos_f ();
/*
ugh, y values are in "internote" dimension
Pos left_pos = NONE;
- if (yspan_f < staffline_thickness / 2)
+ if ((yspan_f < staffline_thickness / 2) || (quantisation_ == NORMAL))
left_pos = (Pos)(STRADDLE | SIT | HANG);
else
left_pos = (Pos) (sign (slope_f) > 0 ? STRADDLE | HANG
Stem *s = stems[j];
s->beams_left_i_ = b[i];
s->beams_right_i_ = b[i+1];
+ multiple_i_ = multiple_i_ >? (b[i] >? b[i+1]);
}
}
{
assert (!next || next->hpos_f () > here->hpos_f ());
assert (!prev || prev->hpos_f () < here->hpos_f ());
- // Real dy=paper ()->internote_f ()*2;
- Real dy = paper ()->interbeam_f ();
- Real stemdx = paper ()->rule_thickness ();
+ Real staffline_thickness = paper ()->rule_thickness ();
+ Real interbeam_f = paper ()->interbeam_f ();
+ if (multiple_i_ > 3)
+ interbeam_f += 2.0 * staffline_thickness / 4;
+ Real dy = interbeam_f;
+ Real stemdx = staffline_thickness;
Real sl = slope_f*paper ()->internote_f ();
paper ()->lookup_l ()->beam (sl, 20 PT);
class Beam: public Directional_spanner {
public:
enum Pos { NONE, SIT = 1, STRADDLE = 2, HANG = 4, INTER = 8 };
+ // ugh, silly C++
+ enum Quantise { NUN, NORMAL, TRADITIONAL };
Link_array<Stem> stems;
/// the slope of the beam in posns / point (dimension)
/// position of leftmost end of beam
Real left_y;
-
+ /// should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams
+ int damping_i_;
+ /// should beam pos / slope be quantised? 0: no, 1: yes, 2: traditional
+ Quantise quantisation_;
+ /// maximum number of beams (for opening-up of beam-spacing)
+ int multiple_i_;
/* *************** */
DECLARE_MY_RUNTIME_TYPEINFO;
IMPORTANT
+ * if multiple channels per track: output each to separate voice
+
* get rid of (last few?) midi-specifics in mudela-*
* find / remove trend (tempo) of mudela columns
% Creator: mf-to-table.py version 0.4
-% Automatically generated on Wed Dec 24 16:30:21 1997
+% Automatically generated on Mon Dec 29 10:52:00 1997
% Do not edit
% input from out/feta16.log
% name
% Creator: mf-to-table.py version 0.4
-% Automatically generated on Wed Dec 24 16:30:29 1997
+% Automatically generated on Mon Dec 29 10:52:03 1997
% Do not edit
% input from out/feta20.log
% name