adding all updates (score, utilities, everything) as of 2023-11-25
@ -0,0 +1,42 @@
|
||||
\relax
|
||||
\catcode 95\active
|
||||
\providecommand\hyper@newdestlabel[2]{}
|
||||
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
|
||||
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
|
||||
\global\let\oldnewlabel\newlabel
|
||||
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
|
||||
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
|
||||
\AtEndDocument{\ifx\hyper@anchor\@undefined
|
||||
\let\newlabel\oldnewlabel
|
||||
\fi}
|
||||
\fi}
|
||||
\global\let\hyper@last\relax
|
||||
\gdef\HyperFirstAtBeginDocument#1{#1}
|
||||
\providecommand\HyField@AuxAddToFields[1]{}
|
||||
\providecommand\HyField@AuxAddToCoFields[2]{}
|
||||
\@writefile{toc}{\setcounter {tocdepth}{0}}
|
||||
\@writefile{toc}{\setcounter {tocdepth}{2}}
|
||||
\@writefile{toc}{\contentsline {section}{Description / note}{1}{section*.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{Installation and performance setting}{2}{section*.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{Photomask alignment}{3}{section*.3}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{Computer code repository and documentation}{4}{section*.4}\protected@file@percent }
|
||||
\citation{*}
|
||||
\bibstyle{unsrt}
|
||||
\bibdata{hdp}
|
||||
\@writefile{toc}{\contentsline {section}{Appendix}{5}{section*.5}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{Tiling images}{6}{section*.6}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{Original Scores}{11}{section*.7}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{berger}{11}{section*.8}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{robinson}{28}{section*.9}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{penrose}{53}{section*.10}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{ammann}{84}{section*.11}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{kari}{120}{section*.12}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{jaendel}{136}{section*.13}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{Scores adapted for premiere with Kali Ensemble}{242}{section*.14}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{berger}{242}{section*.15}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{robinson}{249}{section*.16}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{penrose}{268}{section*.17}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{ammann}{304}{section*.18}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{kari}{314}{section*.19}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{jaendel}{335}{section*.20}\protected@file@percent }
|
||||
\gdef \@abspage@last{335}
|
@ -0,0 +1,20 @@
|
||||
\BOOKMARK [1][-]{section*.1}{\376\377\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n\000\040\000/\000\040\000n\000o\000t\000e}{}% 1
|
||||
\BOOKMARK [1][-]{section*.2}{\376\377\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000p\000e\000r\000f\000o\000r\000m\000a\000n\000c\000e\000\040\000s\000e\000t\000t\000i\000n\000g}{}% 2
|
||||
\BOOKMARK [1][-]{section*.3}{\376\377\000P\000h\000o\000t\000o\000m\000a\000s\000k\000\040\000a\000l\000i\000g\000n\000m\000e\000n\000t}{}% 3
|
||||
\BOOKMARK [1][-]{section*.4}{\376\377\000C\000o\000m\000p\000u\000t\000e\000r\000\040\000c\000o\000d\000e\000\040\000r\000e\000p\000o\000s\000i\000t\000o\000r\000y\000\040\000a\000n\000d\000\040\000d\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{}% 4
|
||||
\BOOKMARK [1][-]{section*.5}{\376\377\000A\000p\000p\000e\000n\000d\000i\000x}{}% 5
|
||||
\BOOKMARK [1][-]{section*.6}{\376\377\000T\000i\000l\000i\000n\000g\000\040\000i\000m\000a\000g\000e\000s}{}% 6
|
||||
\BOOKMARK [1][-]{section*.7}{\376\377\000O\000r\000i\000g\000i\000n\000a\000l\000\040\000S\000c\000o\000r\000e\000s}{}% 7
|
||||
\BOOKMARK [2][-]{section*.8}{\376\377\000b\000e\000r\000g\000e\000r}{section*.7}% 8
|
||||
\BOOKMARK [2][-]{section*.9}{\376\377\000r\000o\000b\000i\000n\000s\000o\000n}{section*.7}% 9
|
||||
\BOOKMARK [2][-]{section*.10}{\376\377\000p\000e\000n\000r\000o\000s\000e}{section*.7}% 10
|
||||
\BOOKMARK [2][-]{section*.11}{\376\377\000a\000m\000m\000a\000n\000n}{section*.7}% 11
|
||||
\BOOKMARK [2][-]{section*.12}{\376\377\000k\000a\000r\000i}{section*.7}% 12
|
||||
\BOOKMARK [2][-]{section*.13}{\376\377\000j\000a\000e\000n\000d\000e\000l}{section*.7}% 13
|
||||
\BOOKMARK [1][-]{section*.14}{\376\377\000S\000c\000o\000r\000e\000s\000\040\000a\000d\000a\000p\000t\000e\000d\000\040\000f\000o\000r\000\040\000p\000r\000e\000m\000i\000e\000r\000e\000\040\000w\000i\000t\000h\000\040\000K\000a\000l\000i\000\040\000E\000n\000s\000e\000m\000b\000l\000e}{}% 14
|
||||
\BOOKMARK [2][-]{section*.15}{\376\377\000b\000e\000r\000g\000e\000r}{section*.14}% 15
|
||||
\BOOKMARK [2][-]{section*.16}{\376\377\000r\000o\000b\000i\000n\000s\000o\000n}{section*.14}% 16
|
||||
\BOOKMARK [2][-]{section*.17}{\376\377\000p\000e\000n\000r\000o\000s\000e}{section*.14}% 17
|
||||
\BOOKMARK [2][-]{section*.18}{\376\377\000a\000m\000m\000a\000n\000n}{section*.14}% 18
|
||||
\BOOKMARK [2][-]{section*.19}{\376\377\000k\000a\000r\000i}{section*.14}% 19
|
||||
\BOOKMARK [2][-]{section*.20}{\376\377\000j\000a\000e\000n\000d\000e\000l}{section*.14}% 20
|
@ -0,0 +1,387 @@
|
||||
\documentclass[10pt]{letter}
|
||||
|
||||
\usepackage[a4paper, top=0.7in, bottom=0.7in, left=0.7in, right=0.7in]{geometry}
|
||||
\usepackage{mathtools}
|
||||
\usepackage{wasysym}
|
||||
\usepackage{multicol}
|
||||
\usepackage{dirtree}
|
||||
\usepackage{underscore}
|
||||
\usepackage{pdfpages}
|
||||
\usepackage[framed,numbered]{sclang-prettifier}
|
||||
\usepackage{listings}
|
||||
\usepackage[obeyspaces]{url}
|
||||
\usepackage{datetime2}
|
||||
%\usepackage{draftwatermark}
|
||||
\renewcommand{\arraystretch}{1.3}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{hyperref}
|
||||
|
||||
\DTMsetdatestyle{default}
|
||||
\DTMsetup{datesep={.}}
|
||||
|
||||
%\SetWatermarkColor[rgb]{1, 0.6, 0.6}
|
||||
%\SetWatermarkScale{2}
|
||||
%\SetWatermarkHorCenter{1.25in}
|
||||
%\SetWatermarkVerCenter{1.25in}
|
||||
|
||||
% Define Language
|
||||
\lstdefinelanguage{Lilypond}
|
||||
{
|
||||
% list of keywords
|
||||
morekeywords={
|
||||
}
|
||||
}
|
||||
|
||||
% Set Language
|
||||
\lstset{
|
||||
numbers=left,
|
||||
numberstyle=\small,
|
||||
numberstyle = \color{black!33},
|
||||
numbersep=8pt,
|
||||
frame = single,
|
||||
language={Lilypond},
|
||||
}
|
||||
|
||||
\newenvironment{note}{
|
||||
\vspace{-3mm}
|
||||
\small
|
||||
\par
|
||||
\leftskip=4em\rightskip=5em
|
||||
\noindent\ignorespaces}{\par\smallskip}
|
||||
|
||||
\makeatletter
|
||||
\newenvironment{thebibliography}[1]
|
||||
{\list{\@biblabel{\@arabic\c@enumiv}}%
|
||||
{\settowidth\labelwidth{\@biblabel{#1}}%
|
||||
\leftmargin\labelwidth
|
||||
\advance\leftmargin\labelsep
|
||||
\usecounter{enumiv}%
|
||||
\let\p@enumiv\@empty
|
||||
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
|
||||
\sloppy
|
||||
\clubpenalty4000
|
||||
\@clubpenalty \clubpenalty
|
||||
\widowpenalty4000%
|
||||
\sfcode`\.\@m}
|
||||
{\def\@noitemerr
|
||||
{\@latex@warning{Empty `thebibliography' environment}}%
|
||||
\endlist}
|
||||
\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}
|
||||
|
||||
\setlength\columnsep{50pt}
|
||||
\setcounter{tocdepth}{1}
|
||||
\newcommand\@pnumwidth{1.5em}
|
||||
\newcommand\contentsname{Contents}
|
||||
\newcommand\tableofcontents{%
|
||||
\addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
|
||||
\hskip 20pt \textbf{\contentsname}
|
||||
|
||||
\addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
|
||||
\@starttoc{toc}%
|
||||
}
|
||||
\newcommand*\l@section[2]{%
|
||||
\ifnum \c@tocdepth >\z@
|
||||
\addpenalty\@secpenalty
|
||||
\addvspace{0.25em \@plus\p@}%
|
||||
\setlength\@tempdima{1.0em}%
|
||||
\begingroup
|
||||
\parindent \z@ \rightskip \@pnumwidth
|
||||
\parfillskip + 100pt
|
||||
\leavevmode
|
||||
\advance\leftskip\@tempdima
|
||||
\hskip -\leftskip
|
||||
\hskip 30pt #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss\itshape #2}\par
|
||||
\endgroup
|
||||
\fi}
|
||||
|
||||
\newcommand*\l@subsection[2]{%
|
||||
\ifnum \c@tocdepth >\z@
|
||||
\addpenalty\@secpenalty
|
||||
\addvspace{0.25em \@plus\p@}%
|
||||
\setlength\@tempdima{1.0em}%
|
||||
\begingroup
|
||||
\parindent \z@ \rightskip \@pnumwidth
|
||||
\parfillskip + 100pt
|
||||
\leavevmode
|
||||
\advance\leftskip\@tempdima
|
||||
\hskip -\leftskip
|
||||
\hskip 50pt #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss\itshape #2}\par
|
||||
\endgroup
|
||||
\fi}
|
||||
|
||||
\NewDocumentCommand{\mysubsection}{sm}{%
|
||||
\par\addvspace{1ex}%
|
||||
\phantomsection{}% reset the anchor for hyperrefs
|
||||
%\addcontentsline{toc}{subsection}{#2}%
|
||||
{\strut\raggedleft\raisebox{\baseletterheight}{\color{color1}\rule{0.5\hintscolumnwidth}{0.95ex}}\quad}{\strut\subsectionstyle{#2}}%
|
||||
\par\nobreak\addvspace{.5ex}\@afterheading}% to avoid a pagebreak after the heading
|
||||
|
||||
\NewDocumentCommand{\mysubsectiontoc}{sm}{%
|
||||
\par\addvspace{1ex}%
|
||||
\phantomsection{}% reset the anchor for hyperrefs
|
||||
\addcontentsline{toc}{subsection}{#2}%
|
||||
{\strut\raggedleft\raisebox{\baseletterheight}{\color{color1}\rule{0.5\hintscolumnwidth}{0.95ex}}\quad}{\strut\subsectionstyle{#2}}%
|
||||
\par\nobreak\addvspace{.5ex}\@afterheading}% to avoid a pagebreak after the heading
|
||||
|
||||
|
||||
\makeatother
|
||||
|
||||
\begin{document}
|
||||
|
||||
\textit{\textbf{a history of the domino problem}} \\
|
||||
a performance-installation
|
||||
|
||||
\begin{flushright}
|
||||
michael winter \\ schloss solitude and cdmx; 2018 - 2019 \\
|
||||
\end{flushright}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{cc}
|
||||
|
||||
\centering
|
||||
\includegraphics[width=0.49\linewidth]{selects/maquina.jpg}
|
||||
|
||||
\centering
|
||||
\includegraphics[width=0.49\linewidth]{selects/discos.jpg}
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\bigskip
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\phantomsection\addcontentsline{toc}{section}{Description / note}
|
||||
\textbf{Description / note}
|
||||
|
||||
\textit{a history of the domino problem} is a performance-installation that traces the history of an epistemological problem in mathematics about how things that one could never imagine fitting together, actually come together and unify in unexpected ways. The work comprises a set of musical compositions and a kinetic sculpture that sonify and visualize rare tilings (or mosaics) constructed from dominoes. The dominoes in these tilings are similar yet slightly different than those used in the popular game of the same name. As opposed to rectangles, they are squares with various color combinations along the edges (which can alternatively also be represented by numbers or patterns).\footnote{\url{https://en.wikipedia.org/wiki/Wang_tile}} Like in the game, the rule is that edges of adjacent dominoes in a tiling must match.
|
||||
|
||||
The tilings sonified and visualized in \textit{a history of the domino problem} are rare because there is no systematic way to find them. This is due to the fact that they are \textit{aperiodic}.\footnote{\url{https://en.wikipedia.org/wiki/Aperiodic_tiling}} One can think of an aperiodic tiling like an infinite puzzle with a peculiar characteristic. Given unlimited copies of dominoes with a finite set of color/pattern combinations for the edges, there is a solution that will result in a tiling that expands infinitely. However, in that solution, any periodic/repeating structure in the tiling will eventually be interrupted. This phenomenon is one of the most intriguing aspects of the work. As the music and the visuals are derived from the tilings, the resulting textures are always shifting ever so slightly.
|
||||
|
||||
The Domino Problem and its corresponding history are somewhat vexing and difficult to describe. The original problem asked if there exists an algorithm/computer program that, when given as input a finite set of dominoes with varying color combinations for the edges, can output a binary answer, `yes' or `no', whether or not copies of that set can form an infinite tiling. The reason why the Domino Problem is inextricably linked to whether or not aperiodic tilings exist is the following. The existence of aperiodic tilings would mean that such an algorithm \textit{does not} exist. The problem was first posed by Hao Wang in 1961. He actually conjectured that aperiodic tilings do not exist. However, in 1964, his student, Robert Berger, proved him wrong by discovering an infinite, aperiodic tiling constructed with copies of a set of 20,426 dominoes. With the original problem solved, mathematicians then took on the challenge of finding the smallest set of dominoes that would construct an infinite aperiodic tiling. Over the past 60 years, this number has been continually reduced until the most recent discovery of a set of 11 dominoes along with a proof that no smaller sets exist. It is a remarkable narrative/history of a particular epistemological problem that challenged a group of people not only to solve it, but to understand it to the extent possible.
|
||||
|
||||
The music was composed by writing computer programs that generate and scan the tilings such that musical material and information is correlated with the dominoes. Shifting structures in the tilings are reflected by similarly shifting textures in the music. The musical compositions can act as an accompaniment to the visual component by being performed as interventions within the installation or as singular pieces in concert. The visual component of the piece consists of a kinetic sculpture that displays the tilings using visual cryptography.\footnote{\url{https://en.wikipedia.org/wiki/Visual_cryptography}} In visual cryptography, a message is encrypted by dividing the information of the message into two `shadow' images, each which look completely random independently. The message is decrypted and revealed when the shadow images are combined/overlayed in a precise orientation. The use of visual cryptography to reveal the tilings is yet another reflection of the general motivation of the piece: exploring `how things fit together in unexpected ways'. In \textit{a history of the domino problem}, the message \textit{is} the tilings. The shadow images are printed on photomasks, which are essentially high-resolution transparencies: quartz wafers with a chrome coating etched at a pixel size ranging from nano- to micrometers. I used photomasks for two reasons. One: the Domino Problem is about the limits of computation. What computers can and cannot do. Displaying the tilings using photomasks, which are typically implemented to manufacture computer chips, reflects the concept of the piece through its medium. Two: though the wafers are actually small in size, because they are printed at such high resolution, large portions of the tilings can be displayed. In other words: to go big, sometimes you have to go small. The kinetic sculpture uses a high-precision, motorized multiaxis stage to align the finely printed shadow images and reveal the tilings (along with 3 other images of poetic texts inspired by the history of the Domino Problem). The whole apparatus rests on a light source that illuminates the photomasks, which are then magnified and projected.
|
||||
|
||||
\bigskip
|
||||
|
||||
\phantomsection\addcontentsline{toc}{section}{Installation and performance setting}
|
||||
\textbf{Installation and performance setting}
|
||||
|
||||
As an installation, the apparatus that aligns the image should be centered in a dark room such that observers can view the photomasks up close. Ideally, this should be set up with a teleprompter mirror at a 45 degree angle above the apparatus so that the viewer can see the photomasks without having to bend over. On the other side of the mirror, a video camera is placed such that the resulting projected image aligns with what the viewer sees in the teleprompter mirror. The camera side of the mirror must be darkened out with a cover in order to allow the viewer to only see the reflection of the photomasks. The projection should be as large as possible and at as high a resolution as possible. Ideally, the camera should be able to zoom into the images of the tilings to show more detail.
|
||||
|
||||
In the installation, recordings of the musical pieces are played back; sometimes randomly and sometimes in sync with the respective tilings from which they were generated. The installation can be augmented (e.g. for an exhibition opening) by live performances of the musical pieces instead of the recordings. If so, direct access to the apparatus should be avoided in order for a situation where the observers can view the projected images and listen to the musical accompaniment in a tranquil and focused environment.
|
||||
|
||||
A demo of the apparatus is available at: \url{https://vimeo.com/375784136}.
|
||||
|
||||
\bigskip
|
||||
|
||||
\phantomsection\addcontentsline{toc}{section}{Photomask alignment}
|
||||
\textbf{Photomask alignment}
|
||||
|
||||
Between the two photomasks, there are nine embedded images which can be seen at nine precise orientation organized in a 3 x 3 grid. The image area is surrounded by Moire pattern and Vernier markings to aid in the alignment. Provided below are a description of each of these markings.
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=0.7\linewidth]{selects/oraclesannotated\string_cp.jpg}
|
||||
\end{center}
|
||||
|
||||
\begin{description}[labelindent=0.5cm]
|
||||
\item [unidimensional Verniers:] These are the most useful markings for image alignment. For each axis, there are a set of coarse Verniers (bordering the image) and a set of fine Verniers (further from the image) which move 5 times the speed of the coarse Veniers. Every time an image is aligned the white blob will be centered in both the coarse and fine Verniers. These markings essentially amplify and scale the distance between the image (640 microns) and can be used by a motion tracker in a closed-loop alignment system.
|
||||
\item [multidimenional Verniers:] These are Verniers that are centered in a two-dimenional space everytime an image is focused.
|
||||
\item [linear Moire grating:] These gratings can be used to make sure that the plates are aligned rotationally (resulting in a completely monochrome bar without any patterns).
|
||||
\item [circular Moire grating:] These gratings best represent the grid of the images. When an image is aligned the respective grating on the grid will be dark. The number of fringes denotes the accuracy of the alignment (none means perfectly aligned).
|
||||
\end{description}
|
||||
|
||||
|
||||
High precision optical stages are used for the alignment of the wafers. Ideally, the wafers are not touching (separated by a few microns). If the wafers touch, they will degrade over time as they move across each other. However, it is very difficult to achieve perfect alignment without the photomasks touching as the they need to be aligned in all 6 degrees of freedom ($x$, $y$, $z$, $\theta x$, $\theta y$, and $\theta z$) in order for the resulting image to be properly produced. Only the $x$ and $y$ axis need to be moved to find the images once all the other degrees of freedom are set accurately.
|
||||
|
||||
The original setup is as follows. Each of the photomasks are mounted onto tilt stages to be able to align the masks together rotationally (note that a more ideal setup would use goniometer stages). One of the tilt / goniometer stages is then affixed to a stage with 3 degrees of freedom: $x$, $y$, and $z$. The other is fixed directly to an optical breadboard.
|
||||
|
||||
To automate the alignment, high precision motors are used to move one of the photomasks on the $x$ and $y$ axes. In the original setup, the high precision motors are stepper motors. If the photomasks are not touching, an open-loop system can be used to automate alignment. That is, the accuracy of the step count of the motors should be sufficient for alignment. However, if the photomasks need to touch in order to produce the resulting images (as is the often the case with the original setup), the friction between the two photomasks will cause inaccuracies in an open-loop system. To compensate for this, the Vernier markings can be tracked optically (using motion-tracking software or opto-interrupts) in order to create a closed-loop system. The software used to automate the system and control the motors is detailed in the following section.
|
||||
|
||||
\begin{center}
|
||||
\includegraphics[width=0.7\linewidth]{selects/maquinalit\string_cp.jpg}
|
||||
\end{center}
|
||||
|
||||
\bigskip
|
||||
|
||||
\phantomsection\addcontentsline{toc}{section}{Computer code repository and documentation}
|
||||
\textbf{Computer code repository and documentation}
|
||||
|
||||
As the code is subject to change / improvements, the current state of the code is available through a git repository at the following address: \url{https://unboundedpress.org/code/mwinter/a_history_of_the_domino_problem}. The repository contains the computer code needed to run the installation along with all the code that generated the musical pieces and all the code / schematics / files to rebuild the installation. Further, this document along with each of the scores is marked with the date it was generated in order to verify it is the most recent version.
|
||||
|
||||
%\textbf{Overview of computer code}
|
||||
|
||||
%As the code is subject to change / improvements, the current state of the code is available through a git repository at the following address: \url{https://unboundedpress.org/code/mwinter/a_history_of_the_domino_problem}. The repository contains the computer code needed to run the installation along with all the code that generated the musical pieces and all the code / schematics / files to rebuild the installation. Further, this document along with each of the scores is marked with the date it was generated in order to verify it is the most recent version.
|
||||
|
||||
%The repository is organized by the various languages / formats used to generate the musical pieces and visualizations as well as control the installation. To start, I will focus on the software needed to control the installation which includes four basic components:
|
||||
|
||||
%\begin{itemize}[labelindent=0.5cm]
|
||||
%\item A SuperCollider program with the filename \url{installation_control.scd}.
|
||||
|
||||
%\item A GUI interface written using Open Stage Control with the filename %\url{installation_control_gui.json}
|
||||
|
||||
%\item A motion tracker written in Python using OpenCV to track the Verniers for a closed-loop system with the filename \url{vernier_tracker.py}
|
||||
|
||||
%\item Arduino code to communicate between Supercollider and the stepper-motor drivers with the filename\\ \url{multistepper.ino}
|
||||
%\end{itemize}
|
||||
|
||||
%In the original setup, the Arduino code is loaded onto the Arduino and the three other programs are loaded and launched on a computer (e.g., a Raspberry Pi) connected to the Arduino to control the system. The SuperCollider program is the main control center. Both the GUI and the motion tracker (which takes in video input from the video camera) communicate to the SuperCollider program through OSC messages, which, in turn, sends serial messages to the Arduino to control the stepper motors via the stepper motor drivers. The Arduino code not only sends messages to the stepper motor drivers, but also takes input signals from the limit switches of the motors to ensure that the motors are not destroyed by running into a hard stop.
|
||||
|
||||
%All the other code (primarily written in SuperCollider) was written to generate the musical pieces as well as the visualizations and is maintained in the repository for reference. For the musical pieces, the SuperCollider code generates electronic realizations of the compositions and Lilypond files for generation of the musical scores.
|
||||
|
||||
%The photomasks were printed from the GDSII file format (\url{*.gds}). The workflow consisted of \url{*.png} generated by SuperCollider and then formatted into \url{*.gds} files using the Python KLayout API. However, all that is needed to reprint the photomasks are the files \url{wafer_1.gds} and \url{wafer_2.gds}. Note that the the \url{*.gds} files along with all larger files are archived in a code releases available at \url{https://unboundedpress.org/code/mwinter/a_history_of_the_domino_problem/releases}. Again, all the other files in the repository are maintained for reference.
|
||||
|
||||
\bigskip
|
||||
\newpage
|
||||
\phantomsection\addcontentsline{toc}{section}{Appendix}
|
||||
\textbf{Appendix: partial historical timeline of the domino problem, selected bibliography, acknowledgments, and tiling images}
|
||||
|
||||
pre-history:\\
|
||||
\begin{tabular}{p{0.9in}p{1.3in}p{4.0in}}
|
||||
17th century & Leibniz & pioneer of binary arithmetic and the idea of computing machines \\
|
||||
ca 1928 & Hilbert & posed the original ``Entsheidungsproblem'' \\
|
||||
ca 1931 & Goedel & first showed that their exists truths that are undecidable with a finite set of axioms \\
|
||||
ca 1936 & Turing & invented the concept of the modern day computer and showed its limits yet was unfortunately persecuted for his sexuality despite being a key figure in the triumph of the allied nations against the nazi regime
|
||||
\end{tabular}
|
||||
|
||||
conjecture and first proof:\\
|
||||
\begin{tabular}{p{0.9in}p{1.3in}p{4.0in}}
|
||||
ca 1961 & Wang & conjectured that aperiodic tilings of the plane did not exist \\
|
||||
ca 1964 & Berger & showed that an aperiodic set of 20000+ tiles exist (using his method this was quickly reduced to 104 then 92 by Berger and Knuth, respectively)
|
||||
\end{tabular}
|
||||
|
||||
first wave of reduction:\\
|
||||
\begin{tabular}{p{0.9in}p{1.3in}p{4.0in}}
|
||||
ca 1971 & Robinson \& Lauchli & 56 and 40 tiles, respectively; using a similar technique of tiling arbitrarily large squares discovered independently
|
||||
\end{tabular}
|
||||
|
||||
second wave of reduction:\\
|
||||
\begin{tabular}{p{0.9in}p{1.3in}p{4.0in}}
|
||||
ca 1986 & Penrose \& Amman & 32 and 16 tiles, respectively; using a method that translates different, non-squared aperiodic tiles into Wang tiles
|
||||
\end{tabular}
|
||||
|
||||
third wave of reduction:\\
|
||||
\begin{tabular}{p{0.9in}p{1.3in}p{4.0in}}
|
||||
ca 1996 & Kari \& Culik & 13 tiles using an new construction with aperiodic integer sequences
|
||||
\end{tabular}
|
||||
|
||||
final reduction\\
|
||||
\begin{tabular}{p{0.9in}p{1.3in}p{4.0in}}
|
||||
ca 2015 & Jaendel \& Rao & 11 tiles with an incredible computer-assisted proof that no smaller aperiodic sets exist
|
||||
\end{tabular}
|
||||
|
||||
\bigskip
|
||||
|
||||
\nocite{*}
|
||||
\bibliographystyle{unsrt}
|
||||
\bibliography{hdp}
|
||||
|
||||
\bigskip
|
||||
|
||||
A special thanks to: Alice Koegel, Ana Filipovic\textsuperscript{$*$}, Angela Butterstein\textsuperscript{†}, Anita Carey-Yard\textsuperscript{†}, Aykan Safoğlu\textsuperscript{$*$}, Bjoern Gottstein, Charis von Ristok\textsuperscript{†}, Christof Pruss, Daniela Kern-Michler\textsuperscript{§}, David Frühauf\textsuperscript{$*$}, David Mathews\textsuperscript{$*$}, Deborah Walker, Denise Helene Sumi\textsuperscript{$*$}, Didier Aschour, Edith Lázár\textsuperscript{$*$}, Elena Morena Weber\textsuperscript{$*$}, Elke aus dem Moore\textsuperscript{†}, Elmar Mellert, Florian Hoelscher, Gaetan Borot, Helmut Dietz\textsuperscript{†}, Irasema Fernandez, Johanna Markert\textsuperscript{$*$}, Julian Hartbaum\textsuperscript{‡}, Konstantin Lom\textsuperscript{†}, Leon Müllner\textsuperscript{$*$}, Luise Boege\textsuperscript{$*$}, Lukas Ludwig\textsuperscript{$*$}, Luke Wilkins\textsuperscript{$*$}, Marieanne Roth\textsuperscript{†}, Mathias Irmsher\textsuperscript{‡}, Mitra Wakil\textsuperscript{$*$}, Patrizia Bach\textsuperscript{$*$}, Philip Mecke\textsuperscript{$*$}, Robert Blatt\textsuperscript{$*$}, Sander Wickersheim\textsuperscript{†}, Savyon\textsuperscript{$*$}, Silke Pflüger\textsuperscript{†}, Sílvia das Fadas\textsuperscript{$*$}, Simar Preet Kaur\textsuperscript{$*$}, Sonja Flury\textsuperscript{†}, Sophia Guggenberger\textsuperscript{$*$}, Sophie-Charlotte Thieroff\textsuperscript{†}, Stephan Martens\textsuperscript{‡}, Susanna Flock\textsuperscript{$*$}, Tom Rosenberg\textsuperscript{$*$}, Vincenzo Talluto\textsuperscript{§}, and Yuval Shenhar\textsuperscript{$*$}.
|
||||
|
||||
* denotes contemporary resident at Akademie Schloss Solitude\\
|
||||
† denotes Akademie Schloss Solitude staff\\
|
||||
‡ denotes Institut für Mikroelektronik Stuttgart staff\\
|
||||
§ denotes Newport Optics staff\\
|
||||
|
||||
|
||||
|
||||
\vspace{\fill}
|
||||
|
||||
\begin{flushright}
|
||||
version generated: \today
|
||||
\end{flushright}
|
||||
|
||||
\newpage
|
||||
\phantomsection\addcontentsline{toc}{section}{Tiling images}
|
||||
\vspace*{\fill}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{updated\string_selects/berger.png}
|
||||
Berger
|
||||
\vspace*{\fill}
|
||||
|
||||
\newpage
|
||||
\vspace*{\fill}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{updated\string_selects/robinson.png}
|
||||
Robinson
|
||||
\vspace*{\fill}
|
||||
|
||||
\newpage
|
||||
\vspace*{\fill}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{updated\string_selects/penrose.png}
|
||||
Penrose
|
||||
\vspace*{\fill}
|
||||
|
||||
\newpage
|
||||
\vspace*{\fill}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{updated\string_selects/ammann.png}
|
||||
Ammann
|
||||
\vspace*{\fill}
|
||||
|
||||
\newpage
|
||||
\vspace*{\fill}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{updated\string_selects/kari.png}
|
||||
Kari
|
||||
\vspace*{\fill}
|
||||
|
||||
\newpage
|
||||
\vspace*{\fill}
|
||||
\centering
|
||||
\includegraphics[width=1\linewidth]{updated\string_selects/jaendel.png}
|
||||
Jaendel-Rao
|
||||
|
||||
\vspace*{\fill}
|
||||
\phantomsection\addcontentsline{toc}{section}{Original Scores}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{berger}
|
||||
\includepdf[pages={-}]{../berger/berger\string_score.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{robinson}
|
||||
\includepdf[pages={-}]{../robinson/robinson\string_score.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{penrose}
|
||||
\includepdf[pages={-}]{../penrose/penrose\string_score.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{ammann}
|
||||
\includepdf[pages={-}]{../ammann/ammann\string_score.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{kari}
|
||||
\includepdf[pages={-}]{../kari/kari\string_score.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{jaendel}
|
||||
\includepdf[pages={-}]{../jaendel/jaendel\string_rao\string_score.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{section}{Scores adapted for premiere with Kali Ensemble}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{berger}
|
||||
\includepdf[pages={1-1}]{../berger/berger\string_score.pdf}
|
||||
\includepdf[pages={-6}]{../../score/lilypond\string_v2.24\string_kali/berger\string_knuth/berger\string_knuth.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{robinson}
|
||||
\includepdf[pages={1-1}]{../robinson/robinson\string_score.pdf}
|
||||
\includepdf[pages={-18}]{../../score/lilypond\string_v2.24\string_kali/robinson/robinson.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{penrose}
|
||||
\includepdf[pages={1-1}]{../penrose/penrose\string_score.pdf}
|
||||
\includepdf[pages={-35}]{../../score/lilypond\string_v2.24\string_kali/penrose/penrose.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{ammann}
|
||||
\includepdf[pages={1-1}]{../ammann/ammann\string_score.pdf}
|
||||
\includepdf[pages={-9}]{../../score/lilypond\string_v2.24\string_kali/ammann/ammann.pdf}
|
||||
|
||||
%\includepdf[pages={-}]{../kari/kari\string_score.pdf}
|
||||
\phantomsection\addcontentsline{toc}{subsection}{kari}
|
||||
\includepdf[pages={1-1}]{../kari/kari\string_score.pdf}
|
||||
\includepdf[pages={1-}]{../../score/lilypond\string_v2.24\string_kali/kari\string_culik/kari\string_culik.pdf}
|
||||
|
||||
\phantomsection\addcontentsline{toc}{subsection}{jaendel}
|
||||
\includepdf[pages={1-1}]{../jaendel/jaendel\string_rao\string_score.pdf}
|
||||
|
||||
|
||||
|
||||
\end{document}
|
@ -0,0 +1,22 @@
|
||||
\setcounter {tocdepth}{0}
|
||||
\setcounter {tocdepth}{2}
|
||||
\contentsline {section}{Description / note}{1}{section*.1}%
|
||||
\contentsline {section}{Installation and performance setting}{2}{section*.2}%
|
||||
\contentsline {section}{Photomask alignment}{3}{section*.3}%
|
||||
\contentsline {section}{Computer code repository and documentation}{4}{section*.4}%
|
||||
\contentsline {section}{Appendix}{5}{section*.5}%
|
||||
\contentsline {section}{Tiling images}{6}{section*.6}%
|
||||
\contentsline {section}{Original Scores}{11}{section*.7}%
|
||||
\contentsline {subsection}{berger}{11}{section*.8}%
|
||||
\contentsline {subsection}{robinson}{28}{section*.9}%
|
||||
\contentsline {subsection}{penrose}{53}{section*.10}%
|
||||
\contentsline {subsection}{ammann}{84}{section*.11}%
|
||||
\contentsline {subsection}{kari}{120}{section*.12}%
|
||||
\contentsline {subsection}{jaendel}{136}{section*.13}%
|
||||
\contentsline {section}{Scores adapted for premiere with Kali Ensemble}{242}{section*.14}%
|
||||
\contentsline {subsection}{berger}{242}{section*.15}%
|
||||
\contentsline {subsection}{robinson}{249}{section*.16}%
|
||||
\contentsline {subsection}{penrose}{268}{section*.17}%
|
||||
\contentsline {subsection}{ammann}{304}{section*.18}%
|
||||
\contentsline {subsection}{kari}{314}{section*.19}%
|
||||
\contentsline {subsection}{jaendel}{335}{section*.20}%
|
After Width: | Height: | Size: 4.2 MiB |
After Width: | Height: | Size: 4.6 MiB |
After Width: | Height: | Size: 3.9 MiB |
After Width: | Height: | Size: 3.3 MiB |
After Width: | Height: | Size: 2.3 MiB |
After Width: | Height: | Size: 4.6 MiB |
After Width: | Height: | Size: 2.5 MiB |
After Width: | Height: | Size: 4.4 MiB |
After Width: | Height: | Size: 2.7 MiB |
@ -1,2 +1,3 @@
|
||||
\relax
|
||||
\catcode 95\active
|
||||
\gdef \@abspage@last{25}
|
||||
|
@ -0,0 +1,149 @@
|
||||
{
|
||||
"createdWith": "Open Stage Control",
|
||||
"version": "1.24.0",
|
||||
"type": "session",
|
||||
"content": {
|
||||
"type": "root",
|
||||
"lock": false,
|
||||
"id": "root",
|
||||
"visible": true,
|
||||
"interaction": true,
|
||||
"comments": "",
|
||||
"width": "auto",
|
||||
"height": "auto",
|
||||
"colorText": "auto",
|
||||
"colorWidget": "auto",
|
||||
"alphaFillOn": "auto",
|
||||
"borderRadius": "auto",
|
||||
"padding": "auto",
|
||||
"html": "",
|
||||
"css": "",
|
||||
"colorBg": "auto",
|
||||
"layout": "default",
|
||||
"justify": "start",
|
||||
"gridTemplate": "",
|
||||
"contain": true,
|
||||
"scroll": true,
|
||||
"innerPadding": true,
|
||||
"tabsPosition": "top",
|
||||
"hideMenu": false,
|
||||
"variables": "@{parent.variables}",
|
||||
"traversing": false,
|
||||
"value": "",
|
||||
"default": "",
|
||||
"linkId": "",
|
||||
"address": "auto",
|
||||
"preArgs": "",
|
||||
"typeTags": "",
|
||||
"decimals": 2,
|
||||
"target": "",
|
||||
"ignoreDefaults": false,
|
||||
"bypass": false,
|
||||
"onCreate": "",
|
||||
"onValue": "",
|
||||
"widgets": [
|
||||
{
|
||||
"type": "button",
|
||||
"top": 380,
|
||||
"left": 40,
|
||||
"lock": false,
|
||||
"id": "noise_fade",
|
||||
"visible": true,
|
||||
"interaction": true,
|
||||
"comments": "",
|
||||
"width": "auto",
|
||||
"height": "auto",
|
||||
"expand": "false",
|
||||
"colorText": "auto",
|
||||
"colorWidget": "auto",
|
||||
"colorStroke": "auto",
|
||||
"colorFill": "auto",
|
||||
"alphaStroke": "auto",
|
||||
"alphaFillOff": "auto",
|
||||
"alphaFillOn": "auto",
|
||||
"lineWidth": "auto",
|
||||
"borderRadius": "auto",
|
||||
"padding": "auto",
|
||||
"html": "",
|
||||
"css": "",
|
||||
"colorTextOn": "auto",
|
||||
"label": "fade in/out",
|
||||
"vertical": false,
|
||||
"wrap": false,
|
||||
"on": 1,
|
||||
"off": 0,
|
||||
"mode": "toggle",
|
||||
"doubleTap": false,
|
||||
"decoupled": false,
|
||||
"value": "",
|
||||
"default": "",
|
||||
"linkId": "",
|
||||
"address": "auto",
|
||||
"preArgs": "",
|
||||
"typeTags": "",
|
||||
"decimals": 2,
|
||||
"target": "",
|
||||
"ignoreDefaults": false,
|
||||
"bypass": false,
|
||||
"onCreate": "",
|
||||
"onValue": ""
|
||||
},
|
||||
{
|
||||
"type": "fader",
|
||||
"top": 50,
|
||||
"left": 60,
|
||||
"lock": false,
|
||||
"id": "noise_amp",
|
||||
"visible": true,
|
||||
"interaction": true,
|
||||
"comments": "",
|
||||
"width": "auto",
|
||||
"height": 320,
|
||||
"expand": "false",
|
||||
"colorText": "auto",
|
||||
"colorWidget": "auto",
|
||||
"colorStroke": "auto",
|
||||
"colorFill": "auto",
|
||||
"alphaStroke": "auto",
|
||||
"alphaFillOff": "auto",
|
||||
"alphaFillOn": "auto",
|
||||
"lineWidth": "auto",
|
||||
"borderRadius": "auto",
|
||||
"padding": "auto",
|
||||
"html": "",
|
||||
"css": "",
|
||||
"design": "default",
|
||||
"knobSize": "auto",
|
||||
"horizontal": false,
|
||||
"pips": false,
|
||||
"dashed": false,
|
||||
"gradient": [],
|
||||
"snap": false,
|
||||
"spring": false,
|
||||
"doubleTap": false,
|
||||
"range": {
|
||||
"min": 0,
|
||||
"max": 1
|
||||
},
|
||||
"logScale": false,
|
||||
"sensitivity": 1,
|
||||
"steps": "",
|
||||
"origin": "auto",
|
||||
"value": "",
|
||||
"default": "",
|
||||
"linkId": "",
|
||||
"address": "auto",
|
||||
"preArgs": "",
|
||||
"typeTags": "",
|
||||
"decimals": 2,
|
||||
"target": "",
|
||||
"ignoreDefaults": false,
|
||||
"bypass": false,
|
||||
"onCreate": "",
|
||||
"onValue": "",
|
||||
"onTouch": ""
|
||||
}
|
||||
],
|
||||
"tabs": []
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
(
|
||||
SynthDef(\noise_fade, {arg amp = 1, fadeTime = 30, gate = 0;
|
||||
Out.ar([0, 1], BrownNoise.ar * EnvGen.ar(Env.asr(fadeTime, 1, fadeTime, curve: 'lin'), gate) * amp);
|
||||
}).add;
|
||||
)
|
||||
|
||||
(
|
||||
var noiseFade = Synth(\noise_fade);
|
||||
|
||||
OSCdef(\noise_fade, {arg msg, time, addr, port;
|
||||
[msg, time, addr, port].postln;
|
||||
if(msg[1] == 1, {
|
||||
noiseFade.set(\gate, 1)
|
||||
}, {
|
||||
noiseFade.set(\gate, 0)
|
||||
})
|
||||
}, \noise_fade);
|
||||
|
||||
OSCdef(\noise_amp, {arg msg, time, addr, port;
|
||||
[msg, time, addr, port].postln;
|
||||
noiseFade.set(\amp, msg[1])
|
||||
}, \noise_amp);
|
||||
)
|
||||
|
||||
n = NetAddr("127.0.0.1", 57120)
|
||||
n.sendMsg('/noise_fade', 0)
|
||||
OSCFunc.trace(bool: true, hideStatusMsg: false)
|
@ -0,0 +1,256 @@
|
||||
\version "2.24.1"
|
||||
|
||||
forced-accidentals-pitches =
|
||||
#(music-pitches #{ bes b #})
|
||||
|
||||
#(define (diatonic-pitch-class= p q)
|
||||
(and (= (ly:pitch-notename p) (ly:pitch-notename q))
|
||||
(= (ly:pitch-alteration p) (ly:pitch-alteration q))))
|
||||
|
||||
Force_accidentals_engraver =
|
||||
#(lambda (context)
|
||||
(let
|
||||
((ties '())
|
||||
(affected-note-events '()))
|
||||
(make-engraver
|
||||
(end-acknowledgers
|
||||
((tie-interface engraver grob source-engraver)
|
||||
(set! ties (cons grob ties))))
|
||||
((stop-translation-timestep engraver)
|
||||
(for-each
|
||||
(lambda (tie)
|
||||
(let* ((right-notehead (ly:spanner-bound tie RIGHT))
|
||||
(right-notehead-cause (ly:grob-property right-notehead 'cause)))
|
||||
(if (member right-notehead-cause affected-note-events)
|
||||
(ly:grob-suicide!
|
||||
;;; the accidental grob should be guaranteed to
|
||||
;;; exist since we forced it into existence...
|
||||
(ly:grob-object
|
||||
right-notehead 'accidental-grob)))))
|
||||
ties)
|
||||
(set! ties '())
|
||||
(set! affected-note-events '()))
|
||||
(listeners
|
||||
((note-event engraver event)
|
||||
(when (member (ly:event-property event 'pitch)
|
||||
forced-accidentals-pitches
|
||||
diatonic-pitch-class=)
|
||||
(ly:event-set-property! event 'force-accidental #t)
|
||||
(set! affected-note-events
|
||||
(cons event affected-note-events))))))))
|
||||
|
||||
genStaff =
|
||||
#(define-music-function (parser location part)
|
||||
(string?)
|
||||
(let * ((file (string-append "includes/ammann_part_" part ".ly")))
|
||||
#{
|
||||
\new Staff \with {
|
||||
instrumentName = #part
|
||||
shortInstrumentName = #part
|
||||
}
|
||||
<<
|
||||
\include #file
|
||||
>>
|
||||
#}))
|
||||
|
||||
transposePitchClasses =
|
||||
#(define-music-function (scaleA scaleB music) (ly:music? ly:music? ly:music?)
|
||||
(let* ((scaleA (ly:music-property scaleA 'elements))
|
||||
(scaleB (ly:music-property scaleB 'elements))
|
||||
(scaleA (map (lambda (x) (ly:music-property x 'pitch)) scaleA))
|
||||
(scaleB (map (lambda (x) (ly:music-property x 'pitch)) scaleB))
|
||||
(classesA (map (lambda (p) (cons (ly:pitch-notename p) (ly:pitch-alteration p))) scaleA)))
|
||||
(map-some-music
|
||||
(lambda (m)
|
||||
(let ((p (ly:music-property m 'pitch)))
|
||||
(if (not (null? p))
|
||||
(let* ((nn (ly:pitch-notename p))
|
||||
(oct (ly:pitch-octave p))
|
||||
(alt (ly:pitch-alteration p))
|
||||
(pos (list-index (lambda (x) (and (= (car x) nn) (= (cdr x) alt))) classesA)))
|
||||
(if pos
|
||||
(let* ((p2 (list-ref scaleA pos))
|
||||
(oct2 (ly:pitch-octave p2))
|
||||
(p3 (list-ref scaleB pos))
|
||||
(new-pitch (ly:pitch-transpose p3 (ly:make-pitch (- oct oct2) 0))))
|
||||
(ly:music-set-property! m 'pitch new-pitch)))
|
||||
m)
|
||||
#f)))
|
||||
music)
|
||||
music))
|
||||
|
||||
\paper {
|
||||
#(set-paper-size "a4" 'portrait)
|
||||
top-margin = 1 \cm
|
||||
bottom-margin = 1 \cm
|
||||
left-margin = 1.75 \cm
|
||||
|
||||
top-system-spacing =
|
||||
#'((basic-distance . 20 )
|
||||
(minimum-distance . 20 )
|
||||
(padding . 0 )
|
||||
(stretchability . 0))
|
||||
|
||||
last-bottom-spacing =
|
||||
#'((basic-distance . 15 )
|
||||
(minimum-distance . 15 )
|
||||
(padding . 0 )
|
||||
(stretchability . 0))
|
||||
|
||||
systems-per-page = 4
|
||||
|
||||
print-page-number = ##t
|
||||
oddHeaderMarkup = \markup { \unless \on-first-page {"(ammann)"}}
|
||||
evenHeaderMarkup = \markup { \unless \on-first-page {"(ammann)"}}
|
||||
oddFooterMarkup = \markup { \fill-line {
|
||||
\concat {
|
||||
"-"
|
||||
\fontsize #1.5
|
||||
\fromproperty #'page:page-number-string
|
||||
"-"}}}
|
||||
evenFooterMarkup = \markup { \fill-line {
|
||||
\concat {
|
||||
"-"
|
||||
\fontsize #1.5
|
||||
\fromproperty #'page:page-number-string
|
||||
"-"}}}
|
||||
}
|
||||
|
||||
\header {
|
||||
title = \markup { \italic {ammann}}
|
||||
subtitle = \markup { \normal-text { from \italic{a history of the domino the problem}}}
|
||||
composer = \markup \right-column {"michael winter" "(schloss solitude, stuttgart and calle monclova 62, mexico city; 2018-19)"}
|
||||
tagline = ""
|
||||
}
|
||||
|
||||
#(set-global-staff-size 14)
|
||||
|
||||
\layout {
|
||||
%indent = 0.0\cm
|
||||
line-width = 17\cm
|
||||
%ragged-last = ##t
|
||||
|
||||
\context {
|
||||
\Score
|
||||
\override BarNumber.extra-offset = #'(0 . 4)
|
||||
\override BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print)
|
||||
\override RehearsalMark.direction = #DOWN
|
||||
\override BarNumber.font-size = #2
|
||||
rehearsalMarkFormatter = #format-mark-box-numbers
|
||||
}
|
||||
\context {
|
||||
\Staff
|
||||
\override VerticalAxisGroup.staff-staff-spacing =
|
||||
#'((basic-distance . 15 )
|
||||
(minimum-distance . 15 )
|
||||
(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.after-line-breaking =
|
||||
% #shift-right-at-line-begin
|
||||
%\override TimeSignature.Y-offset = #11
|
||||
\override TimeSignature.Y-offset = #8
|
||||
\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
|
||||
}
|
||||
\context {
|
||||
\Voice
|
||||
\consists #Force_accidentals_engraver
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
\score {
|
||||
%showLastLength = R1*128
|
||||
\new Score
|
||||
%\with{ proportionalNotationDuration = #(ly:make-moment 1 16) }
|
||||
<<
|
||||
\new SemiStaffGroup {
|
||||
<<
|
||||
|
||||
%\new Staff \with {
|
||||
% instrumentName = #"synth II (4)"
|
||||
% shortInstrumentName = #"synII"
|
||||
% midiInstrument = #"clarinet"
|
||||
%}
|
||||
%<<
|
||||
% %\transpose c c'
|
||||
% \transpose a c''
|
||||
% \transposePitchClasses {a b cis dih e fih geh gis} {a b cis dis e f g gis}
|
||||
% \include "includes/ammann_part_4.ly"
|
||||
%>>
|
||||
|
||||
\new Staff \with {
|
||||
%instrumentName = #"synth II (3)"
|
||||
%shortInstrumentName = #"synII"
|
||||
instrumentName = #"harmonium (3)"
|
||||
shortInstrumentName = #"harm"
|
||||
midiInstrument = #"clarinet"
|
||||
%\remove "Time_signature_engraver"
|
||||
}
|
||||
<<
|
||||
\clef "treble_8"
|
||||
%\transpose c c,
|
||||
\transpose a c
|
||||
\transposePitchClasses {a b cis dih e fih geh gis} {a b cis dis e f g gis}
|
||||
\include "includes/ammann_part_5.ly"
|
||||
>>
|
||||
|
||||
\new Staff \with {
|
||||
instrumentName = #"synth I (2)"
|
||||
shortInstrumentName = #"synI"
|
||||
midiInstrument = #"clarinet"
|
||||
\remove "Time_signature_engraver"
|
||||
}
|
||||
<<
|
||||
\transpose a c'
|
||||
\transposePitchClasses {a b cis dih e fih geh gis} {a b cis dis e f g gis}
|
||||
\include "includes/ammann_part_6.ly"
|
||||
>>
|
||||
|
||||
\new Staff \with {
|
||||
instrumentName = #"synth I (1)"
|
||||
shortInstrumentName = #"synI"
|
||||
midiInstrument = #"clarinet"
|
||||
\remove "Time_signature_engraver"
|
||||
}
|
||||
<<
|
||||
\clef bass
|
||||
%\transpose c c,
|
||||
\transpose a c,
|
||||
\transposePitchClasses {a b cis dih e fih geh gis} {a b cis dis e f g gis}
|
||||
\include "includes/ammann_part_7.ly"
|
||||
>>
|
||||
|
||||
%\genStaff #"0"
|
||||
%\genStaff #"1"
|
||||
%\genStaff #"2"
|
||||
%\genStaff #"3"
|
||||
%\genStaff #"4"
|
||||
%\genStaff #"5"
|
||||
>>
|
||||
}
|
||||
>>
|
||||
\layout { }
|
||||
%\midi { }
|
||||
}
|
@ -0,0 +1 @@
|
||||
jaendel-rao is the only score that remains pegged to lilypond 2.19.81, please use the that version.
|
@ -0,0 +1,6 @@
|
||||
<<
|
||||
|
||||
{
|
||||
\set Score.markFormatter = #format-mark-box-numbers e''1 ~ | e''8 [ e''8 ] ~ e''2. | e''4 ~ e''8. [ e''16 ] ~ e''2 | e''2. ~ e''8 [ e''8 ] ~ | e''4 ~ e''8. [ e''16 ] ~ e''2 ~ | e''4 ~ e''16 [ e''8. ] ~ e''4 e''4 ~ | e''2 e''4 ~ e''8 [ e''8 ] ~ | e''8 [ e''8 ] ~ e''2 ~ e''8 [ e''8 ] ~ | e''4 ~ e''8 [ e''8 ] ~ e''2 ~ | e''2. ~ e''8 [ e''8 ] ~ | e''2 ~ e''8 [ e''8 ] ~ e''4 ~ | e''4 ~ e''8 [ e''8 ] ~ e''4 ~ e''8 [ e''8 ] ~ | e''2 ~ e''8 [ e''8 ] ~ e''8 [ e''8 ] ~ | e''16 [ e''8. ] ~ e''16 [ e''8. ] e''4 e''4 | e''4 e''4 e''8. [ e''16 ] ~ e''8. [ e''16 ] ~ | e''8 [ e''8 ] ~ e''8 [ e''8 ] ~ e''16 [ e''8. ] ~ e''4 ~ | e''8 [ e''8 ] ~ e''16 [ e''8. ] ~ e''4 ~ e''8 [ e''8 ] ~ | e''4 e''2 ~ e''16 [ e''8. ] | e''2. ~ e''8. [ e''16 ] ~ | e''2 ~ e''16 [ e''8. ] ~ e''4 ~ | e''4 ~ e''16 [ e''8. ] ~ e''8 [ e''8 ] ~ e''4 | e''2 ~ e''8 [ e''8 ] ~ e''4 | e''4 ~ e''16 [ e''8. ] ~ e''2 ~ | e''1 ~ | e''1 ~ | e''4 ~ e''16 [ e''8. ] ~ e''2 ~ | e''16 [ e''8. ] ~ e''16 [ e''8. ] ~ e''2 ~ | e''16 [ e''8. ] ~ e''16 [ e''8. ] ~ e''2 ~ | e''2. ~ e''16 [ e''8. ] ~ | e''16 [ e''8. ] ~ e''2 ~ e''16 [ e''8. ] ~ | e''4 ~ e''8. [ e''16 ] ~ e''4 ~ e''8 [ e''16 e''16 ] ~ | e''1 ~ | e''4 e''16 [ e''8. ] ~ e''2 ~ | e''8. [ ] \bar "|." }
|
||||
\\
|
||||
>>
|
@ -0,0 +1,261 @@
|
||||
\version "2.24.1"
|
||||
|
||||
transposeScale =
|
||||
#(define-music-function (scaleA scaleB music) (ly:music? ly:music? ly:music?)
|
||||
(let* ((scaleA (ly:music-property scaleA 'elements))
|
||||
(scaleB (ly:music-property scaleB 'elements))
|
||||
(scaleA (map (lambda (x) (ly:music-property x 'pitch)) scaleA))
|
||||
(scaleB (map (lambda (x) (ly:music-property x 'pitch)) scaleB))
|
||||
(rootsA (map ly:pitch-notename scaleA)))
|
||||
(map-some-music
|
||||
(lambda (m)
|
||||
(let ((p (ly:music-property m 'pitch)))
|
||||
(if (not (null? p))
|
||||
(let* ((nn (ly:pitch-notename p))
|
||||
(oct (ly:pitch-octave p))
|
||||
(alt (ly:pitch-alteration p))
|
||||
(pos (list-index (lambda (x) (= x nn)) rootsA))
|
||||
(p2 (list-ref scaleA pos))
|
||||
(oct2 (ly:pitch-octave p2))
|
||||
(alt2 (ly:pitch-alteration p2))
|
||||
(p3 (list-ref scaleB pos))
|
||||
(new-pitch (ly:pitch-transpose p3 (ly:make-pitch (- oct oct2) 0 (- alt alt2)))))
|
||||
(ly:music-set-property! m 'pitch new-pitch)
|
||||
m)
|
||||
#f)))
|
||||
music)
|
||||
music))
|
||||
|
||||
transposePitchClasses =
|
||||
#(define-music-function (scaleA scaleB music) (ly:music? ly:music? ly:music?)
|
||||
(let* ((scaleA (ly:music-property scaleA 'elements))
|
||||
(scaleB (ly:music-property scaleB 'elements))
|
||||
(scaleA (map (lambda (x) (ly:music-property x 'pitch)) scaleA))
|
||||
(scaleB (map (lambda (x) (ly:music-property x 'pitch)) scaleB))
|
||||
(classesA (map (lambda (p) (cons (ly:pitch-notename p) (ly:pitch-alteration p))) scaleA)))
|
||||
(map-some-music
|
||||
(lambda (m)
|
||||
(let ((p (ly:music-property m 'pitch)))
|
||||
(if (not (null? p))
|
||||
(let* ((nn (ly:pitch-notename p))
|
||||
(oct (ly:pitch-octave p))
|
||||
(alt (ly:pitch-alteration p))
|
||||
(pos (list-index (lambda (x) (and (= (car x) nn) (= (cdr x) alt))) classesA)))
|
||||
(if pos
|
||||
(let* ((p2 (list-ref scaleA pos))
|
||||
(oct2 (ly:pitch-octave p2))
|
||||
(p3 (list-ref scaleB pos))
|
||||
(new-pitch (ly:pitch-transpose p3 (ly:make-pitch (- oct oct2) 0))))
|
||||
(ly:music-set-property! m 'pitch new-pitch)))
|
||||
m)
|
||||
#f)))
|
||||
music)
|
||||
music))
|
||||
|
||||
\paper {
|
||||
#(set-paper-size "a4" 'portrait)
|
||||
top-margin = 1 \cm
|
||||
bottom-margin = 1 \cm
|
||||
left-margin = 1.75 \cm
|
||||
|
||||
top-system-spacing =
|
||||
#'((basic-distance . 25 )
|
||||
(minimum-distance . 25 )
|
||||
(padding . 0 )
|
||||
(stretchability . 0))
|
||||
|
||||
last-bottom-spacing =
|
||||
#'((basic-distance . 20 )
|
||||
(minimum-distance . 20 )
|
||||
(padding . 0 )
|
||||
(stretchability . 0))
|
||||
|
||||
%systems-per-page = 2
|
||||
|
||||
print-page-number = ##t
|
||||
oddHeaderMarkup = \markup { \unless \on-first-page {"(penrose)"}}
|
||||
evenHeaderMarkup = \markup { \unless \on-first-page {"(penrose)"}}
|
||||
oddFooterMarkup = \markup { \fill-line {
|
||||
\concat {
|
||||
"-"
|
||||
\fontsize #1.5
|
||||
\fromproperty #'page:page-number-string
|
||||
"-"}}}
|
||||
evenFooterMarkup = \markup { \fill-line {
|
||||
\concat {
|
||||
"-"
|
||||
\fontsize #1.5
|
||||
\fromproperty #'page:page-number-string
|
||||
"-"}}}
|
||||
}
|
||||
|
||||
\header {
|
||||
title = \markup { \italic {penrose}}
|
||||
subtitle = \markup { \normal-text { from \italic{a history of the domino the problem}}}
|
||||
composer = \markup \right-column {"michael winter" "(schloss solitude, stuttgart and calle monclova 62, mexico city; 2018-19)"}
|
||||
tagline = ""
|
||||
}
|
||||
|
||||
#(set-global-staff-size 14)
|
||||
|
||||
\layout {
|
||||
%indent = 0.0\cm
|
||||
line-width = 17\cm
|
||||
%ragged-last = ##t
|
||||
|
||||
\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 BarNumber.font-size = #2
|
||||
%\override DynamicTextSpanner.style = #'none
|
||||
rehearsalMarkFormatter = #format-mark-box-numbers
|
||||
}
|
||||
\context {
|
||||
\Staff
|
||||
|
||||
\override VerticalAxisGroup.staff-staff-spacing =
|
||||
#'((basic-distance . 14 )
|
||||
(minimum-distance . 14 )
|
||||
(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.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.after-line-breaking =
|
||||
% #shift-right-at-line-begin
|
||||
\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 = "violin (2)"
|
||||
shortInstrumentName = "vn"
|
||||
midiInstrument = #"clarinet"
|
||||
%\remove "Time_signature_engraver"
|
||||
}
|
||||
<<
|
||||
\numericTimeSignature
|
||||
\transposePitchClasses {c cis d dis e fih g aih} {c des d ees e fih g aih}
|
||||
\include "includes/penrose_part_5.ly"
|
||||
>>
|
||||
|
||||
\new Staff \with {
|
||||
instrumentName = "clarinet (3)"
|
||||
shortInstrumentName = "cl"
|
||||
midiInstrument = #"clarinet"
|
||||
\remove "Time_signature_engraver"
|
||||
}
|
||||
<<
|
||||
\numericTimeSignature
|
||||
\transpose c d
|
||||
\transposePitchClasses {c cis d dis e fih g aih} {c des d ees e fih g aih}
|
||||
\include "includes/penrose_part_4.ly"
|
||||
>>
|
||||
|
||||
\new Staff \with {
|
||||
instrumentName = "harmonium (4)"
|
||||
shortInstrumentName = "harm"
|
||||
midiInstrument = #"cello"
|
||||
\remove "Time_signature_engraver"
|
||||
}
|
||||
<<
|
||||
\numericTimeSignature
|
||||
\clef bass
|
||||
%\transposePitchClasses {c cis d dis e fih g aih} {c des d ees e fih g aih}
|
||||
\transposePitchClasses {c cis d dis e fih g aih} {c des d ees e fis g bes}
|
||||
\include "includes/penrose_part_3.ly"
|
||||
>>
|
||||
|
||||
\new Staff \with {
|
||||
instrumentName = "cello (5)"
|
||||
shortInstrumentName = "vc"
|
||||
midiInstrument = #"cello"
|
||||
\remove "Time_signature_engraver"
|
||||
}
|
||||
<<
|
||||
\numericTimeSignature
|
||||
\clef bass
|
||||
%\transpose c d'
|
||||
\transposePitchClasses {c cis d dis e fih g aih} {c des d ees e fih g aih}
|
||||
\include "includes/penrose_part_2.ly"
|
||||
>>
|
||||
|
||||
\new Staff \with {
|
||||
instrumentName = "synth (1)"
|
||||
shortInstrumentName = "syn"
|
||||
midiInstrument = #"flute"
|
||||
\remove "Time_signature_engraver"
|
||||
}
|
||||
<<
|
||||
\numericTimeSignature
|
||||
\clef "treble^15"
|
||||
\transposePitchClasses {c cis d dis e fih g aih} {c des d ees e fis g bes}
|
||||
\include "includes/penrose_part_6.ly"
|
||||
>>
|
||||
|
||||
\new Staff \with {
|
||||
instrumentName = "synth (6)"
|
||||
shortInstrumentName = "syn"
|
||||
midiInstrument = #"cello"
|
||||
\remove "Time_signature_engraver"
|
||||
}
|
||||
<<
|
||||
\numericTimeSignature
|
||||
\clef "bass_8"
|
||||
\transposePitchClasses {c cis d dis e fih g aih} {c des d ees e fis g bes}
|
||||
\include "includes/penrose_part_1.ly"
|
||||
>>
|
||||
>>
|
||||
}
|
||||
>>
|
||||
|
||||
\layout{}
|
||||
%\midi{}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
|
||||
{
|
||||
\tempo 4 = 60-90
|
||||
\time 4/4
|
||||
\mark \default
|
||||
R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r16 [ aeh'8. \paren\p ] ~ aeh'2. ~ | aeh'2 ~ aeh'16 [ r8. ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | r2. r8 [ aih'8 \paren\p ] ~ | aih'1 ~ | aih'2 ~ aih'16 [ r8. ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r2 aih'2 \paren\p ~ | aih'1 ~ | aih'2. r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r16 [ g'8. \paren\p ] ~ g'2. ~ | g'2. r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r4 r16 [ aih'8. \paren\p ] ~ aih'2 ~ | aih'1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r2. aih'4 \paren\p ~ | aih'1 ~ | aih'1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r4 r16 [ g'8. \paren\mp ] ~ g'2 ~ | g'2. ~ g'16 [ r8. ] | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r8 [ ~ fih'8 \paren\p ] ~ fih'2. ~ | fih'1 ~ | fih'8. [ r16 ] r2. | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r4 r8 [ ~ fih'8 \paren\p ] ~ fih'2 ~ | fih'1 ~ | fih'2 ~ fih'8 [ r8 ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | r2. r8. [ aeh'16 \paren\p ] ~ | aeh'1 ~ | aeh'2 ~ aeh'8 [ r8 ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r4 r16 [ aih'8. \paren\p ] ~ aih'2 ~ | aih'1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r16 [ aeh'8. \paren\p ] ~ aeh'2. ~ | aeh'2 ~ aeh'16 [ r8. ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | r2. r8 [ aih'8 \paren\p ] ~ | aih'1 ~ | aih'2 ~ aih'16 [ r8. ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r2 aih'2 \paren\p ~ | aih'1 ~ | aih'2. r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r16 [ g'8. \paren\p ] ~ g'2. ~ | g'1 ~ | g'8 [ r8 ] r2. | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r2 r16 [ ~ fih'8. \paren\p ] ~ fih'4 ~ | fih'1 ~ | fih'2 ~ fih'8 [ r8 ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r2 r8 [ ~ fih'8 \paren\p ] ~ fih'4 ~ | fih'1 ~ | fih'2. ~ fih'8 [ r8 ] | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r4 r16 [ g'8. \paren\mp ] ~ g'2 ~ | g'2. ~ g'16 [ r8. ] | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r8 [ ~ fih'8 \paren\p ] ~ fih'2. ~ | fih'1 ~ | fih'8. [ r16 ] r2. | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r4 r8 [ ~ fih'8 \paren\p ] ~ fih'2 ~ | fih'1 ~ | fih'2 ~ fih'8 [ r8 ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | r2. r8. [ aeh'16 \paren\p ] ~ | aeh'1 ~ | aeh'2 ~ aeh'8 [ r8 ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r4 r16 [ aih'8. \paren\p ] ~ aih'2 ~ | aih'1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r16 [ aeh'8. \paren\p ] ~ aeh'2. ~ | aeh'2 ~ aeh'16 [ r8. ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | r2. r8 [ aih'8 \paren\p ] ~ | aih'1 ~ | aih'2 ~ aih'16 [ r8. ] r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r2 aih'2 \paren\p ~ | aih'1 ~ | aih'2. r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r16 [ g'8. \paren\p ] ~ g'2. ~ | g'2. r4 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r4 r16 [ aih'8. \paren\p ] ~ aih'2 ~ | aih'1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | r2. aih'4 \paren\p ~ | aih'1 ~ | aih'1 | R1 ] \bar "|." }
|