Zeige QuelltextÄltere VersionenLinks hierherNach oben Teilen per Teilen per... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer Reddit TeamsLetzte ÄnderungenPer E-Mail sendenDruckenPermalink × Es können zahlreiche Informationen zum Intervallverlauf eines Musikbeispiels durch music21 bereitgestellt werden. Dazu gehören vor allem der Tonumfang sowie Verlauf der Intervallschritte. Als Beispiel nehmen wir die Sopran-Stimme aus einem Choral von J.S.Bach: from music21 import * b = corpus.parse('bach/bwv66.6') beispiel = b.parts[0] beispiel.show() Den Tonumfang oder Ambitus einer Stimme kann mit music21.stream.analyze Modul ermittelt werden: beispiel.analyze('range') Die Ausgabe erfolgt dabei direkt als die Angabe des Intervalls (Kurzbezeichnung). Optional kann der Tonumfang ebenfalls in Halbtonschritten oder als eine ausgeschriebene Intervallbezeichnung ausgegeben werden: beispiel.analyze('range').semitones beispiel.analyze('range').niceName Um den Intervallverlauf anzuzeigen verwendet man das Modul music21.analysis.discrete.MelodicIntervalDiversity intverlauf = analysis.discrete.MelodicIntervalDiversity().countMelodicIntervals(beispiel) for interval in intverlauf: print(interval + ":", intverlauf[interval][1]) Wie man sieht, werden bei den Ergebnissen nicht die jeweiligen Notenwiederholungen (Unison fehlt komplett als ein Wert) berücksichtigt (sehe T.5, T. 6, T.9 in Notenbeispiel) . Will man die Tonwiederholungen in die Analyse aufnehmen, muss man music21.analysis.segmentByRests.Segmenter.getIntervalList Modul verwenden: intList = analysis.segmentByRests.Segmenter.getIntervalList(beispiel) [x.name for x in intList] Als Ergebnis bekommen wir die Auflistung aller Intervalle entsprechend ihrer Reihenfolge im untersuchten Beispiel. Diese Liste kann nun mit Python Modul collections.Counter geordnet werden: import collections values = ['M2', 'M2', 'M2', 'M2', 'm3', 'm3', 'M2', 'M2', 'M3', 'M3', 'M2', 'm3', 'M2', 'm3', 'M2', 'P1', 'P4', 'M2', 'P4', 'M2', 'M2', 'P1', 'M3', 'M2', 'M2', 'M3', 'm2', 'M2', 'M2', 'M2', 'P1', 'P1', 'P1', 'P1', 'm2', 'm2'] counter=collections.Counter(values) print(counter.most_common()) Diese Daten können nun durch ein Histogramm in Matplotlib und NumPy visualisiert werden: import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() note = ('P1', 'm2', 'M2', 'm3', 'M3', 'P4', 'd5', 'P5', 'm6', 'M6', 'm7', 'M7') x_pos = np.arange(len(note)) values = (6, 3, 17, 4, 4, 2, 0, 0, 0, 0, 0, 0) ax.bar(x_pos, values, align='center', color='salmon', ecolor='black') ax.set_xticks(x_pos) ax.set_xticklabels(note) ax.set_title('Interval Histogram') plt.show() interval-histogram.txt Zuletzt geändert: 2021/04/08 10:17von egor