# ------------------------------------------------------------------------------
# Name: corpus/chorales.py
# Purpose: Access to the chorale collection
#
# Authors: Michael Scott Asato Cuthbert
# Evan Lynch
#
# Copyright: Copyright © 2012 Michael Scott Asato Cuthbert
# License: BSD, see license.txt
# ------------------------------------------------------------------------------
'''
This file makes it easier to access Bach's chorales through various
numbering schemes and filters and includes the corpus.chorales.Iterator()
class for easily iterating through the chorale collection.
'''
from __future__ import annotations
import copy
import unittest
from music21 import common
from music21 import environment
from music21 import exceptions21
from music21 import metadata
environLocal = environment.Environment('corpus.chorales')
[docs]
class ChoraleList:
# noinspection SpellCheckingInspection
'''
A searchable list of Bach's chorales by various numbering systems:
Note that multiple chorales share the same title, so it's best to
iterate over one of the other lists to get them all.
The list of chorales comes from
https://en.wikipedia.org/wiki/List_of_chorale_harmonisations_by_Johann_Sebastian_Bach
which does not have all chorales in the Bärenreitter-Kirnberger or Riemenschneider
numberings since it only includes BWV 250-438.
>>> bcl = corpus.chorales.ChoraleList()
>>> info358 = bcl.byBudapest[358]
>>> for key in sorted(list(info358)):
... print(f'{key} {info358[key]}')
baerenreiter 68
budapest 358
bwv 431
kalmus 358
notes None
riemenschneider 68
title Wenn wir in höchsten Nöten sein
>>> #_DOCS_SHOW c = corpus.parse('bach/bwv' + str(info358['bwv']))
>>> #_DOCS_SHOW c.show() # shows Bach BWV431
More fully:
>>> b = corpus.parse('bwv' + str(corpus.chorales.ChoraleList().byRiemenschneider[2]['bwv']))
>>> b
<music21.stream.Score ...>
'''
def __init__(self):
self.byTitle = {}
self.byBWV = {}
self.byKalmus = {}
self.byBaerenreiter = {}
self.byBudapest = {}
self.byRiemenschneider = {}
self.prepareList()
# noinspection SpellCheckingInspection
[docs]
def prepareList(self):
'''
puts a list of Bach Chorales into dicts of dicts called
self.byBudapest
self.byBWV
self.byRiemenschneider
etc.
'''
# From https://en.wikipedia.org/wiki/List_of_chorale_harmonisations_by_Johann_Sebastian_Bach
# CC license. https://en.wikipedia.org/wiki/WP:CC-BY-SA
# Some of these are problematic--I have removed them for now: --Evan Lynch
# |Seelen-Bräutigam||409||0||5||306||141||Actually 5a in Bärenreiter, not in Kalmus
# |-
# |Christe, du Beistand deiner Kreuzgemeinde||275||35||210||45||210||
# |-
# |Christe, der du bist Tag und Licht||274||34||245||44||245||
allCat = '''|Was Gott tut, das ist wohlgetan||250||339||346||342||347||
|-
|Sei Lob und Ehr' dem höchsten Gut||251||89||328||91||329||
|-
|Nun danket alle Gott||252||258||329||258||330||3rd Wedding Chorale in this group
|-
|Ach bleib bei uns, Herr Jesu Christ||253||1||177||1||177||
|-
|Ach Gott, erhör' mein Seufzen||254||2||186||2||186||
|-
|Ach Gott und Herr||255||3||40||4||40||
|-
|Ach lieben Christen, seid getrost||256||385||31||385||31||
|-
|Wär Gott nicht mit uns diese Zeit||257||388||284||386||285||
|-
|Wo Gott der Herr nicht bei uns hält||258||383||335||387||336||No. 63 in Schemelli
|-
|Ach, was soll ich Sünder machen||259||10||39||10||39||
|-
|Allein Gott in der Höh' sei Ehr'||260||12||249||16||249||
|-
|Allein zu dir, Herr Jesu Christ||261||15||358||18||359||
|-
|Alle Menschen müssen sterben||262||17||153||13||153||
|-
|Alles ist an Gottes Segen||263||19||128||19||128||
|-
|Als der gütige Gott||264||20||159||20||159||
|-
|Als Jesus Christus in der Nacht||265||21||180||21||180||
|-
|Als vierzig Tag nach Ostern||266||22||208||22||208||
|-
|An Wasserflüssen Babylon||267||23||5||23||5||
|-
|Auf, auf, mein Herz, und du mein ganzer Sinn||268||24||124||24||124||
|-
|Aus meines Herzens Grunde||269||30||1||30||1||
|-
|Befiehl du deine Wege||270||157||285||162||286||
|-
|Befiehl du deine Wege||271||158||366||163||367||
|-
|Befiehl du deine Wege||272||32||339||32||340||
|-
|Christ, der du bist der helle Tag||273||33||230||33||230||
|-
|Christ ist erstanden||276||36||197||35||197||
|-
|Christ lag in Todes Banden||277||38||15||39||15||
|-
|Christ lag in Todesbanden||278||39||370||40||371||
|-
|Christ lag in Todesbanden||279||40||261||37||261||
|-
|Christ, unser Herr, zum Jordan kam||280||43||65||43||66||
|-
|Christus, der ist mein Leben||281||46||7||47||6||
|-
|Christus, der ist mein Leben||282||47||315||48||316||
|-
|Christus, der uns selig macht||283||48||198||51||198||
|Christus, der uns selig macht||283||48||306||51||307||
|-
|Christus ist erstanden, hat überwunden||284||51||200||52||200||
|-
|Da der Herr Christ zu Tische saß||285||52||196||53||196||
|-
|Danket dem Herren||286||53||228||55||228||
|-
|Dank sei Gott in der Höhe||287||54||310||54||311||
|-
|Das alte Jahr vergangen ist||288||55||162||56||162||
|-
|Das alte Jahr vergangen ist||289||56||313||57||314||
|-
|Das walt' Gott Vater und Gott Sohn||290||58||224||59||224||
|-
|Das walt' mein Gott, Vater, Sohn und heiliger Geist||291||59||75||60||75||
|-
|Den Vater dort oben||292||60||239||61||239||
|-
|Der du bist drei in Einigkeit||293||61||154||62||154||
|-
|Der Tag, der ist so freudenreich||294||62||158||63||158||
|-
|Des heil'gen Geistes reiche Gnad'||295||63||207||64||207||
|-
|Die Nacht ist kommen||296||64||231||65||231||
|-
|Die Sonn' hat sich mit ihrem Glanz||297||65||232||66||232||
|-
|Dies sind die heil'gen zehn Gebot'||298||66||127||67||127||
|-
|Dir, dir, Jehova, will ich singen||299||67||209||68||209||Notebook for Anna Magdalena Bach
|-
|Du grosser Schmerzensmann||300||70||164||71||167||
|-
|Du, o schönes Weltgebäude||301||71||137||73||134||
|-
|Ein feste Burg ist unser Gott||302||74||20||76||20||
|-
|Ein feste Burg ist unser Gott||303||75||250||77||250||
|-
|Eins ist Not! ach Herr, dies Eine||304||77||280||78||280||
|-
|Erbarm' dich mein, o Herre Gott||305||78||33||79||34||
|-
|Erstanden ist der heil'ge Christ||306||85||176||86||176||
|-
|Es ist gewisslich an der Zeit||307||262||260||262||260||
|-
|Es spricht der Unweisen Mund wohl||308||92||27||93||27||
|-
|Es stehn vor Gottes Throne||309||93||166||94||166||
|-
|Es wird schier der letzte Tag herkommen||310||94||238||95||238||
|-
|Es woll' uns Gott genädig sein||311||95||16||97||16||
|-
|Es woll' uns Gott genädig sein||312||96||351||98||352||
|-
|Für Freuden lasst uns springen||313||106||163||107||163||
|-
|Gelobet seist du, Jesu Christ||314||107||287||112||288||
|-
|Gib dich zufrieden und sei stille||315||111||271||113||271||
|-
|Gott, der du selber bist das Licht||316||112||225||114||225||
|-
|Gott, der Vater, wohn' uns bei||317||113||134||115||135||
|-
|Gottes Sohn ist kommen||318||115||18||120||18||
|-
|Gott hat das Evangelium||319||116||181||117||181||
|-
|Gott lebet noch||320||117||234||118||234||No. 37 in Schemelli
|-
|Gottlob, es geht nunmehr zu Ende||321||118||192||121||192||
|-
|Gott sei gelobet und gebenedeiet / Meine Seele erhebet den Herrn||322||119||70||119||70||
|-
|Gott sei uns gnädig||323||120||319||239||320||
|-
|Meine Seele erhebet den Herrn||324||121||130||240||130||
|-
|Heilig, heilig||325||123||235||122||235||or Sanctus, Sanctus, Dominus Deus Sabaoth
|Heilig, heilig||325||123||318||122||319||or Sanctus, Sanctus, Dominus Deus Sabaoth
|-
|Herr Gott, dich loben alle wir||326||129||167||129||164||
|-
|Vor deinen Thron tret' ich hiermit||327||132||333||130||334||
|-
|Herr, Gott, dich loben wir||328||133||205||133||205||
|-
|Herr, ich denk' an jene Zeit||329||136||212||134||212||
|-
|Herr, ich habe missgehandelt||330||137||35||135||33||
|-
|Herr, ich habe missgehandelt||331||138||286||136||287||
|-
|Herr Jesu Christ, dich zu uns wend||332||139||136||137||136||
|-
|Herr Jesu Christ, du hast bereit't||333||140||226||138||226||
|-
|Herr Jesu Christ, du höchstes Gut||334||141||73||142||73||
|-
|Herr Jesu Christ, mein's Lebens Licht||335||145||236||143||295||
|-
|Herr Jesu Christ, wahr'r Mensch und Gott||336||146||189||145||189||
|-
|Herr, nun lass in Frieden||337||148||190||146||190||
|-
|Herr, straf mich nicht in deinem Zorn||338||149||221||147||221||
|-
|Herr, wie du willst, so schick's mit mir||339||151||144||149||144||
|Herr, wie du willst, so schick's mit mir||339||151||144||149||318||
|-
|Herzlich lieb hab ich dich, o Herr||340||152||277||153||277||
|-
|Heut' ist, o Mensch, ein grosser Trauertag||341||170||168||168||168||
|-
|Heut' triumphieret Gottes Sohn||342||171||79||169||79||
|-
|Hilf, Gott, dass mir's gelinge||343||172||199||170||199||
|Hilf, Gott, dass mir's gelinge||343||172||301||170||302||
|-
|Hilf, Herr Jesu, lass gelingen||344||173||155||171||155||
|-
|Ich bin ja, Herr, in deiner Macht||345||174||251||172||251||
|-
|Ich dank' dir Gott für all' Wohltat||346||175||223||173||223||
|-
|Ich dank' dir, lieber Herre||347||176||2||175||2||
|-
|Ich dank' dir, lieber Herre||348||177||272||176||272||
|-
|Ich dank' dir schon durch deinen Sohn||349||179||188||177||188||
|-
|Ich danke dir, o Gott, in deinem Throne||350||180||229||178||229||
|-
|Ich hab' mein' Sach' Gott heimgestellt||351||182||19||180||19||
|-
|Jesu, der du meine Seele||352||185||37||192||37||
|-
|Jesu, der du meine Seele||353||186||269||193||269||
|-
|Jesu, der du meine Seele||354||187||368||194||369||
|-
|Jesu, der du selbsten wohl||355||189||169||195||169||
|-
|Jesu, du mein liebstes Leben||356||190||243||196||243||
|-
|Jesu, Jesu, du bist mein||357||191||244||197||244||No. 53 in Schemelli
|-
|Jesu, meine Freude||358||195||355||207||356||
|-
|Jesu, meiner Seelen Wonne||359||363||364||372||365||
|-
|Jesu, meiner Freuden Freude||360||364||349||373||350||
|-
|Jesu, meines Herzens Freud'||361||202||264||208||264||
|-
|Jesu, nun sei gepreiset||362||203||252||211||252||
|-
|Jesus Christus, unser Heiland||363||206||30||212||30||
|-
|Jesus Christus, unser Heiland||364||207||174||213||174||
|-
|Jesus, meine Zuversicht||365||208||175||215||175||
|-
|Ihr Gestirn', ihr hohlen Lüfte||366||210||161||183||161||
|-
|In allen meinen Taten||367||211||140||184||140||
|-
|In dulci jubilo||368||215||143||188||143||
|-
|Keinen hat Gott verlassen||369||217||129||216||129||
|-
|Komm, Gott Schöpfer, heiliger Geist||370||218||187||217||187||
|-
|Kyrie, Gott Vater in Ewigkeit||371||225||132||222||132||
|-
|Lass, o Herr, dein Ohr sich neigen||372||226||218||223||218||
|-
|Liebster Jesu, wir sind hier||373||228||131||226||131||
|-
|Lobet den Herren, denn er ist freundlich||374||232||227||229||227||
|-
|Lobt Gott, ihr Christen, allzugleich||375||233||276||232||276||
|-
|Lobt Gott, ihr Christen, allzugleich||376||234||341||233||342||
|-
|Mach's mit mir, Gott, nach deiner Güt'||377||237||44||236||44||
|-
|Meine Augen schliess' ich jetzt||378||240||258||237||258||
|-
|Meinen Jesum lass' ich nicht, Jesus||379||241||151||247||151||
|-
|Meinen Jesum lass' ich nicht, weil||380||242||298||246||299||
|-
|Meines Lebens letzte Zeit||381||248||345||248||346||
|-
|Mit Fried' und Freud' ich fahr' dahin||382||249||49||251||49||
|-
|Mitten wir im Leben sind||383||252||214||252||214||
|-
|Nicht so traurig, nicht so sehr||384||253||149||253||149||
|-
|Nun bitten wir den heiligen Geist||385||254||36||256||36||
|-
|Nun danket alle Gott||386||257||32||259||32||Leuthen Chorale
|-
|Nun freut euch, Gottes Kinder all'||387||260||185||260||185||
|-
|Nun freut euch, lieben Christen g'mein||388||261||183||263||183||
|-
|Nun lob', mein' Seel', den Herren||389||269||268||271||268||
|-
|Nun lob', mein Seel', den Herren||390||270||295||272||296||
|-
|Nun preiset alle Gottes Barmherzigkeit||391||273||222||273||222||
|-
|Nun ruhen alle Wälder||392||298||288||295||289||
|-
|O Welt, sieh hier dein Leben||393||289||275||296||275||
|-
|O Welt, sieh hier dein Leben||394||290||365||297||366||
|-
|O Welt, sieh hier dein Leben||395||291||362||298||363||
|-
|Nun sich der Tag geendet hat||396||274||240||274||240||
|-
|O Ewigkeit, du Donnerwort||397||275||274||276||274||
|-
|O Gott, du frommer Gott||398||277||311||282||312||
|-
|O Gott, du frommer Gott||399||282||314||277||315||
|-
|O Herzensangst, o Bangigkeit||400||284||173||284||173||
|-
|O Lamm Gottes, unschuldig||401||285||165||285||165||
|-
|O Mensch, bewein' dein' Sünde gross||402||286||201||286||201||
|O Mensch, bewein' dein' Sünde gross||402||286||305||286||306||
|-
|O Mensch, schaue Jesum Christum an||403||287||203||287||203||
|-
|O Traurigkeit, o Herzeleid||404||288||60||288||57||
|-
|O wie selig seid ihr doch, ihr Frommen||405||299||213||299||213||No. 65 in Schemelli
|-
|O wie selig seid ihr doch, ihr Frommen||406||300||219||300||219||
|-
|O wir armen Sünder||407||301||202||301||202||
|-
|Schaut, ihr Sünder||408||303||171||303||171||
|-
|Sei gegrüsset, Jesu gütig||410||307||172||308||172||No. 22 in Schemelli
|-
|Singet dem Herrn ein neues Lied||411||309||246||310||246||
|-
|So gibst du nun, mein Jesu, gute Nacht||412||310||206||311||206||No. 26 in Schemelli
|-
|Sollt' ich meinem Gott nicht singen||413||311||220||312||220||No. 18 in Schemelli
|-
|Uns ist ein Kindlein heut' gebor'n||414||313||148||0||148||Not in Musica Budapest
|-
|Valet will ich dir geben||415||314||24||315||24||
|-
|Vater unser im Himmelreich||416||316||47||319||47||BWV 245
|-
|Von Gott will ich nicht lassen||417||324||363||326||364||
|-
|Von Gott will ich nicht lassen||418||325||331||327||332||
|-
|Von Gott will ich nicht lassen||419||326||114||328||114||
|-
|Warum betrübst du dich, mein Herz||420||331||145||332||145||
|-
|Warum betrübst du dich, mein Herz||421||332||299||333||300||
|-
|Warum sollt' ich mich denn grämen||422||334||356||335||357||
|-
|Was betrübst du dich, mein Herze||423||336||237||336||237||
|-
|Was bist du doch, o Seele, so betrübet||424||337||193||337||193||No. 55 in Schemelli
|-
|Was willst du dich, o meine Seele||425||349||241||350||241||
|-
|Weltlich Ehr' und zeitlich Gut||426||351||211||351||211||
|-
|Wenn ich in Angst und Not||427||352||147||352||147||
|-
|Wenn mein Stündlein vorhanden ist||428||353||321||355||322||
|-
|Wenn mein Stündlein vorhanden ist||429||354||51||356||52||
|-
|Wenn mein Stündlein vorhanden ist||430||355||350||357||351||
|-
|Wenn wir in höchsten Nöten sein||431||358||68||358||68||
|-
|Wenn wir in höchsten Nöten sein||432||359||247||359||247||
|-
|Wer Gott vertraut, hat wohl gebaut||433||366||135||360||137||
|-
|Wer nur den lieben Gott läßt walten||434||367||146||367||146||
|-
|Wie bist du, Seele, in mir so gar betrübt||435||374||242||374||242||
|-
|Wie schön leuchtet der Morgenstern||436||375||278||378||278||
|-
|Wir glauben all' an einen Gott||437||382||133||382||133||
|-
|Wo Gott zum Haus nicht gibt sein' Gunst||438||389||157||388||157|| '''
for line in allCat.splitlines():
line = line.strip()
if line.startswith('|-'):
continue
else:
line = line[1:]
(title, bwv, kalmus, baerenreiter, budapest,
riemenschneider, notes) = line.split('||')
if notes == ' ':
notes = None
lineDict = {'title': title, 'bwv': int(bwv), 'kalmus': int(kalmus),
'baerenreiter': int(baerenreiter), 'budapest': int(budapest),
'riemenschneider': int(riemenschneider), 'notes': notes}
self.byTitle[title] = lineDict
self.byBWV[int(bwv)] = lineDict
self.byKalmus[int(kalmus)] = lineDict
self.byBaerenreiter[int(baerenreiter)] = lineDict
self.byBudapest[int(budapest)] = lineDict
self.byRiemenschneider[int(riemenschneider)] = lineDict
[docs]
class ChoraleListRKBWV:
# noinspection SpellCheckingInspection
'''
A searchable list of Bach's chorales by various numbering systems:
Note that multiple chorales share the same title, so it's best to
iterate over one of the other lists to get them all.
The list of chorales comes from Margaret Greentree (formerly at
jsbchorales.net) who compiled
all chorales in the corpus, but only had numbers for the `kalmus`,
`riemenschneider`, and `bwv` numbering systems.
>>> bcl = corpus.chorales.ChoraleListRKBWV()
>>> info155 = bcl.byRiemenschneider[155]
>>> for key in sorted(list(info155)):
... print(f'{key} {info155[key]}')
bwv 344
kalmus 173
riemenschneider 155
title Hilf, Herr Jesu, laß gelingen
>>> #_DOCS_SHOW c = corpus.parse('bach/bwv' + str(info155['bwv']))
>>> #_DOCS_SHOW c.show() # shows Bach BWV344
More fully:
>>> theNumber = corpus.chorales.ChoraleListRKBWV().byRiemenschneider[2]['bwv']
>>> b = corpus.parse('bwv' + str(theNumber))
>>> b
<music21.stream.Score ...>
'''
def __init__(self):
self.byTitle = {}
self.byBWV = {}
self.byKalmus = {}
self.byRiemenschneider = {}
self.prepareList()
# noinspection SpellCheckingInspection
[docs]
def prepareList(self):
'''
puts a list of Bach Chorales into dicts of dicts called
self.byKalmus
self.byBWV
self.byRiemenschneider
self.byTitle
'''
# ----Existence problems with R82, 141, 210, 245, 309, 337----------------------- #
# 82---||---46.6s---||---O großer Gott von Macht---||---0 #
# 141---||---409---||---Seelenbräutigam, Jesu, Gottes Lamm---||---306 #
# 210---||---275---||---Christe, du Beistand deiner Kreuz-gemeine---||---35 #
# 245---||---274---||---Christe, der du bist Tag und Licht---||---34 #
# 309---||---267-a---||---An Wasserflüssen Babylon---||---23 #
# 337---||---24.6s---||---O Gott, du frommer Gott---||---0 #
# -------------------------------------------------------------------------- #
allCat = '''1---||---269---||---Aus meines Herzens Grunde---||---30
2---||---347---||---Ich dank’ dir, lieber Herre---||---176
3---||---153.1---||---Ach Gott, vom Himmel sieh’ darein---||---5
4---||---86.6---||---Es ist das Heil uns kommen her---||---86
5---||---267---||---An Wasserflüssen Babylon---||---23
6---||---281---||---Christus, der ist mein Leben---||---46
7---||---17.7---||---Nun lob’, mein’ Seel’, den Herren---||---271
8---||---40.8---||---Freuet euch, ihr Christen alle---||---105
9---||---248.12-2---||---Ermuntre dich, mein schwacher Geist---||---80
10---||---38.6---||---Aus tiefer Not schrei’ ich zu dir---||---31
11---||---41.6---||---Jesu, nun sei gepreiset---||---203
12---||---65.2---||---Puer natus in Bethlehem---||---302
13---||---33.6---||---Allein zu dir, Herr Jesu Christ---||---16
14---||---184.5---||---O Herre Gott, dein göttlich Wort---||---283
15---||---277---||---Christ lag in Todesbanden---||---38
16---||---311---||---Es woll’ uns Gott genädig sein---||---95
17---||---145.5---||---Erschienen ist der herrliche Tag---||---83
18---||---318---||---Gottes Sohn ist kommen---||---115
19---||---351---||---Ich hab’ mein’ Sach’ Gott heimgestellt---||---182
20---||---302---||---Ein’ feste Burg ist unser Gott---||---74
21---||---153.5---||---Herzlich tut mich verlangen---||---160
22---||---180.7---||---Schmücke dich, o liebe Seele---||---304
23---||---28.6---||---Zeuch ein zu deinen Toren---||---124
24---||---415---||---Valet will ich dir geben---||---314
25---||---148.6---||---Wo soll ich fliehen hin---||---26
26---||---20.7---||---O Ewigkeit, du Donnerwort---||---276
26---||---20.11---||---O Ewigkeit, du Donnerwort---||---276
27---||---308---||---Es spricht der Unweisen Mund---||---92
28---||---36.8-2---||---Nun komm, der Heiden Heiland---||---264
29---||---32.6---||---Freu’ dich sehr, o meine Seele---||---102
30---||---363---||---Jesus Christus, unser Heiland---||---206
31---||---256---||---Ach lieben Christen, seid getrost---||---385
32---||---386---||---Nun danket alle Gott---||---257
33---||---330---||---Herr, ich habe mißgehandelt---||---137
34---||---305---||---Erbarm’ dich mein, o Herre Gott---||---78
35---||---248.53-5---||---Gott des Himmels und der Erden---||---114
36---||---385---||---Nun bitten wir den heiligen Geist---||---254
37---||---352---||---Jesu, der du meine Seele---||---185
38---||---115.6---||---Straf’ mich nicht in deinem Zorn---||---312
39---||---259---||---Ach was soll ich Sünder machen---||---10
40---||---255---||---Ach Gott und Herr---||---3
41---||---65.7---||---Was mein Gott will, das g’scheh’ allzeit---||---346
42---||---67.7---||---Du Friedefürst, Herr Jesu Christ---||---68
43---||---8.6---||---Liebster Gott, wann werd’ ich sterben---||---227
44---||---377---||---Mach’s mit mir, Gott, nach deiner Güt’---||---237
45---||---108.6---||---Kommt her zu mir, spricht Gottes Sohn---||---224
46---||---248.9-1---||---Vom Himmel hoch, da komm’ ich her---||---323
47---||---416---||---Vater unser im Himmelreich---||---316
48---||---26.6---||---Ach wie nichtig, ach wie flüchtig---||---11
49---||---382---||---Mit Fried’ und Freud’ ich fahr’ dahin---||---249
50---||---244.37---||---In allen meinen Taten---||---292
51---||---91.6---||---Gelobet seist du, Jesu Christ---||---109
52---||---429---||---Wenn mein Stündlein vorhanden ist---||---354
53---||---122.6---||---Das neugeborne Kindelein---||---57
54---||---151.5---||---Lobt Gott, ihr Christen, allzugleich---||---235
55---||---110.7---||---Wir Christenleut’---||---380
56---||---121.6---||---Christum wir sollen loben schon---||---42
57---||---404---||---O Traurigkeit, o Herzeleid---||---288
58---||---174.5---||---Herzlich lieb hab’ ich dich, o Herr---||---153
59---||---245.3---||---Herzliebster Jesu, was hast du verbrochen---||---168
60---||---133.6---||---Ich freue mich in dir---||---181
61---||---159.5---||---Jesu Leiden, Pein und Tod---||---194
62---||---197.10---||---Wer nur den lieben Gott läßt walten---||---370
63---||---245.11---||---Nun ruhen alle Wälder---||---293
64---||---194.6---||---Freu’ dich sehr, o meine Seele---||---100
65---||---144.3---||---Was Gott tut, das ist wohlgetan---||---338
66---||---280---||---Christ, unser Herr, zum Jordan kam---||---43
67---||---39.7---||---Freu’ dich sehr, o meine Seele---||---104
68---||---431---||---Wenn wir in höchsten Nöten sein---||---358
69---||---226.2---||---Komm, heiliger Geist, Herre Gott---||---221
70---||---322---||---Gott sei gelobet und gebenedeiet---||---119
71---||---177.5---||---Ich ruf’ zu dir, Herr Jesu Christ---||---183
72---||---6.6---||---Erhalt’ uns, Herr, bei deinem Wort---||---79
73---||---334---||---Herr Jesu Christ, du höchstes Gut---||---141
74---||---244.54---||---O Haupt voll Blut und Wunden---||---162
75---||---291---||---Das walt’ mein Gott---||---59
76---||---30.6---||---Freu’ dich sehr, o meine Seele---||---103
77---||---248.46-5---||---In dich hab’ ich gehoffet, Herr---||---214
78---||---244.3---||---Herzliebster Jesu, was hast du verbrochen---||---166
79---||---342---||---Heut’ triumphieret Gottes Sohn---||---171
80---||---244.44---||---O Haupt voll Blut und Wunden---||---159
81---||---245.15---||---Christus, der uns selig macht---||---49
82---||---46.6---||---O großer Gott von Macht---||---0
83---||---245.14---||---Jesu Leiden, Pein und Tod---||---192
84---||---197.5---||---Nun bitten wir den heiligen Geist---||---255
85---||---45.7---||---O Gott, du frommer Gott---||---278
86---||---36.4-2---||---Wie schön leuchtet der Morgenstern---||---377
87---||---56.5---||---Du, o schönes Weltgebäude---||---72
88---||---28.6---||---Helft mir Gott’s Güte preisen---||---124
89---||---244.62---||---O Haupt voll Blut und Wunden---||---162
90---||---57.8---||---Hast du denn, Jesu, dein Angesicht gänzlich verborgen---||---231
91---||---42.7---||---Verleih’ uns Frieden gnädiglich---||---322
91---||---42.7---||---Verleih’ uns Frieden gnädiglich---||---322
92---||---168.6---||---O Jesu Christ, du höchstes Gut---||---143
93---||---194.12---||---Wach’ auf, mein Herz, und singe---||---268
94---||---47.5---||---Warum betrübst du dich, mein Herz---||---333
95---||---55.5---||---Werde munter, mein Gemüte---||---362
96---||---87.7---||---Jesu, meine Freude---||---201
97---||---169.7---||---Nun bitten wir den heiligen Geist---||---256
98---||---244.15---||---O Haupt voll Blut und Wunden---||---162
99---||---16.6---||---Helft mir Gott’s Güte preisen---||---125
100---||---18.5-w---||---Durch Adams Fall ist ganz verderbt---||---73
101---||---164.6---||---Herr Christ, der ein’ge Gott’s-Sohn---||---127
102---||---43.11---||---Ermuntre dich, mein schwacher Geist---||---81
103---||---13.6---||---Nun ruhen alle Wälder---||---295
104---||---88.7---||---Wer nur den lieben Gott läßt walten---||---368
105---||---244.46---||---Herzliebster Jesu, was hast du verbrochen---||---167
106---||---245.28---||---Jesu Leiden, Pein und Tod---||---193
107---||---245.40---||---Herzlich lieb hab’ ich dich, o Herr---||---154
108---||---245.26---||---Valet will ich dir geben---||---315
109---||---187.7---||---Singen wir aus Herzensgrund---||---308
110---||---102.7---||---Vater unser im Himmelreich---||---320
111---||---245.17---||---Herzliebster Jesu, was hast du verbrochen---||---169
112---||---84.5---||---Wer nur den lieben Gott läßt walten---||---373
113---||---245.37---||---Christus, der uns selig macht---||---50
114---||---419---||---Von Gott will ich nicht lassen---||---326
115---||---244.25---||---Was mein Gott will, das g’scheh’ allezeit---||---342
116---||---29.8---||---Nun lob’, mein’ Seel’, den Herren---||---272
117---||---244.10---||---Nun ruhen alle Wälder---||---294
118---||---244.32---||---In dich hab’ ich gehoffet, Herr---||---213
119---||---176.6---||---Christ, unser Herr, zum Jordan kam---||---45
120---||---103.6---||---Was mein Gott will, das g’scheh’ allzeit---||---348
121---||---244.40---||---Werde munter, mein Gemüte---||---361
122---||---85.6---||---Ist Gott mein Schild und Helfersmann---||---216
123---||---183.5---||---Helft mir Gott’s Güte preisen---||---126
124---||---268---||---Auf, auf, mein Herz, und du, mein ganzer Sinn---||---24
125---||---104.6---||---Allein Gott in der Höh’ sei Ehr’---||---12
126---||---18.5-l---||---Durch Adams Fall ist ganz verderbt---||---73
127---||---298---||---Dies sind die heil’gen zehn Gebot’---||---66
128---||---263---||---Alles ist an Gottes Segen---||---19
129---||---369---||---Keinen hat Gott verlassen---||---217
130---||---324---||---Meine Seel erhebet den Herrn---||---121
131---||---373---||---Liebster Jesu, wir sind hier---||---228
132---||---371---||---Kyrie, Gott Vater in Ewigkeit---||---225
133---||---437---||---Wir glauben all’ an einen Gott---||---382
134---||---301---||---Du, o schönes Weltgebäude---||---71
135---||---317---||---Gott der Vater wohn’ uns bei---||---113
136---||---332---||---Herr Jesu Christ, dich zu uns wend’---||---139
137---||---433---||---Wer Gott vertraut, hat wohl gebaut---||---366
138---||---64.8---||---Jesu, meine Freude---||---200
139---||---248.33-3---||---Warum sollt’ ich mich denn grämen---||---335
140---||---367---||---In allen meinen Taten---||---211
141---||---409---||---Seelenbräutigam---||---306
142---||---40.6---||---Schwing’ dich auf zu deinem Gott---||---305
143---||---368---||---In dulci jubilo---||---215
144---||---339---||---Wer in dem Schutz des Höchsten ist---||---151
145---||---420---||---Warum betrübst du dich, mein Herz---||---331
146---||---434---||---Wer nur den lieben Gott läßt walten---||---367
147---||---427---||---Wenn ich in Angst und Not---||---352
148---||---414---||---Uns ist ein Kindlein heut’ gebor’n---||---313
149---||---384---||---Nicht so traurig, nicht so sehr---||---253
150---||---27.6---||---Welt, ade! ich bin dein müde---||---350
151---||---379---||---Meinen Jesum laß’ ich nicht, Jesus---||---241
152---||---154.8---||---Meinen Jesum laß’ ich nicht, weil er sich für mich gegeben---||---244
153---||---262---||---Alle Menschen müssen sterben---||---17
154---||---293---||---Der du bist drei in Einigkeit---||---61
155---||---344---||---Hilf, Herr Jesu, laß gelingen---||---173
156---||---3.6---||---Ach Gott, wie manches Herzeleid---||---8
157---||---438---||---Wo Gott zum Haus nicht gibt sein’ Gunst---||---389
158---||---294---||---Der Tag der ist so freudenreich---||---62
159---||---264---||---Als der gütige Gott---||---20
160---||---64.2---||---Gelobet seist du, Jesu Christ---||---108
161---||---366---||---Ihr Gestirn’, ihr hohlen Lüfte---||---210
162---||---288---||---Das alte Jahr vergangen ist---||---55
163---||---313---||---Für Freuden laßt uns springen---||---106
164---||---326---||---Herr Gott, dich loben alle wir---||---129
165---||---401---||---O Lamm Gottes, unschuldig---||---285
166---||---309---||---Es steh’n vor Gottes Throne---||---93
167---||---300---||---Du großer Schmerzensmann---||---70
168---||---341---||---Heut’ ist, o Mensch, ein großer Trauertag---||---170
169---||---355---||---Jesu, der du selbst so wohl---||---189
170---||---62.6---||---Nun komm, der Heiden Heiland---||---265
171---||---408---||---Schaut, ihr Sünder---||---303
172---||---410---||---Sei gegrüßet, Jesu gütig---||---307
173---||---400---||---O Herzensangst, o Bangigkeit---||---284
174---||---364---||---Jesus Christus, unser Heiland, der den Tod überwand---||---207
175---||---365---||---Jesus, meine Zuversicht---||---208
176---||---306---||---Erstanden ist der heil’ge Christ---||---85
177---||---253---||---Ach bleib bei uns, Herr Jesu Christ---||---1
178---||---122.6---||---Das neugeborne Kindelein---||---57
179---||---140.7---||---Wachet auf, ruft uns die Stimme---||---329
180---||---265---||---Als Jesus Christus in der Nacht---||---21
181---||---319---||---Gott hat das Evangelium---||---116
182---||---14.5---||---Wär’ Gott nicht mit uns diese Zeit---||---330
183---||---388---||---Nun freut euch, lieben Christen, g’mein---||---261
184---||---4.8---||---Christ lag in Todesbanden---||---38
185---||---387---||---Nun freut euch, Gottes Kinder all’---||---260
186---||---254---||---Ach Gott, erhör’ mein Seufzen---||---2
187---||---370---||---Komm, Gott Schöpfer, heiliger Geist---||---218
188---||---349---||---Ich dank’ dir schon durch deinen Sohn---||---179
189---||---336---||---Herr Jesu Christ, wahr’r Mensch und Gott---||---146
190---||---337---||---Herr, nun laß in Friede---||---148
191---||---73.5---||---Von Gott will ich nicht lassen---||---328
192---||---321---||---Gottlob, es geht nunmehr zu Ende---||---118
193---||---424---||---Was bist du doch, o Seele, so betrübet---||---337
194---||---123.6---||---Liebster Immanuel, Herzog der Frommen---||---229
195---||---36.4-2---||---Wie schön leuchtet der Morgenstern---||---377
196---||---285---||---Da der Herr Christ zu Tische saß---||---52
197---||---276---||---Christ ist erstanden---||---36
198---||---283---||---Christus, der uns selig macht---||---48
199---||---343---||---Hilf, Gott, daß mir’s gelinge---||---172
200---||---284---||---Christus ist erstanden, hat überwunden---||---51
201---||---402---||---O Mensch, bewein’ dein’ Sünde groß---||---286
202---||---407---||---O wir armen Sünder---||---301
203---||---403---||---O Mensch, schau’ Jesum Christum an---||---287
204---||---166.6---||---Wer weiß, wie nahe mir mein Ende---||---372
205---||---328---||---Herr Gott, dich loben wir---||---133
206---||---412---||---So gibst du nun, mein Jesu, gute Nacht---||---310
207---||---295---||---Des Heil’gen Geistes reiche Gnad’---||---63
208---||---266---||---Als vierzig Tag’ nach Ostern war---||---22
209---||---299---||---Dir, dir, Jehova, will ich singen---||---67
210---||---275---||---Christe, du Beistand deiner Kreuzgemeine---||---0
211---||---426---||---Weltlich’ Ehr’ und zeitlich Gut---||---351
212---||---329---||---Herr, ich denk’ an jene Zeit---||---136
213---||---405---||---O wie selig seid ihr doch, ihr Frommen---||---299
214---||---383---||---Mitten wir im Leben sind---||---252
215---||---126.6---||---Verleih’ uns Frieden gnädiglich---||---321
216---||---60.5---||---Es ist genug, so nimm, Herr, meinen Geist---||---91
217---||---153.9---||---Ach Gott, wie manches Herzeleid---||---9
218---||---372---||---Laß, o Herr, dein Ohr sich neigen---||---226
219---||---406---||---O wie selig seid ihr doch, ihr Frommen---||---300
220---||---413---||---Sollt’ ich meinem Gott nicht singen---||---311
221---||---338---||---Herr, straf’ mich nicht in deinem Zorn---||---149
222---||---391---||---Nun preiset alle Gottes Barmherzigkeit---||---273
223---||---346---||---Ich dank’ dir, Gott, für all’ Wohltat---||---175
224---||---290---||---Das walt’ Gott Vater und Gott Sohn---||---58
225---||---316---||---Gott, der du selber bist das Licht---||---112
226---||---333---||---Herr Jesu Christ, du hast bereit’t---||---140
227---||---374---||---Lobet den Herren, denn er ist sehr freundlich---||---232
228---||---286---||---Danket dem Herren, denn er ist sehr freundlich---||---53
229---||---350---||---Ich danke dir, o Gott, in deinem Throne---||---180
230---||---273---||---Christ, der du bist der helle Tag---||---33
231---||---296---||---Die Nacht ist kommen---||---64
232---||---297---||---Die Sonn’ hat sich mit ihrem Glanz gewendet---||---65
233---||---154.3---||---Werde munter, mein Gemüte---||---365
234---||---320---||---Gott lebet noch---||---117
235---||---325---||---Heilig, heilig---||---123
236---||---335---||---O Jesu, du mein Bräutigam---||---145
237---||---423---||---Was betrübst du dich, mein Herze---||---336
238---||---310---||---Es wird schier der letzte Tag herkommen---||---94
239---||---292---||---Den Vater dort oben---||---60
240---||---396---||---Nun sich der Tag geendet hat---||---274
241---||---425---||---Was willst du dich, o meine Seele, kränken---||---349
242---||---435---||---Wie bist du, Seele, in mir so gar betrübt---||---374
243---||---356---||---Jesu, du mein liebstes Leben---||---190
244---||---357---||---Jesu, Jesu, du bist mein---||---191
245---||---274---||---Christe, der du bist Tag und Licht---||---34
246---||---411---||---Singt dem Herrn ein neues Lied---||---309
247---||---432---||---Wenn wir in höchsten Nöten sein---||---359
248---||---177.4---||---Sei Lob und Ehr’ dem höchsten Gut---||---89
249---||---260---||---Allein Gott in der Höh’ sei Ehr’---||---12
250---||---303---||---Ein’ feste Burg ist unser Gott---||---75
251---||---345---||---Ich bin ja, Herr, in deiner Macht---||---174
252---||---362---||---Jesu, nun sei gepreiset---||---203
253---||---77.6---||---Ach Gott, vom Himmel sieh’ darein---||---6
254---||---25.6---||---Weg, mein Herz, mit den Gedanken---||---101
255---||---64.4---||---Was frag’ ich nach der Welt---||---280
256---||---194.6---||---Jesu, deine tiefen Wunden---||---100
257---||---194.12---||---Nun laßt uns Gott, dem Herren---||---268
258---||---378---||---Mein’ Augen schließ’ ich jetzt in Gottes Namen zu---||---240
259---||---42.7---||---Verleih’ uns Frieden gnädiglich---||---322
259---||---42.7---||---Verleih’ uns Frieden gnädiglich---||---322
260---||---307---||---Es ist gewißlich an der Zeit---||---262
261---||---158.4---||---Christ lag in Todesbanden---||---40
261---||---279---||---Christ lag in Todesbanden---||---40
262---||---2.6---||---AAch Gott, vom Himmel sieh’ darein---||---7
263---||---227.1---||---Jesu, meine Freude---||---196
263---||---227.11---||---Jesu, meine Freude---||---196
264---||---361---||---Jesu, meines Herzens Freud’---||---202
265---||---144.6---||---Was mein Gott will, das g’scheh’ allzeit---||---343
266---||---48.7---||---Herr Jesu Christ, du höchstes Gut---||---144
267---||---90.5---||---Vater unser im Himmelreich---||---319
268---||---389---||---Nun lob’, mein’ Seel’, den Herren---||---269
269---||---353---||---Jesu, der du meine Seele---||---186
270---||---161.6---||---Befiehl du deine Wege---||---161
271---||---315---||---Gib dich zufrieden und sei stille---||---111
272---||---348---||---Ich dank’ dir, lieber Herre---||---177
273---||---80.8---||---Ein’ feste Burg ist unser Gott---||---76
274---||---397---||---O Ewigkeit, du Donnerwort---||---275
275---||---393---||---O Welt, sieh’ hier dein Leben---||---289
276---||---375---||---Lobt Gott, ihr Christen allzugleich---||---233
277---||---340---||---Herzlich lieb hab’ ich dich, o Herr---||---152
278---||---436---||---Wie schön leuchtet der Morgenstern---||---375
279---||---48.3---||---Ach Gott und Herr, wie groß und schwer---||---4
280---||---304---||---Eins ist not, ach Herr, dies Eine---||---77
281---||---89.6---||---Wo soll ich fliehen hin---||---26
282---||---25.6---||---Freu’ dich sehr, o meine Seele---||---101
283---||---227.7---||---Jesu, meine Freude---||---199
284---||---127.5---||---Herr Jesu Christ, wahr’r Mensch und Gott---||---147
285---||---257---||---Wär’ Gott nicht mit uns diese Zeit---||---388
286---||---270---||---Befiehl du deine Wege---||---157
287---||---331---||---Herr, ich habe mißgehandelt---||---138
288---||---314---||---Gelobet seist du, Jesu Christ---||---107
289---||---392---||---Nun ruhen alle Wälder---||---298
290---||---9.7---||---Es ist das Heil uns kommen her---||---87
291---||---94.8---||---Was frag’ ich nach der Welt---||---281
292---||---101.7---||---Nimm von uns, Herr, du treuer Gott---||---318
293---||---69.6-a---||---Was Gott tut, das ist wohlgetan---||---341
294---||---113.8---||---Herr Jesu Christ, du höchstes Gut---||---142
295---||---335---||---Herr Jesu Christ, mein’s Lebens Licht---||---145
296---||---390---||---Nun lob’, mein’ Seel’, den Herren---||---270
297---||---78.7---||---Jesu, der du meine Seele---||---188
298---||---19.7---||---Weg, mein Herz, mit den Gedanken---||---99
299---||---380---||---Meinen Jesum laß ich nicht---||---242
300---||---421---||---Warum betrübst du dich, mein Herz---||---332
301---||---114.7---||---Ach, lieben Christen, seid getrost---||---386
302---||---343---||---Hilf, Gott, daß mir’s gelinge---||---172
303---||---96.6---||---Herr Christ, der ein’ge Gott’ssohn---||---128
304---||---5.7---||---Auf meinen lieben Gott---||---28
305---||---36.4-2---||---Wie schön leuchtet der Morgenstern---||---377
306---||---402---||---O Mensch, bewein’ dein’ Sünde groß---||---286
307---||---283---||---Christus, der uns selig macht---||---48
308---||---3.6---||---Ach Gott, wie manches Herzeleid---||---8
309---||---267---||---Ein Lämmlein geht und trägt die Schuld---||---23
310---||---245.22---||---Mach’s mit mir, Gott, nach deiner Güt’---||---239
311---||---287---||---Dank sei Gott in der Höhe---||---54
312---||---398---||---O Gott, du frommer Gott---||---277
313---||---112.5---||---Allein Gott in der Höh’ sei Ehr’---||---14
314---||---289---||---Das alte Jahr vergangen ist---||---56
315---||---399---||---O Gott, du frommer Gott---||---282
316---||---282---||---Christus, der ist mein Leben---||---47
317---||---156.6---||---Herr, wie du willst, so schick’s mit mir---||---150
318---||---339---||---Herr, wie du willst, so schick’s mit mir---||---151
319---||---325---||---Sanctus, Sanctus Dominus Deus Sabaoth---||---123
320---||---323---||---Gott sei uns gnädig und barmherzig---||---120
321---||---40.3---||---Wir Christenleut’---||---379
322---||---428---||---Wenn mein Stündlein vorhanden ist---||---353
323---||---172.6---||---Wie schön leuchtet der Morgenstern---||---376
324---||---81.7---||---Jesu, meine Freude---||---197
325---||---83.5---||---Mit Fried’ und Freud’ ich fahr’ dahin---||---250
326---||---104.6---||---Allein Gott in der Höh’ sei Ehr’---||---13
327---||---190.7---||---Jesu, nun sei gepreiset---||---205
328---||---373---||---Liebster Jesu, wir sind hier---||---228
329---||---251---||---Sei Lob und Ehr’ dem höchsten Gut---||---89
330---||---252---||---Nun danket alle Gott---||---258
331---||---136.6---||---Wo soll ich fliehen hin---||---27
332---||---418---||---Von Gott will ich nicht lassen---||---325
333---||---69.6---||---Es woll’ uns Gott genädig sein---||---97
334---||---327---||---Vor deinen Thron tret’ ich hiermit---||---132
335---||---155.5---||---Es ist das Heil uns kommen her---||---88
336---||---258---||---Wo Gott der Herr nicht bei uns hält---||---383
337---||---24.6---||---O Gott, du frommer Gott---||---282
338---||---145-a---||---Jesus, meine Zuversicht---||---209
339---||---179.6---||---Wer nur den lieben Gott läßt walten---||---371
340---||---272---||---Befiehl du deine Wege---||---32
341---||---37.6---||---Ich dank’ dir, lieber Herre---||---178
342---||---376---||---Lobt Gott, ihr Christen, allzugleich---||---234
343---||---11.6---||---Nun lieget alles unter dir---||---82
344---||---248.23-2---||---Vom Himmel hoch, da komm’ ich her---||---0
345---||---248.5---||---O Haupt voll Blut und Wunden---||---165
346---||---381---||---Meines Lebens letzte Zeit---||---248
347---||---250---||---Was Gott tut, das ist wohlgetan---||---339
348---||---70.11---||---Meinen Jesum laß’ ich nicht, weil---||---243
349---||---103.6---||---Ich hab’ in Gottes Herz und Sinn---||---348
350---||---360---||---Jesu, meiner Seelen Wonne---||---364
351---||---430---||---Wenn mein Stündlein vorhanden ist---||---355
352---||---312---||---Es woll’ uns Gott genädig sein---||---96
353---||---112.5---||---Der Herr ist mein getreuer Hirt---||---14
354---||---117.4---||---Sei Lob und Ehr’ dem höchsten Gut---||---89
355---||---44.7---||---Nun ruhen alle Wälder---||---296
356---||---358---||---Jesu, meine Freude---||---195
357---||---422---||---Warum sollt’ ich mich denn grämen---||---334
358---||---10.7---||---Meine Seel’ erhebt den Herren---||---122
359---||---261---||---Allein zu dir, Herr Jesu Christ---||---15
360---||---248.35-3---||---Wir Christenleut’---||---381
361---||---248.12-2---||---Du Lebensfürst, Herr Jesu Christ---||---80
362---||---248.59-6---||---Es ist gewißlich an der Zeit---||---263
363---||---395---||---O Welt, sieh’ hier dein Leben---||---291
364---||---417---||---Von Gott will ich nicht lassen---||---324
365---||---359---||---Jesu, meiner Seelen Wonne---||---363
366---||---394---||---O Welt, sieh’ hier dein Leben---||---290
367---||---271---||---Befiehl du deine Wege---||---158
368---||---248.42-4---||---Hilf, Herr Jesu, laß gelingen---||---0
369---||---354---||---Jesu, der du meine Seele---||---187
370---||---74.8---||---Kommt her zu mir, spricht Gottes Sohn---||---223
371---||---278---||---Christ lag in Todesbanden---||---39'''
for line in allCat.splitlines():
line = line.strip()
(riemenschneider, bwv, title, kalmus) = line.split('---||---')
lineDict = {'title': title, 'bwv': bwv, 'kalmus': int(kalmus),
'riemenschneider': int(riemenschneider)}
self.byTitle[title] = lineDict
self.byBWV[bwv] = lineDict
self.byKalmus[int(kalmus)] = lineDict
self.byRiemenschneider[int(riemenschneider)] = lineDict
[docs]
class Iterator:
# noinspection SpellCheckingInspection
'''
This is a class for iterating over many Bach Chorales. It is designed
to make it easier to use
one of music21's most accessible datasets. It will parse each chorale
in the selected
range in a lazy fashion so that a list of chorales need not be parsed up front. To select a
range of chorales, first select a .numberingSystem
('riemenschneider', 'bwv', 'kalmus', 'budapest',
'baerenreiter', or 'title'). Then, set .currentNumber to the lowest
number in the range and
.highestNumber to the highest in the range. This can either be done by catalogue number
(iterationType = 'number') or by index (iterationType = 'index').
Note that these numbers are 1-indexed (as most catalogues are) and
unlike Python's range feature, the final number is included.
Changing the numberingSystem will reset the iterator and
change the range values to span the entire numberList.
The iterator can be initialized with three parameters
(currentNumber, highestNumber, numberingSystem). For example
corpus.chorales.Iterator(1, 26,'riemenschneider') iterates
through the riemenschneider numbered chorales from 1 to 26.
Additionally, the following keywords can be set:
* `returnType` = either 'stream' (default) or 'filename'
* `iterationType` = either 'number' or 'index'
* `titleList` = [list, of, titles]
* `numberList` = [list, of, numbers]
>>> for chorale in corpus.chorales.Iterator(1, 4, returnType='filename'):
... print(chorale)
bach/bwv269
bach/bwv347
bach/bwv153.1
bach/bwv86.6
>>> BCI = corpus.chorales.Iterator()
>>> BCI.numberingSystem
'riemenschneider'
>>> BCI.currentNumber
1
>>> BCI.highestNumber
371
An Exception will be raised if the number set is not in the
numbering system selected, or if the numbering system selected is not valid.
>>> BCI.currentNumber = 377
Traceback (most recent call last):
...
music21.corpus.chorales.BachException: 377 does not correspond to a
chorale in the riemenschneider numbering system
>>> BCI.numberingSystem = 'not a numbering system'
Traceback (most recent call last):
...
music21.corpus.chorales.BachException: not a numbering system is not a valid
numbering system for Bach Chorales.
If the numberingSystem 'title' is selected, the iterator must be
initialized with a list of titles.
It will iterate through the titles in the order of the list.
>>> BCI.numberingSystem = 'title'
>>> BCI.returnType = 'filename'
>>> BCI.titleList = ['Jesu, meine Freude',
... 'Gott hat das Evangelium',
... 'Not a Chorale']
'Not a Chorale' will be skipped because it is not a recognized title.
>>> for chorale in BCI:
... print(chorale)
bach/bwv358
bach/bwv319
The numberList, which, by default, includes all chorales in the chosen numberingSystem,
can be set like the titleList. In the following example,
note that the first chorale in the given
numberList will not be part of the iteration because the
first currentNumber is set to 2 at the
start by the first argument. (If `iterationType=='index'`,
setting the currentNumber to 1 and the highestNumber to 7
would have the same effect as the given example.
>>> BCI = corpus.chorales.Iterator(2, 371, numberingSystem='riemenschneider',
... numberList=[1, 2, 3, 4, 6, 190, 371, 500],
... returnType='filename')
500 will be skipped because it is not in the numberingSystem riemenschneider
>>> for chorale in BCI:
... print(chorale)
bach/bwv347
bach/bwv153.1
bach/bwv86.6
bach/bwv281
bach/bwv337
bach/bwv278
Elements in the iterator can be accessed by index as well as slice.
>>> for chorale in corpus.chorales.Iterator(returnType='filename')[4:10]:
... print(chorale)
bach/bwv86.6
bach/bwv267
bach/bwv281
bach/bwv17.7
bach/bwv40.8
bach/bwv248.12-2
bach/bwv38.6
>>> print(corpus.chorales.Iterator(returnType='filename')[55])
bach/bwv121.6
For the first 20 chorales in the Riemenschneider numbering system, there are professionally
annotated roman numeral analyses in romanText format, courtesy of Dmitri Tymoczko of Princeton
University. To get them as an additional part to the score set returnType to "stream", and
add a keyword "analysis = True":
If chorales are accessed through the Iterator(), the metadata.title attribute will have the
correct German title. This is different from the metadata returned by the parser which does
not give the German title but rather the BWV number.
>>> corpus.chorales.Iterator(returnType='stream')[1].metadata.title
'Ich dank’ dir, lieber Herre'
'''
_DOC_ORDER = ['numberingSystem', 'currentNumber', 'highestNumber',
'titleList', 'numberList', 'returnType', 'iterationType']
def __init__(self,
currentNumber: int|None = None,
highestNumber: int|None = None,
*,
numberingSystem: str = 'riemenschneider',
returnType: str = 'stream',
iterationType: str = 'number',
analysis: bool = False,
numberList: list[int]|None = None,
titleList: list[str]|None = None,
):
'''
By default: numberingSystem = 'riemenschneider', currentNumber = 1,
highestNumber = 371, iterationType = 'number',
and returnType = 'stream'
Notes:
Two ChoraleList objects are created. These should probably
be consolidated, but they contain
different information at this time. Also, there are problems
with entries in ChoraleListRKBWV
that need to be addressed. Namely, chorales that share the
same key (and thus overwrite each other)
and chorales that do not appear to be in the corpus at all.
'''
self._currentIndex = None
self._highestIndex = None
self._titleList: list[str] = []
self._numberList = None
self._numberingSystem = None
self._returnType = 'stream'
self._iterationType = 'number'
self.analysis = analysis
self._choraleList1 = ChoraleList() # For budapest, baerenreiter
self._choraleList2 = ChoraleListRKBWV() # for kalmus, riemenschneider, title, and bwv
self.numberingSystem = numberingSystem # This assignment must come before the keywords
self.returnType = returnType
self.iterationType = iterationType
if numberList is not None:
# TODO: overly complex order of setting
self.numberList = numberList
if titleList is not None:
# TODO: overly complex order of setting
self.titleList = titleList
# These assignments must come after .iterationType
self.currentNumber = currentNumber
self.highestNumber = highestNumber
def __iter__(self):
return self
def __len__(self):
if self.numberingSystem is None:
raise BachException('NumberingSystem not set. Cannot find a length.')
if self.numberingSystem == 'title':
return len(self.titleList)
else:
return len(self.numberList)
[docs]
def __getitem__(self, key):
if isinstance(key, slice):
returnObj = copy.deepcopy(self)
returnObj.currentNumber = key.start
returnObj.highestNumber = key.stop
return returnObj
else:
if self.numberingSystem is None:
raise BachException('NumberingSystem not set. Cannot find index.')
if self.numberingSystem == 'title':
if key in range(len(self.titleList)):
return self._returnChorale(key)
else:
raise IndexError(f'{key} is not in the range of the titleList.')
elif self.iterationType == 'index' or self.numberingSystem == 'bwv':
if key in range(len(self.numberList)):
return self._returnChorale(key)
else:
raise IndexError(f'{key} is not in the range of the numberList.')
elif self.iterationType == 'number':
if key in self.numberList:
return self._returnChorale(key)
else:
raise IndexError(f'{key} is not in the numberList')
def __next__(self):
'''
At each iteration, the _currentIndex is incremented, and the
next chorale is parsed based upon its bwv number which is queried via
whatever the current numberingSystem is set to. If the
_currentIndex becomes higher than the _highestIndex, the iteration stops.
'''
if self._currentIndex > self._highestIndex:
raise StopIteration()
nextChorale = self._returnChorale()
self._currentIndex += 1
return nextChorale
# ### Private Methods
def _returnChorale(self, choraleIndex=None):
# noinspection SpellCheckingInspection
'''
This returns a chorale based upon the _currentIndex
and the numberingSystem. The numberList is the list
of valid numbers in the selected numbering system.
The _currentIndex is the location in the numberList
of the current iteration. If the numberingSystem == 'title',
the chorale is instead queried by Title
from the titleList and the numberList is ignored.
>>> BCI = corpus.chorales.Iterator()
>>> riemenschneider1 = BCI._returnChorale()
>>> riemenschneider1.metadata.title
'Aus meines Herzens Grunde'
>>> BCI.currentNumber = BCI.highestNumber
>>> riemenschneider371 = BCI._returnChorale()
>>> riemenschneider371.metadata.title
'Christ lag in Todesbanden'
>>> BCI.numberingSystem = 'title'
>>> BCI._returnChorale()
Traceback (most recent call last):
...
music21.corpus.chorales.BachException: Cannot parse Chorales because no titles to parse.
>>> BCI.titleList = ['Christ lag in Todesbanden', 'Aus meines Herzens Grunde']
>>> christlag = BCI._returnChorale()
>>> christlag.show('text')
{0.0} <music21.text.TextBox 'PDF © 2004...'>
{0.0} <music21.text.TextBox 'BWV 278'>
{0.0} <music21.metadata.Metadata object at ...>
{0.0} <music21.stream.Part Soprano>
{0.0} <music21.instrument.Instrument 'P1: Soprano: '>
{0.0} <music21.stream.Measure 0 offset=0.0>
{0.0} <music21.layout.SystemLayout>
{0.0} <music21.clef.TrebleClef>
{0.0} <music21.key.Key of e minor>
{0.0} <music21.meter.TimeSignature 4/4>
{0.0} <music21.note.Note B>
...
>>> christlag.metadata.title
'Christ lag in Todesbanden'
>>> BCI.currentNumber += 1
>>> ausMeines = BCI._returnChorale()
>>> ausMeines.metadata.title
'Aus meines Herzens Grunde'
>>> BCI.numberingSystem = 'kalmus'
>>> BCI.returnType = 'filename'
>>> BCI._returnChorale()
'bach/bwv253'
>>> BCI._returnChorale(3)
'bach/bwv48.3'
'''
from music21 import corpus
if choraleIndex is None:
choraleIndex = self._currentIndex
if self.numberingSystem is None:
raise BachException('Cannot parse Chorales because no .numberingSystem set.')
if self.numberingSystem == 'title':
if not self._titleList:
raise BachException('Cannot parse Chorales because no titles to parse.')
title = self.titleList[choraleIndex]
filename = 'bach/bwv' + str(self._choraleList2.byTitle[title]['bwv'])
else:
choraleNumber = self._numberList[choraleIndex]
if self.numberingSystem == 'riemenschneider':
filename = 'bach/bwv' + str(
self._choraleList2.byRiemenschneider[choraleNumber]['bwv'])
title = self._choraleList2.byRiemenschneider[choraleNumber]['title']
elif self.numberingSystem == 'baerenreiter':
filename = 'bach/bwv' + str(self._choraleList1.byBaerenreiter[choraleNumber]['bwv'])
title = self._choraleList1.byBaerenreiter[choraleNumber]['title']
elif self.numberingSystem == 'budapest':
filename = 'bach/bwv' + str(self._choraleList1.byBudapest[choraleNumber]['bwv'])
title = self._choraleList1.byBudapest[choraleNumber]['title']
elif self.numberingSystem == 'kalmus':
filename = 'bach/bwv' + str(self._choraleList2.byKalmus[choraleNumber]['bwv'])
title = self._choraleList2.byKalmus[choraleNumber]['title']
else:
filename = 'bach/bwv' + str(choraleNumber)
title = str(choraleNumber)
if self._returnType == 'stream':
chorale = corpus.parse(filename)
if self.numberingSystem == 'riemenschneider' and self.analysis:
# noinspection PyBroadException
try:
nextIndex = self._currentIndex + 1
riemenschneiderName = ('bach/choraleAnalyses/'
f'riemenschneider{nextIndex:03d}.rntxt')
analysis = corpus.parse(riemenschneiderName)
if analysis is not None:
chorale.insert(0, analysis.parts[0])
except Exception: # pylint: disable=broad-exception-caught
pass # fail silently
# Store the correct title in metadata (replacing the chorale number as it is parsed)
if chorale.metadata is None:
chorale.metadata = metadata.Metadata()
chorale.metadata.title = title
chorale.metadata.number = self._currentIndex + 1
return chorale
elif self._returnType == 'filename':
return filename
else:
raise ValueError(
f'An unexpected returnType {self._returnType} was introduced. '
+ 'This should not happen.'
)
@staticmethod
def _bwvSort(bwv: str) -> float:
'''
This takes a string such as '69.6-a' and returns a float for sorting.
'''
out = ''
for char in bwv:
if char.isdigit() or char == '.':
out += char
elif char == '-':
if '.' in out:
out += '0'
else:
out += '.0'
elif char.isalpha():
# Shift left so that 'a' = 10
code = ord(char) - 87
out += str(code)
return float(out)
def _initializeNumberList(self):
'''
This creates the _numberList which the iterator iterates through.
It is called each time the numberingSystem
changes and also whenever the titleList is set. The numbers are
drawn from the chorale search objects,
so any mistakes should be corrected there. Additionally, the
initial values of currentNumber and highestNumber
are set to the lowest and highest numbers in the selected list.
If the numberingSystem == 'title', the _numberList
is set to None, and the currentNumber and highestNumber are set
to the lowest and highest indices in the titleList.
>>> BCI = corpus.chorales.Iterator()
>>> BCI.numberingSystem = 'riemenschneider'
>>> (BCI._numberList[0], BCI._numberList[40], BCI._numberList[-1])
(1, 41, 371)
>>> BCI.numberingSystem = 'kalmus'
>>> (BCI._numberList[0], BCI._numberList[40], BCI._numberList[-1])
(1, 48, 389)
>>> BCI.numberingSystem = 'bwv'
>>> (BCI._numberList[14], BCI._numberList[96], BCI._numberList[-1])
('18.5-w', '145-a', '438')
>>> BCI.numberingSystem = 'budapest'
>>> (BCI._numberList[0], BCI._numberList[40], BCI._numberList[-1])
(0, 68, 388)
>>> BCI.numberingSystem = 'baerenreiter'
>>> (BCI._numberList[0], BCI._numberList[40], BCI._numberList[-1])
(1, 134, 370)
>>> BCI.numberingSystem = 'title'
>>> BCI._numberList
'''
if self._numberingSystem == 'title':
self._numberList = None
self.currentNumber = 0
if not self._titleList:
self.highestNumber = 0
else:
self.highestNumber = len(self.titleList) - 1
else:
if self._numberingSystem == 'riemenschneider':
self._numberList = []
for n in sorted(self._choraleList2.byRiemenschneider):
self._numberList.append(n)
# addList = [26, 91, 259, 261, 263]
# These are the numbers that appear twice and thus stored only once.
elif self._numberingSystem == 'kalmus':
self._numberList = []
for n in sorted(self._choraleList2.byKalmus):
# Need to skip K0 because it is not actually in the number system.
# Denotes chorales that do not have a Kalmus number.
if not n:
continue
self._numberList.append(n)
elif self._numberingSystem == 'bwv':
self._numberList = []
for n in sorted(self._choraleList2.byBWV, key=Iterator._bwvSort):
self._numberList.append(n)
elif self._numberingSystem == 'budapest':
self._numberList = []
for n in sorted(self._choraleList1.byBudapest):
self._numberList.append(n)
elif self._numberingSystem == 'baerenreiter':
self._numberList = []
for n in sorted(self._choraleList1.byBaerenreiter):
self._numberList.append(n)
if self.iterationType == 'number':
self.currentNumber = self._numberList[0]
self.highestNumber = self._numberList[-1]
else:
self.currentNumber = 0
self.highestNumber = len(self._numberList) - 1
# ---Properties
# - Numbering System
def _getNumberingSystem(self):
if self._numberingSystem is None:
raise BachException('Numbering System not set.')
return self._numberingSystem
def _setNumberingSystem(self, value):
if value in ['bwv', 'kalmus', 'baerenreiter', 'budapest', 'riemenschneider']:
self._numberingSystem = value
# initializes the number list and sets current and highest numbers / indices
self._initializeNumberList()
elif value == 'title':
self._numberingSystem = 'title'
self.titleList = []
else:
raise BachException(f'{value} is not a valid numbering system for Bach Chorales.')
numberingSystem = property(_getNumberingSystem, _setNumberingSystem,
doc='''
This property determines which numbering
system to iterate through chorales with.
It can be set to 'bwv', 'kalmus', 'baerenreiter',
'budapest', or 'riemenschneider'.
It can also be set to 'title' in which case the
iterator needs to be given a list
of chorale titles in .titleList. At this time,
the titles need to be exactly as they
appear in the dictionary it queries.''')
# - Title List
@property
def titleList(self) -> list[str]:
'''
A list of titles to iterate over
if `.numberingSystem` is set to 'title'.
'''
return self._titleList
@titleList.setter
def titleList(self, value: list[str]):
if not common.isIterable(value):
raise BachException(f'{value!r} must be a list.')
self._titleList = []
for v in value:
if v in self._choraleList2.byTitle:
self._titleList.append(v)
else:
print(f'{v!r} will be skipped because it is not a recognized title.')
self._initializeNumberList()
# - Number List
@property
def numberList(self):
'''
Allows access to the catalogue numbers
(or indices if iterationType == 'index')
that will be iterated over. This can be
set to a specific list of numbers.
The list will be sorted.
'''
if self._numberList is None:
return []
else:
return self._numberList
@numberList.setter
def numberList(self, value):
if not isinstance(value, list):
raise BachException(f'{value!r} must be a list.')
if self._numberingSystem == 'title':
self._numberList = None
raise BachException("Cannot set numberList when .numberingSystem == 'title'")
if self._numberingSystem == 'riemenschneider':
self._numberList = []
for v in sorted(value):
if v in self._choraleList2.byRiemenschneider:
self._numberList.append(v)
else:
print(
f'{v} will be skipped because it is not in the numberingSystem '
+ self.numberingSystem
)
elif self._numberingSystem == 'kalmus':
self._numberList = []
for v in sorted(value):
if v in self._choraleList2.byKalmus and v != 0:
self._numberList.append(v)
else:
print(
f'{v} will be skipped because it is not in the numberingSystem '
+ self.numberingSystem
)
elif self._numberingSystem == 'bwv':
self._numberList = []
for v in sorted(value):
if v in self._choraleList2.byBWV:
self._numberList.append(v)
else:
print(
f'{v} will be skipped because it is not in the numberingSystem '
+ self.numberingSystem
)
elif self._numberingSystem == 'budapest':
self._numberList = []
for v in sorted(value):
if v in self._choraleList1.byBudapest:
self._numberList.append(v)
else:
print(
f'{v} will be skipped because it is not in the numberingSystem '
+ self.numberingSystem
)
elif self._numberingSystem == 'baerenreiter':
self._numberList = []
for v in sorted(value):
if v in self._choraleList1.byBaerenreiter:
self._numberList.append(v)
else:
print(
f'{v} will be skipped because it is not in the numberingSystem '
+ self.numberingSystem
)
if self._numberList is None:
self.currentNumber = 0
self.highestNumber = 0
elif self.iterationType == 'number':
self.currentNumber = self._numberList[0]
self.highestNumber = self._numberList[-1]
else:
self.currentNumber = 0
self.highestNumber = len(self._numberList) - 1
# - Current Number
@property
def currentNumber(self):
'''
The currentNumber is the number of the
chorale (in the set numberingSystem) for the
next chorale to be parsed by the iterator.
It is initially the first chorale in whatever
numberingSystem is set, but it can be changed
to any other number in the numberingSystem
as desired as long as it does not go above
the highestNumber which is the boundary
of the iteration.
'''
if self._iterationType == 'index' or self._numberingSystem == 'title':
return self._currentIndex
else:
return self._numberList[self._currentIndex]
@currentNumber.setter
def currentNumber(self, value):
if self._numberingSystem is None:
raise ValueError('Numbering System is not set.')
if self._iterationType == 'number':
if self._numberingSystem == 'title':
if not self._titleList:
self._currentIndex = 0
return
else:
if value in range(len(self.titleList)):
if self._highestIndex is None or value <= self._highestIndex:
self._currentIndex = value
else:
raise BachException(
f'{value} is greater than the highestNumber {self.highestNumber}')
else:
raise BachException(
f'{value} is not an index in the range of the titleList')
else:
if value is None:
self._currentIndex = 0
elif value in self._numberList:
newIndex = self._numberList.index(value)
if self._highestIndex is None or newIndex <= self._highestIndex:
self._currentIndex = newIndex
else:
raise BachException(
f'{value} is greater than the HighestNumber {self.highestNumber}')
else:
raise BachException(
f'{value} does not correspond to a chorale in the '
f'{self.numberingSystem} numbering system'
)
elif self._iterationType == 'index':
if self._numberingSystem == 'title':
if not self._titleList:
self._currentIndex = 0
return
else:
if value in range(len(self.titleList)):
if self._highestIndex is None or value <= self._highestIndex:
self._currentIndex = value
else:
raise BachException(
f'{value} is greater than the highestNumber {self.highestNumber}')
else:
raise BachException(
f'{value} is not an index in the range of the titleList')
else:
if value is None:
self._currentIndex = 0
elif value in range(len(self._numberList)):
newIndex = value
if self._highestIndex is None or newIndex <= self._highestIndex:
self._currentIndex = newIndex
else:
raise BachException(
f'{value} is greater than the HighestNumber {self.highestNumber}')
else:
raise BachException(
f'{value} does not correspond to a chorale in the '
+ f'{self.numberingSystem} numbering system'
)
# - Highest Number
@property
def highestNumber(self):
'''
The highestNumber is the number of the chorale
(in the set numberingSystem) for the
last chorale to be parsed by the iterator.
It is initially the highest numbered chorale in whatever
numberingSystem is set, but it can be changed
to any other number in the numberingSystem
as desired as long as it does not go below
the currentNumber of the iteration.
'''
if self.iterationType == 'index' or self._numberingSystem == 'title':
return self._highestIndex
else:
return self._numberList[self._highestIndex]
@highestNumber.setter
def highestNumber(self, value):
if self._numberingSystem is None:
raise ValueError('Numbering System is not set.')
if self.iterationType == 'number':
if self._numberingSystem == 'title':
if not self._titleList:
self._highestIndex = 0
return
else:
if value in range(len(self.titleList)):
if self._currentIndex is None or value >= self._currentIndex:
self._highestIndex = value
else:
raise BachException(
f'{value} is less than the currentNumber {self.currentNumber}'
)
else:
raise BachException(
f'{value} is not an index in the range of the titleList')
else:
if value is None:
self._highestIndex = len(self._numberList) - 1
elif value in self._numberList:
newIndex = self._numberList.index(value)
if self._currentIndex is None or newIndex >= self._currentIndex:
self._highestIndex = newIndex
else:
raise BachException(
f'{value} is less than the CurrentNumber {self.currentNumber}')
else:
raise BachException(
f'{value} does not correspond to a chorale in the '
+ f'{self.numberingSystem} numbering system'
)
elif self.iterationType == 'index':
if self._numberingSystem == 'title':
if not self._titleList:
self._highestIndex = 0
return
else:
if value in range(len(self.titleList)):
if self._currentIndex is None or value >= self._currentIndex:
self._highestIndex = value
else:
raise BachException(
f'{value} is less than the currentNumber {self.currentNumber}')
else:
raise BachException(
f'{value} is not an index in the range of the titleList')
else:
if value is None:
self._highestIndex = len(self._numberList) - 1
elif value in range(len(self._numberList)):
newIndex = value
if self._currentIndex is None or newIndex >= self._currentIndex:
self._highestIndex = newIndex
else:
raise BachException(
f'{value} is less than the CurrentNumber {self.currentNumber}')
else:
raise BachException(
f'{value} does not correspond to a chorale in the '
f'{self.numberingSystem} numbering system'
)
# - Return Type
@property
def returnType(self):
'''
This property determines what the iterator
returns; 'stream' is the default and causes the iterator to parse
each chorale. If this is set to 'filename', the
iterator will return the filename of each chorale but not
parse it.
'''
return self._returnType
@returnType.setter
def returnType(self, value):
if value in ['stream', 'filename']:
self._returnType = value
else:
raise BachException(f'{value} is not a proper returnType for this iterator. '
+ "Only 'stream' and 'filename' are acceptable.")
# - Iteration Type
@property
def iterationType(self):
'''
This property determines how boundary numbers are
interpreted, as indices or as catalogue numbers.
'''
return self._iterationType
@iterationType.setter
def iterationType(self, value):
if value in ['number', 'index']:
self._iterationType = value
self._initializeNumberList()
else:
raise BachException(
f'{value} is not a proper iterationType for this iterator. '
+ "Only 'number' and 'index' are acceptable.")
[docs]
def getByTitle(title):
# noinspection SpellCheckingInspection
'''
Return a Chorale by title (or title fragment) or None
>>> germanTitle = "Sach' Gott heimgestellt"
>>> c = corpus.chorales.getByTitle(germanTitle)
>>> c.metadata.title
"Ich hab' mein' Sach' Gott heimgestellt"
'''
from music21 import corpus
titleSearch = title.lower()
cl = ChoraleList()
clBWV = None
foundTitle = None
for cTitle in cl.byTitle:
if titleSearch in cTitle.lower():
clBWV = str(cl.byTitle[cTitle]['bwv'])
foundTitle = cTitle
break
else:
return None
cl = corpus.parse('bach/bwv' + clBWV)
if cl.metadata is None:
cl.metadata = metadata.Metadata()
cl.metadata.title = foundTitle
return cl
class BachException(exceptions21.Music21Exception):
pass
class TestExternal(unittest.TestCase):
show = True
def testGetRiemenschneider1(self):
from music21 import corpus
for chorale in corpus.chorales.Iterator(1, 2,
numberingSystem='riemenschneider', analysis=True):
if self.show:
chorale.show()
if __name__ == '__main__':
import music21
music21.mainTest() # External)