The Geneva Psalter is a setting of the 150 Psalm texts for 4-part choir.
This repository provides data about all 150 Psalms
as well as selection of full-transcriptions for 41 from the "Genevan Psalter" collection.
These 41 were selected to provide the corresponding scores
for harmonic analyses originally by Dmitri Tymoczko and provided on the
When in Rome meta-corpus of harmonic analysis.
As the keys and time values differ, this source records the original in music21's tinyNotation
along with the transpositions needed to match DT's analyses.
Both "ancient" and "modern" versions of the scores (generated from the json)
are provided here.
More details follow below.
The source for this transcription is the earliest available on IMSLP: the 2nd edition, of 1564, here This leads to two files for the:
This source's frontispiece describes it as:
LES
PSEAUMES MIS
EN RIEM FRAN-
SCOISE,
PAR CLEMENT MAROT ET
Theodore de Beze.
MIS EN MUSIQUE A QUATRE
parties par Claude Goudimel.
[...]
M.D.LXV
Yes, the use of upper/lower case is really like that. ;)
Note also that IMSLP provides a [comparison of sources using the Genevan Psalter melodies here.] (https://imslp.org/wiki/List_of_collections_containing_the_Genevan_Psalter_melodies)
This original source is set out in the "Choirbook format" that was common at the time. This allows for all four voices to read from the same double page. This layout is neither like the modern score (all parts together) nor modern parts (all parts on separate documents). Perhaps the closest modern equivalent is the four-hands piano format where two players (primo and secondo) play from on the same piano and read from the same double page.
In describing this repo, we begin with the main point of reference
from which all secondary sources automatically derive: goudimel.json
.
This contains the following keys for all 150:
title
:str
. Original French titles (note the old language and spelling) that sets the file's alphabetical order.psalm_number
:int
. A number in the range 1--150.orig_bass
:str
. The pitch name with octave (e.g, "C4" - not to be confused with the clefs) of the first note in the original bass part.orig_key
: The original key signature expressed as a bool: there is either no key signature or one of a single flat.clefs
:list
. The four original clefs, specifying thesign
andline
in order (from superius to basses). E.g., ["G2", "C3", "C3", "F4"].
Additionally, for the 41 transcribed so far, there is the following:
- string (text) representations of the original parts in music21's tinyNotation.
- The key is given by the part nam-:
superius
,contra
,tenor
,bassus
. - The values are tiny notation for the music of that part.
- This covers all relevant data except the following which we also provide on the json:
- The key is given by the part nam-:
mod_trans
:int
. The number of semitones and direction (+/-) for transposing from the original to the modern key choice.mod_sharps
:int
. The key signature for the modern version, expressed as a number of sharps.- Note that this cannot be deduced from the transposition as we are dealing with modal sources.
From the json data, the code renders scores in both "original" and "modern" versions.
"Original" here means that it follows the source in terms of:
- open score with one voice part per stave, (though the original is in the "Choirbook format" as discussed above)
- part names: "superius", "contra", "tenor", "bassus"
- clefs: including C-clefs like "soprano", "alto", "tenor".
- note values, moving mostly in whole notes.
- part distribution with the cantus firmus melody that Goudimel harmonised placed in the tenor (middle of the texture)
- transposition level
The original is almost entirely expressed in the json, with the exception of elements unsupported by tiny notation:
- Final notes are usual double the length.
- Here we add a fermata.
- Alternatives include doubling the length on rendering.
- This range of clefs is not supported. They are added from data in the json.
- Time signature symbol. Tiny notation supports the concept of
2/2
but the symbol is added later.
"Modern" means
- still open score (though with a script provided to adapt to short score)
- modern part names: SATB
- modern clefs: treble, treble, treble8, bass
- tenor cantus firmus moved to the top
- halved note values
- transposed to keys match up with the harmonic analyses on When in Rome
The code here serves to:
write_from_tiny
: render scores from tiny notation as described above.write_to_tiny
: extract a tiny notation version from a score.corpus_conversion
: use musescore to convert between any supported formatsclef_tree
: produce a summary of clefs used and their counts as described below.
This shows the:
- choice of two clefs per part for S, C, and T, and 3 for B.
- Very uneven use of these combinations, for instance with C1,C3,C4,F4 used 88 time as compared with C1,C3,C4,F3 just once.
├── superius:C1
│ ├── contra:C2 = C1,C2
│ │ ├── tenor:C3 = C1,C2,C3
│ │ │ └── bassus:F3 = C1,C2,C3,F3 = 1
│ │ └── tenor:C4 = C1,C2,C4
│ │ └── bassus:F3 = C1,C2,C4,F3 = 1
│ └── contra:C3 = C1,C3
│ └── tenor:C4 = C1,C3,C4
│ ├── bassus:C4 = C1,C3,C4,C4 = 1
│ ├── bassus:F3 = C1,C3,C4,F3 = 1
│ └── bassus:F4 = C1,C3,C4,F4 = 88
└── superius:G2
├── contra:C2 = G2,C2
│ ├── tenor:C3 = G2,C2,C3
│ │ ├── bassus:C4 = G2,C2,C3,C4 = 14
│ │ ├── bassus:F3 = G2,C2,C3,F3 = 41
│ │ └── bassus:F4 = G2,C2,C3,F4 = 1
│ └── tenor:C4 = G2,C2,C4
│ └── bassus:F3 = G2,C2,C4,F3 = 1
└── contra:C3 = G2,C3
├── tenor:C3 = G2,C3,C3
│ └── bassus:F3 = G2,C3,C3,F3 = 2
└── tenor:C4 = G2,C3,C4
└── bassus:F4 = G2,C3,C4,F4 = 1
Information related to one and the same chorale is represented in multiple variants and formats. Each comes with its own advantages and disadvantages and users should make informed choices. Filenames function as IDs in this context in the sense that files representing (information from) the same chorale share the same filename prefix.
At the moment, only one file format in this dataset can be trusted to contain the full amount of
information to the highest degree of accuracy: the uncompressed MuseScore files ending on
.mscx
which can be opened with MuseScore 3 or 4.
To date, we allow modification of these files using
MuseScore version 3.6.2 exclusively.
However, we use the latest version of MuseScore 4
(v4.4.4 at the time of writing this in February 2025) to convert these files to MEI and musicXML.
Apart from these format, the information from the MuseScore files is accessible by means of
tabular files in TSV format, 3 per chorale: *.notes.tsv
, *.measures.tsv
, and *.chords.tsv
(although the naming of the last is misleading as it contains mainly markup, lyrics, bass figures, etc.).
The latest version of the Python library ms3
is used to batch convert the MuseScore files
to other formats (ms3 convert
) and to extract score information to TSV files (ms3 extract
).
To date, MuseScore 4 is able to convert files to MEI Basic 5.0 format. Take these files with a grain of salt as we cannot guarantee congruence with the source files. The quality of these files makes them unsuitable for music research but they may serve as a starting point for a well-curated scholarly edition. In the long run, provided the maturing of the relevant tools, the MEI files should take on the role of being the authoritative format. Until then, they should not be manually modified because they are to be re-generated by conversion and overwritten once the authoritative MuseScore files are modified.
For convenience and in addition, we offer the chorales in musicXML format. However, experience shows that musicXML files output by MuseScore come with a number of issues and conversion errors. These files are unsuited for scholarly work but some users may still appreciate their availability.
Tab-separated files are a dialect of CSV files and can be used the exact same way. The most convenient way of viewing them is through a spreadsheet program such as LibreOffice Calc (Excel, Numbers, Sheets, etc.) or a text editor with TSV support/plugin. Power users may want to load them in their favourite programming language or statistical software.
You can look up what any column means in the documentation of ms3: https://ms3.readthedocs.io/columns
The most important TSV file is called metadata.tsv
. It contains one row per chorale,
and comes with a number of columns that describe the piece in numerous ways.
A synoptic overview of the most important columns can be found
here.
file_name | measures | labels |
---|---|---|
Goudimel_001_modern | 28 | 0 |
Goudimel_003_modern | 33 | 0 |
Goudimel_021_modern | 19 | 0 |
Goudimel_025_modern | 27 | 0 |
Goudimel_029_modern | 27 | 0 |
Goudimel_032_modern | 35 | 0 |
Goudimel_035_modern | 28 | 0 |
Goudimel_036_modern | 36 | 0 |
Goudimel_042_modern | 27 | 0 |
Goudimel_043_modern | 20 | 0 |
Goudimel_047_modern | 24 | 0 |
Goudimel_049_modern | 34 | 0 |
Goudimel_052_modern | 18 | 0 |
Goudimel_054_modern | 28 | 0 |
Goudimel_056_modern | 31 | 0 |
Goudimel_060_modern | 29 | 0 |
Goudimel_066_modern | 55 | 0 |
Goudimel_068_modern | 36 | 0 |
Goudimel_073_modern | 29 | 0 |
Goudimel_075_modern | 18 | 0 |
Goudimel_079_modern | 35 | 0 |
Goudimel_081_modern | 14 | 0 |
Goudimel_084_modern | 29 | 0 |
Goudimel_089_modern | 31 | 0 |
Goudimel_097_modern | 24 | 0 |
Goudimel_098_modern | 28 | 0 |
Goudimel_099_modern | 17 | 0 |
Goudimel_101_modern | 15 | 0 |
Goudimel_105_modern | 22 | 0 |
Goudimel_108_modern | 29 | 0 |
Goudimel_118_modern | 28 | 0 |
Goudimel_119_modern | 26 | 0 |
Goudimel_122_modern | 35 | 0 |
Goudimel_123_modern | 27 | 0 |
Goudimel_124_modern | 22 | 0 |
Goudimel_127_modern | 20 | 0 |
Goudimel_133_modern | 25 | 0 |
Goudimel_135_modern | 19 | 0 |
Goudimel_138_modern | 32 | 0 |
Goudimel_140_modern | 15 | 0 |
Goudimel_150_modern | 24 | 0 |
Overview table automatically updated using ms3.