2020.06.13.02

main
Michael Winter 5 years ago
parent 0347890214
commit aa45faadb6

@ -1,4 +1,4 @@
\version "2.19.81"
\version "2.19.83"
\include "cicc_pseudoindents_def.ly"
@ -27,7 +27,6 @@
bottom-margin = 1 \cm
left-margin = 2.5 \cm
ragged-bottom = ##t
%page-breaking = #ly:minimal-breaking
top-system-spacing =
#'((basic-distance . 15 )
@ -48,12 +47,14 @@
(stretchability . 0))
systems-per-page = 5
first-page-number = 5
print-first-page-number = ##t
print-page-number = ##t
oddHeaderMarkup = \markup { \on-the-fly #not-first-page \italic {Counterfeiting in Colonial Connecticut} }
evenHeaderMarkup = \markup { \on-the-fly #not-first-page \italic {Counterfeiting in Colonial Connecticut} }
oddHeaderMarkup = \markup { \on-the-fly #not-first-page \italic {Counterfeiting in Colonial Connecticut} (seed: 20200525)}
evenHeaderMarkup = \markup { \on-the-fly #not-first-page \italic {Counterfeiting in Colonial Connecticut} (seed: 20200525)}
oddFooterMarkup = \markup { \fill-line {
\on-the-fly #not-first-page
%\on-the-fly #not-first-page
\concat {
"-"
\fontsize #1.5
@ -61,7 +62,7 @@
\fromproperty #'page:page-number-string
"-"}}}
evenFooterMarkup = \markup { \fill-line {
\on-the-fly #not-first-page
%\on-the-fly #not-first-page
\concat {
"-"
\fontsize #1.5
@ -72,8 +73,8 @@
\header {
title = \markup { \italic {Counterfeiting in Colonial Connecticut}}
%subtitle = \markup { \normal-text { from \italic{a history of the domino the problem}}}
composer = \markup \right-column {"michael winter" "(gatlinburg, tennessee; 2020)"}
piece = "seed: 20200525"
tagline = ""
}
@ -87,19 +88,10 @@
\context {
\Score
%\remove "Mark_engraver"
%\override BarNumber.extra-offset = #'(0 . 4)
\override BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print)
\override Stem.stemlet-length = #0.75
%\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/4)
%\override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/30)
proportionalNotationDuration = #(ly:make-moment 1/16)
%\override SpacingSpanner.strict-note-spacing = ##t
%\override SpacingSpanner.uniform-stretching = ##t
%\override TextSpanner.breakable = ##t
\remove "Separating_line_group_engraver"
%\override PaperColumn.used = ##t
%\override DynamicTextSpanner.style = #'none
}
\context {
\Staff
@ -110,14 +102,7 @@
(padding . 0 )
(stretchability . 0))
%\consists "Mark_engraver"
%\remove "Dot_column_engraver"
%\remove "Time_signature_engraver"
%\remove "Clef_engraver"
%\override StaffSymbol.line-count = #1
%\override NoteHead.no-ledgers = ##t
%\override RestCollision.positioning-done = #merge-rests-on-positioning
\override RehearsalMark.X-offset = #1
\override RehearsalMark.X-offset = #1
\override RehearsalMark.Y-offset = #4
\override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 16 )
@ -130,8 +115,6 @@
\override TimeSignature.X-offset =
#ly:self-alignment-interface::x-aligned-on-self
\override TimeSignature.self-alignment-X = #LEFT
%\override TimeSignature.after-line-breaking =
% #shift-right-at-line-begin
\override TimeSignature.Y-offset = #9
\override TimeSignature.extra-offset = #'(2 . 0)
}
@ -176,7 +159,6 @@
}
<<
\include "includes/cicc_guitar.ly"
% { s1 | s1 | s1 | s1 | \break \pseudoIndents 0 44 s1 | s1 | s1 | s1 | }
>>
\new Staff \with {

@ -0,0 +1,133 @@
%%%%%%%% HEADER %%%%%%%%
%
% this code was prompted by
% https://lists.gnu.org/archive/html/lilypond-user/2019-07/msg00139.html
% and offers a pseudoIndent hack suitable for general use
% keywords:
% indent short-indent indentation system line
% mid-score temporarily arbitrary individual single just only once
% coda margin
% mouse's tale acrostic mesostic spine
%%%%%%%% PSEUDOINDENT FUNCTIONS %%%%%%%%
% these two functions are for indenting individual systems
% - to left-indent a system, apply \pseudoIndent before the music continues
% - \pseudoIndents is similar, but lets you also indent on the right
% - both provide an option for changing that system's instrument names
% N.B. these functions
% - assume application to non-ragged lines (generally the default)
% - include a manual \break to ensure application at line start
% - misbehave if called more than once at the same line start
% the parameters of the (full) pseudoIndents function are:
% 1: name-tweaks
% usually omitted; accepts replacement \markup for instrument names
% as an ordered list; starred elements leave their i-names unchanged.
% 2: left-indent
% additional left-indentation, in staff-space units; can be negative,
% but avoid a total indentation which implies (unsupported) stretching.
% 3: right-indent
% amount of right-indentation, in staff-space units; can be negative.
% - not offered by the (reduced) pseudoIndent function
pseudoIndents = % inline alternative to a new \score, also with right-indent
#(define-music-function (parser location name-tweaks left-indent right-indent)
((markup-list? '()) number? number?)
(define (warn-stretched p1 p2) (ly:input-warning location (_
" pseudoIndents ~s ~s is stretching staff; expect distorted layout") p1 p2))
(let* (
(narrowing (+ left-indent right-indent)) ; of staff implied by args
(set-staffsymbol! (lambda (staffsymbol-grob) ; change staff to new width
(let* (
(left-bound (ly:spanner-bound staffsymbol-grob LEFT))
(left-moment (ly:grob-property left-bound 'when))
(capo? (moment<=? left-moment ZERO-MOMENT)) ; in first system of score
(layout (ly:grob-layout staffsymbol-grob))
(lw (ly:output-def-lookup layout 'line-width)) ; debugging info
(indent (ly:output-def-lookup layout (if capo? 'indent 'short-indent)))
(old-stil (ly:staff-symbol::print staffsymbol-grob))
(staffsymbol-x-ext (ly:stencil-extent old-stil X))
;; >=2.19.16's first system has old-stil already narrowed [2]
;; compensate for this (ie being not pristine) when calculating
;; - old leftmost-x (its value is needed when setting so-called 'width)
;; - the new width and position (via local variable narrowing_)
(ss-t (ly:staff-symbol-line-thickness staffsymbol-grob))
(pristine? (<= 0 (car staffsymbol-x-ext) ss-t)) ; would expect half
(leftmost-x (+ indent (if pristine? 0 narrowing)))
(narrowing_ (if pristine? narrowing 0)) ; uses 0 if already narrowed
(old-width (+ (interval-length staffsymbol-x-ext) ss-t))
(new-width (- old-width narrowing_))
(new-rightmost-x (+ leftmost-x new-width)) ; and set! this immediately
(junk (ly:grob-set-property! staffsymbol-grob 'width new-rightmost-x))
(in-situ-stil (ly:staff-symbol::print staffsymbol-grob))
(new-stil (ly:stencil-translate-axis in-situ-stil narrowing_ X))
;(new-stil (stencil-with-color new-stil red)) ; for when debugging
(new-x-ext (ly:stencil-extent new-stil X)))
(ly:grob-set-property! staffsymbol-grob 'stencil new-stil)
(ly:grob-set-property! staffsymbol-grob 'X-extent new-x-ext)
)))
(set-X-offset! (lambda (margin-grob) ; move grob across to line start
(let* (
(old (ly:grob-property-data margin-grob 'X-offset))
(new (lambda (grob) (+ (if (procedure? old) (old grob) old) narrowing))))
(ly:grob-set-property! margin-grob 'X-offset new))))
(tweak-text! (lambda (i-name-grob mkup) ; tweak both instrumentname texts
(if (and (markup? mkup) (not (string=? (markup->string mkup) "*")))
(begin
(ly:grob-set-property! i-name-grob 'long-text mkup)
(ly:grob-set-property! i-name-grob 'text mkup)
)))) ; else retain existing text
(install-narrowing (lambda (leftedge-grob) ; on staves, + adapt left margin
(define (grob-name x) (assq-ref (ly:grob-property x 'meta) 'name))
(let* (
(sys (ly:grob-system leftedge-grob))
(all-grobs (ly:grob-array->list (ly:grob-object sys 'all-elements)))
(grobs-named (lambda (name)
(filter (lambda (x) (eq? name (grob-name x))) all-grobs)))
(first-leftedge-grob (list-ref (grobs-named 'LeftEdge) 0))
(relsys-x-of (lambda (g) (ly:grob-relative-coordinate g sys X)))
(leftedge-x (relsys-x-of first-leftedge-grob))
(leftedged? (lambda (g) (= (relsys-x-of g) leftedge-x)))
(leftedged-ss (filter leftedged? (grobs-named 'StaffSymbol))))
(if (eq? leftedge-grob first-leftedge-grob) ; ignore other leftedges [1]
(begin
(for-each set-staffsymbol! leftedged-ss)
(for-each set-X-offset! (grobs-named 'SystemStartBar))
(for-each set-X-offset! (grobs-named 'InstrumentName))
(for-each tweak-text! (grobs-named 'InstrumentName) name-tweaks)
))))))
(if (negative? narrowing) (warn-stretched left-indent right-indent))
#{ % and continue anyway
% ensure that these overrides are applied only at begin-of-line
\break % (but this does not exclude unsupported multiple application)
% give the spacing engine notice regarding the loss of width for music
\once \override Score.LeftEdge.X-extent = #(cons narrowing narrowing)
% discard line start region of staff and reassemble left-margin elements
\once \override Score.LeftEdge.after-line-breaking = #install-narrowing
% shift the system to partition the narrowing between left and right
\overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
.X-offset #(- right-indent)
% prevent a leftmost barnumber entering a stretched staff
\once \override Score.BarNumber.horizon-padding = #(max 1 (- 1 narrowing))
#}))
pseudoIndent = % for changing just left-indent
#(define-music-function (parser location name-tweaks left-indent)
((markup-list? '()) number?)
#{
\pseudoIndents $name-tweaks $left-indent 0
#})
% [1] versions <2.19.1 can have end-of-line leftedges too
% - these were eliminated in issue 3761
% [2] versions >=2.19.16: the first system behaves differently from the rest
% - a side effect of issue 660 ?

@ -0,0 +1,179 @@
\version "2.19.83"
\include "cicc_pseudoindents_def.ly"
#(define factor 2)
#(define (enlarged-extent-laissez-vibrer::print grob)
(let* ((stil (laissez-vibrer::print grob))
(stil-ext (ly:stencil-extent stil X))
(stil-length (interval-length stil-ext))
(new-stil-length (* stil-length factor))
(scale-factor (/ new-stil-length stil-length))
(new-stil (ly:stencil-scale stil scale-factor 1))
(new-stil-ext (ly:stencil-extent new-stil X))
(x-corr (- (car stil-ext) (car new-stil-ext))))
(ly:stencil-translate-axis
new-stil
x-corr
X)))
#(assoc-set! (assoc-ref all-grob-descriptions 'LaissezVibrerTie)
'stencil enlarged-extent-laissez-vibrer::print)
\paper {
#(set-paper-size "a4" 'portrait)
top-margin = 1 \cm
bottom-margin = 1 \cm
left-margin = 2.5 \cm
ragged-bottom = ##t
top-system-spacing =
#'((basic-distance . 15 )
(minimum-distance . 15 )
(padding . 0 )
(stretchability . 0))
system-system-spacing =
#'((basic-distance . 30 )
(minimum-distance . 30 )
(padding . 0 )
(stretchability . 0))
last-bottom-spacing =
#'((basic-distance . 15 )
(minimum-distance . 15 )
(padding . 0 )
(stretchability . 0))
systems-per-page = 5
first-page-number = 5
print-first-page-number = ##t
print-page-number = ##t
oddHeaderMarkup = \markup { \on-the-fly #not-first-page \italic {Counterfeiting in Colonial Connecticut} (seed: xxx)}
evenHeaderMarkup = \markup { \on-the-fly #not-first-page \italic {Counterfeiting in Colonial Connecticut} (seed: xxx)}
oddFooterMarkup = \markup { \fill-line {
%\on-the-fly #not-first-page
\concat {
"-"
\fontsize #1.5
\on-the-fly #print-page-number-check-first
\fromproperty #'page:page-number-string
"-"}}}
evenFooterMarkup = \markup { \fill-line {
%\on-the-fly #not-first-page
\concat {
"-"
\fontsize #1.5
\on-the-fly #print-page-number-check-first
\fromproperty #'page:page-number-string
"-"}}}
}
\header {
title = \markup { \italic {Counterfeiting in Colonial Connecticut}}
composer = \markup \right-column {"michael winter" "(gatlinburg, tennessee; 2020)"}
piece = "seed: xxx"
tagline = ""
}
#(set-global-staff-size 11)
\layout {
indent = 0.0\cm
line-width = 17\cm
ragged-last = ##f
ragged-right = ##f
\context {
\Score
\override BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print)
\override Stem.stemlet-length = #0.75
proportionalNotationDuration = #(ly:make-moment 1/16)
\remove "Separating_line_group_engraver"
}
\context {
\Staff
\override VerticalAxisGroup.staff-staff-spacing =
#'((basic-distance . 13 )
(minimum-distance . 13 )
(padding . 0 )
(stretchability . 0))
\override RehearsalMark.X-offset = #1
\override RehearsalMark.Y-offset = #4
\override VerticalAxisGroup.default-staff-staff-spacing =
#'((basic-distance . 16 )
(minimum-distance . 16 )
(padding . 0 )
(stretchability . 0))
\override TimeSignature.font-size = #2
\override TimeSignature.break-align-symbol = #'clef
\override TimeSignature.X-offset =
#ly:self-alignment-interface::x-aligned-on-self
\override TimeSignature.self-alignment-X = #LEFT
\override TimeSignature.Y-offset = #9
\override TimeSignature.extra-offset = #'(2 . 0)
}
\context {
\StaffGroup
\name "SemiStaffGroup"
\consists "Span_bar_engraver"
\override SpanBar.stencil =
#(lambda (grob)
(if (string=? (ly:grob-property grob 'glyph-name) "|")
(set! (ly:grob-property grob 'glyph-name) ""))
(ly:span-bar::print grob))
}
\context {
\Score
\accepts SemiStaffGroup
}
}
\midi { }
%showLastLength = R1*128
\score{
\new Score
<<
\new SemiStaffGroup {
<<
\new Staff \with {
instrumentName = "high"
shortInstrumentName = "high"
midiInstrument = #"clarinet"
}
<<
\include "includes/cicc_high.ly"
>>
\new Staff \with {
instrumentName = "guitar"
shortInstrumentName = "guitar"
midiInstrument = #"electric guitar (jazz)"
}
<<
\include "includes/cicc_guitar.ly"
>>
\new Staff \with {
instrumentName = "low"
shortInstrumentName = "low"
midiInstrument = #"contrabass"
}
<<
\include "includes/cicc_low.ly"
>>
>>
}
>>
\layout{}
\midi{}
}

@ -1,8 +1,8 @@
(
//~~FUNCTION THAT GENERATES THE GUI
~generateGUI = {
var win, clockStringFunc, metronomeStringFunc, metronomeColorFunc, masterView, faderView, tabs;
var tabButtonReset, transportButton, mixerButton, startPos = 0;
var win, clockStringFunc, metronomeStringFunc, metronomeColorFunc, masterView, faderView, helpView, tabs;
var tabButtonReset, transportButton, mixerButton, helpButton, startPos = 0;
var partAbbr = ["guitar", "accompHigh", "accompLowLower", "accompLowUpper", "interlude"];
var trackNames = ["guitar", "high", "low 1", "low 2", "interlude"];
var partVols, partMutes, partPans;
@ -28,7 +28,7 @@
metronomeStringFunc = { arg beat; if(beat == 1, {[-30, -105, -104].asAscii}, {[-30, -105, -113].asAscii}) };
metronomeColorFunc = { arg beat; if(beat == 1, {Color.red},{Color.black}) };
win = Window("Counterfeiting in Colonial Connecticut", Rect(500, 500, 1100, 500), false).front;
win = Window("Counterfeiting in Colonial Connecticut", Rect(500, 500, 1100, 520), false).front;
masterView = {
var updateTransport, updateSection,
view, generator, transport, ranSeed, order, tempo, sectionDisplay, clock, metronome;
@ -111,7 +111,7 @@
Button(view).states_([["reset seed"]]).action_({ ranSeed.string = "20200525"}.inEnvir),
Button(view).states_([["random seed"]]).action_({ ranSeed.string = 50000000.rand.asString}.inEnvir),
Button(view).states_([["generate"]]).action_({~genAll.value(ranSeed.string.asInteger)}.inEnvir),
Button(view).states_([["transcribe"]]).action_({~transcribe.value(~scoreData)}.inEnvir),
Button(view).states_([["transcribe"]]).action_({~transcribe.value(~scoreData, ranSeed.value)}.inEnvir),
[StaticText(view).string_(" "), stretch: 1], nil);
transport = HLayout(
Button(view).states_([["<<", Color.black]]).action_({arg pState; updateSection.value(-4)}.inEnvir),
@ -229,13 +229,24 @@
nil)
} ! 5;
view.layout_(HLayout(master, nil, *tracks))};
tabButtonReset = {transportButton.value = 1; mixerButton.value = 1; };
helpView = {
StaticText(win).string_(File.readAllString(~dir +/+ "cicc_readme.scd"));//.font_(Font("Monaco", 200)),
};
tabButtonReset = {transportButton.value = 1; mixerButton.value = 1; helpButton.value = 1};
win.layout = VLayout(
HLayout(
transportButton = Button().states_([["transport", Color.white, Color.grey], ["transport", Color.black]]).action_(
{tabButtonReset.value; transportButton.value = 0; tabs.index = 0 }.inEnvir).value_(0),
mixerButton = Button().states_([["mixer", Color.white, Color.grey], ["mixer", Color.black]]).action_(
{tabButtonReset.value; mixerButton.value = 0; tabs.index = 1 }.inEnvir).value_(1)),
tabs = StackLayout(masterView.value, faderView.value));
HLayout(
[
transportButton = Button().states_([["transport", Color.white, Color.grey], ["transport", Color.black]]).action_(
{tabButtonReset.value; transportButton.value = 0; tabs.index = 0 }.inEnvir).value_(0), stretch: 1
], [
mixerButton = Button().states_([["mixer", Color.white, Color.grey], ["mixer", Color.black]]).action_(
{tabButtonReset.value; mixerButton.value = 0; tabs.index = 1 }.inEnvir).value_(1), stretch: 1
]
),
helpButton = Button().states_([["help", Color.white, Color.grey], ["help", Color.black]]).action_(
{tabButtonReset.value; helpButton.value = 0; tabs.index = 2 }.inEnvir).value_(1)
),
tabs = StackLayout(masterView.value, faderView.value, helpView.value));
};
)

@ -0,0 +1,24 @@
/*
~~~~execute
Excecute cicc_main.scd to run.
~~~~transport tab
The play button will always start from the beginning of the current section.
The transport buttons allow you to advance by subsection (<,>) and section (<<,>>).
Tempo change will only go into effect once "set tempo" button is pressed
Turning the "auto advance" button on will automatically move from one subsection to the other.
Turning the "interludes" button on will automatically fade in the interlude synth at the start of the ultimate subsection of each section. This will turn of automatic advance between the ultimate subsection of a section and and the first subsection of the following section. That is, the performer will have manually advance after the last subsection of each section. The interlude synth will automatically fade out once a new section has been triggered.
Set order takes comma and dash delimited values; e.g.: "1, 2, 3, 4 - 10" will play from section 1 to section 10 and "5 - 10, 1, 2, 3" will play from section 5 to section 10 and then from section 1 to section 3. This will only go into effect once the "set order" button is pressed.
The default seed given in the application and reseeded when the "reset seed" button is pressed will generate the default music and score (as provided). Changing the seed will generate a new version with that seed once the "generate" button is pressed. After the new version is generated, new Lilypond files can be generated by pressing the "transcribe" button. This will create a cicc_score.ly file in a folder labeled "seed_[number]" which can be rendered by Lilypond. Note that the file must be rendered from that location as it dependes in files in that folder and the "includes" subfolder.
~~~~mixer tab
This allow invidual control of each of the sonic elements. The synthesized guitar part is automatically muted is at should only be used for audition and practice. The low accompaniment has two separate tracks in case a performer cannot play both the notes.
*/

@ -1,12 +1,22 @@
(
~transcribe = {arg scoreData;
var rawMusicData, timeSigData, sectionData, dir, basePath, maxSize, lineBreakString, openStrings, musicData;
~transcribe = {arg scoreData, seed;
var rawMusicData, timeSigData, sectionData, dir, basePath, scoreFile, maxSize, lineBreakString, openStrings, musicData;
rawMusicData = scoreData[0];
timeSigData = scoreData[1];
sectionData = scoreData[2];
basePath = ~dir +/+ ".." +/+ "lilypond";
basePath = ~dir +/+ ".." +/+ "lilypond" +/+ "seed_" ++ seed;
basePath.mkdir;
scoreFile = File(basePath +/+ "cicc_score.ly".standardizePath,"w");
//File.readAllString(basePath +/+ ".." +/+ "templates" +/+ "cicc_score_template.ly").postln;
scoreFile.write(File.readAllString(basePath +/+ ".." +/+ "templates" +/+ "cicc_score_template.ly").replace("seed: xxx", "seed: " ++ seed));
scoreFile.close;
scoreFile = File(basePath +/+ "cicc_pseudoindents_def.ly".standardizePath,"w");
scoreFile.write(File.readAllString(basePath +/+ ".." +/+ "templates" +/+ "cicc_pseudoindents_def.ly"));
scoreFile.close;
openStrings = [1/1, 3/2, 2/1, 5/2, 35/12, 7/2];
maxSize = 0;

Loading…
Cancel
Save