This repository holds a group of scripts designed to manipulate data generated by the Rodan-Client, a web application developed through the SIMSSA Project. The Rodan-Client is a GUI for the VIS-Framework, allowing users to create graphical music analysis workflows using indexers created in VIS.
The scripts included in this repo were designed for Karen Desmond’s research project, Measuring Polyphony, and are used to aggregate and and generate visualizations of the Rodan-generated data in order to compare stylistic change in 14th-century motets.
Theoretical Background:
This research project ‘Measuring Polyphony’ investigates changes in musical style from the close of the thirteenth century (ars antiqua) to the middle of the fourteenth century when the ars nova was firmly established. Our study focuses on a subset of this repertory that is representative of this transitional period: the more recent motets in the last fascicle of the Montpellier codex, copied c. 1314 (24 motets, hereafter ‘Montpellier’); motets in the Fauvel manuscript (copied c. 1317-22) and Brussels Rotulus (probably copied c. 1330) (18 motets in total, hereafter ‘Fauv/Br’); and those motets found in the Ivrea manuscript (prob. copied 1370s though preserving a somewhat earlier repertoire) that are also listed in the Tremoille index (a further 22 motets, hereafter ‘Iv/Trem’). Our research question is: how does the deployment of particular sonorities influence the perception of meter in these pieces? In other words, according to the rules set down by medieval theorists for the most consonant or perfect intervals, where are the sonorities comprising these consonant intervals deployed in the compositions, and what sort of changes in sonority deployment take place over time?
Generating the data:
In order to address this question, we combined SIMSSA software with custom scripts suited to our specific needs. To run automated analyses on the motets, first, each motet was transcribed from the most recent modern edition using Sibelius and the note values of the transcriptions augmented to more closely match the note values of the original medieval notation. In other words, a breve in our transcriptions (or in some transcriptions a dotted breve, or a dotted breve tied to a dotted semibreve) signifies a breve in the original notation. In the case of the Montpellier and Fauv/Br motets these transcriptions were double-checked and corrected against the manuscript sources; in some cases the Iv/Trem motets were checked against a manuscript source (most often the Ivrea manuscript), however, since many motets in this group are found in several manuscript sources, in general the proofreading for this group was against the modern edition. A further proofreading process was carried out to verify notated accidentals, and to insert suggestions for unnotated inflections (primarily to avoid augmented unisons, tritones, and diminished octaves). Some inflections were also added at significant cadential moments.
At this stage the Sibelius files were converted into MusicXML. (A separate part of the ‘Measuring Polyphony’ project will transform these files into MEI files following the MEI mensural notation schema.) We then used the Rodan-Client to generate CSV files for each motet: Note/Rest-Indexer, Offset-Indexer, and Vertical-Interval-Indexer jobs were built into a workflow that let us look at vertical intervals at different rhythmic offsets. All vertical intervals were recorded as simple intervals (that is, any M10 was recorded as M3, any P12 as P5, etc.). We used two different rhythmic offsets for each motet: every downbeat (that is, every two or three breves, depending on whether the meter is understood as duple or triple) and every breve. In Rodan, a quarter note is counted as “1”, so breves are offset at either 8, 12 or 18 (depending on the breve values in the transcription) and depending on the mensuration of the motet, downbeats would be at any of 16, 24, 36, or 54.
We then built custom scripts to aggregate and visualize the data in these CSV files, stored here on GitHub.
CSV Files on GitHub:
Stored here are the CSV files generated by Rodan for each of the motets, using the workflow below (with the offset adjusted for each breve/downbeat of a given motet).
These CSV files are what we used with the scripts below to aggregate and visualize our research data.
Aggregating Data:
The aggregation scripts (ending in sonorities.py) allow us to count the number of different kinds of sonorities in each of our 4-voice (4vv) and 3-voice (3vv) motets. These sonorities are identified as perfect (any combination of P1, P5, P8, and supported P4), mixed (any combination of perfect and imperfect intervals that does not create a dissonance), imperfect (any sonority containing two of the same imperfect interval), doubly imperfect (any sonority containing two different imperfect intervals), dissonant (including any of d5, A4, m2, M2, m7, M7, as well as unsupported P4), and rest/solo (only one voice or no voices sounding). These are based on Fuller (1986), although Fuller called our ‘mixed’ imperfect, and our imperfect ‘doubly imperfect’. We aggregated the results based on the groups mentioned above, comparing Montpellier, Fauvel/Br, and Iv/Trem to look at changes over time.
Generates a table counting sonorities of each type (perfect, mixed, imperfect, dissonant, rest/single voice passages) for any number/group of motets. Works on 3-voice motets.
- Make sure you are using Python 3
- Execute from the command line as follows:
- Navigate to folder with motet CSV file(s), e.g.,
cd Code/Motets/Iv-Trem/Breves
- Run the script, e.g.,
python3 3vv_sonorities.py hugo_12.csv nazarea_18.csv
- Navigate to folder with motet CSV file(s), e.g.,
- You can run and aggregate all files in a given folder at once with
*.csv
in place of all the filenames
This script generates lists of fourteenth-century sonority types by measuring intervals against the lowest-sounding note. It only works on 4-voice textures and it offers the option of aggregating results for any number of pieces at once.
This script must be executed from your command line (“PowerShell” on Windows or “Terminal” on Mac). The script will ask you for some information, and then generate results within the command line. CSV files are specified as arguments when the script is executed. To run this script, follow these steps:
- Download the script from GitHub and put it in a folder with the CSV files you want to process... let’s say this folder is called
Motets
and is located on yourDesktop
- Open your command line (Powershell or Terminal) and access that same folder using the
cd
command, e.g.,cd Desktop\Motets
- Now that you are “inside” the right folder, type the name of the script followed by all the files you want to process, all separated by spaces, e.g.,
4vv_sonorities.py decens_24.csv portio_36.csv
(to avoid typing mistakes, you can make a list of all the CSV file names in a separate text file, and then copy and paste them into your command line) - Next, the script will ask you if you want to aggregate your results
- To generate a single table of data for all pieces, enter
y
- To generate a separate table for each piece, enter
n
- To generate a single table of data for all pieces, enter
- If you want to save these results, you can copy the table(s) from your command line and paste them into a text file
Visualizing Data:
3vv_timelines.py and 4vv_timelines.py
These visualization scripts (ending in timelines.py) allow us to generate an image that represents a colour-coded “timeline” of the sonorities in each piece. The resulting images (PNG files) help us identify trends in both sonority and texture at the beginning, middle, end, and other important structural points in each piece.
Like the sonorities.py scripts, the timelines.py scripts take any number of CSV files as arguments in a command. To run one of these scripts, follow these steps:
- Download the script from GitHub and put it in a folder with the CSV files you want to process... let’s say this folder is called
Motets
and is located on yourDesktop
- Open your command line (PowerShell or Terminal) and access that same folder using the
cd
command, e.g.,cd Desktop\Motets
- Now that you are “inside” the right folder, type the name of the script followed by all the files you want to process, all separated by spaces, e.g.,
3vv_timelines.py hugo_12.csv nazarea_18.csv
(to avoid typing mistakes, you can make a list of all the CSV file names in a separate text file, and then copy and paste them into your command line) - Image files will appear in the same folder, one for each CSV file you processed (aggregating results is not possible with the timeline scripts)
Graphs for each of the motets can be found in the Timeline Graphs folder.
Authors:
Karen Desmond (karend27) (main research project)
Emily Hopkins (emilyhopkins) (3vv_sonorities.py)
Sam Howes (slhowes) (4vv_sonorities.py, 3vv_timelines.py, 4vv_timelines.py)