Seite anzeigenÄltere VersionenLinks hierherNach oben Diese Seite ist nicht editierbar. Sie können den Quelltext sehen, jedoch nicht verändern. Kontaktieren Sie den Administrator, wenn Sie glauben, dass hier ein Fehler vorliegt. 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: <code>from music21 import * b = corpus.parse('bach/bwv66.6') beispiel = b.parts[0] beispiel.show()</code> {{:wiki:interval-histogram-bsp1.png?680|}} Den Tonumfang oder Ambitus einer Stimme kann mit [[http://web.mit.edu/music21/doc/moduleReference/moduleStream.html#music21.stream.Stream.analyze|music21.stream.analyze]] Modul ermittelt werden: <code>beispiel.analyze('range') </code> {{:wiki:interval-histogram-bsp2.png?270|}} 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: <code>beispiel.analyze('range').semitones</code> <code>beispiel.analyze('range').niceName</code> {{:wiki:interval-histogram-bsp3.png?285|}} Um den Intervallverlauf anzuzeigen verwendet man das Modul [[http://web.mit.edu/music21/doc/moduleReference/moduleAnalysisDiscrete.html?highlight=melodic#music21.analysis.discrete.MelodicIntervalDiversity|music21.analysis.discrete.MelodicIntervalDiversity]] <code>intverlauf = analysis.discrete.MelodicIntervalDiversity().countMelodicIntervals(beispiel) for interval in intverlauf: print(interval + ":", intverlauf[interval][1])</code> {{:wiki:interval-histogram-bsp4.png?650|}} 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 [[http://web.mit.edu/music21/doc/moduleReference/moduleAnalysisSegmentByRests.html#music21.analysis.segmentByRests.Segmenter.getIntervalList|music21.analysis.segmentByRests.Segmenter.getIntervalList]] Modul verwenden: <code>intList = analysis.segmentByRests.Segmenter.getIntervalList(beispiel) [x.name for x in intList]</code> {{:wiki:interval-histogram-bsp5.png?500|}} Als Ergebnis bekommen wir die Auflistung aller Intervalle entsprechend ihrer Reihenfolge im untersuchten Beispiel. Diese Liste kann nun mit Python Modul [[https://docs.python.org/3/library/collections.html#collections.Counter|collections.Counter]] geordnet werden: <code>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())</code> {{:wiki:interval-histogram-bsp6.png?550|}} Diese Daten können nun durch ein Histogramm in Matplotlib und NumPy visualisiert werden: <code>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()</code> {{:wiki:interval-histogram-bsp7.png?600|}} interval-histogram.txt Zuletzt geändert: 2021/04/08 10:17von egor