Kennen Sie das Hanon Piano Textbook? Viele Menschen, die Erfahrung im Klavierspielen haben, haben möglicherweise unangenehme Erinnerungen. Das Hanon Piano Textbook ist ein Lehrbuch, das Ihnen die Grundlagen des Klavierspiels vermittelt. Sehen ist Glauben, also auf jeden Fall Video wird abgespielt und [Punktzahl](https://ameblo.jp/manana888/entry- Schauen Sie sich 11753162091.html an. Dieses Mal wollte ich automatisch Songs wie Nr. 1 bis 20 in den Hanon Piano-Lehrbüchern erstellen.
Die verwendete Sprache ist ** Python **. Ich habe auch ** music21 ** verwendet, eine vom MIT entwickelte Python-Bibliothek zur Verarbeitung von Musikinformationen. Tatsächlich erstellt music21 selbst nicht die Partitur, MuseScore und Lilypond jedoch. (Allerdings berühre ich MuseScore oder Lilypond nicht wirklich, daher muss ich nichts darüber wissen.) In Bezug auf music21 bin ich [diesem Blog] sehr dankbar (https://ameblo.jp/delphinus1024/entry-12365205195.html).
Um eine Hanon-ähnliche Punktzahl zu erzielen, müssen Sie an Hanon-ähnliche Ergebnisse denken. Ich entschied, dass die folgenden Bedingungen Hanon-ähnlich sind. Es kann für Leute, die keine Musik spielen, schwierig sein, dies zu verstehen. Es wäre also schön, wenn Sie glauben könnten, Sie hätten die Regeln festgelegt, während Sie sich die Partitur selbst angesehen haben.
Wird implementiert, um zufällig eine Punktzahl zu erstellen, die diese Bedingungen erfüllt. Als Ergebnis wurde eine Punktzahl wie dieser Tweet erstellt!
Hanon.py
# -*- coding: utf-8 -*-
from music21 import *
import numpy
import matplotlib
import scipy
import random
#Zufällige Generierung
random_num = [-1 for _ in range(8)]
random_num[0] = 0
for i in range(1,8):
random_num[i] = random.randint(1, 7)
if i >= 1: #Vermeiden Sie es, die gleichen Noten wie die vorherige zu tragen
while True:
if random_num[i] != random_num[i-1]:
break
else:
random_num[i] = random.randint(1, 7)
#Schreiben Sie die Partitur
##Irgendwie die erste Magie
stream_right = stream.Part()
stream_left = stream.Part()
inst1 = instrument.Instrument()
inst2 = instrument.Instrument()
stream_right.append(inst1)
stream_left.append(inst2)
tc = clef.TrebleClef() #Höhenzeichen
bc = clef.BassClef() #F Tonsymbol
stream_right.append(tc)
stream_left.append(bc)
otos = ["C1", "D1", "E1", "F1", "G1", "A1", "B1", "C2", "D2", "E2", "F2", "G2", "A2", "B2", "C3", "D3", "E3", "F3", "G3", "A3", "B3", "C4", "D4", "E4", "F4", "G4", "A4", "B4", "C5", "D5", "E5", "F5", "G5", "A5", "B5", "C6"]
##rechte Hand
for i in range(14): #Klettern
###1. Bar
meas = stream.Measure()
n0 = note.Note(otos[random_num[0] + 14 + i], quarterLength = 0.25)
meas.append(n0)
n1 = note.Note(otos[random_num[1] + 14 + i], quarterLength = 0.25)
meas.append(n1)
n2 = note.Note(otos[random_num[2] + 14 + i], quarterLength = 0.25)
meas.append(n2)
n3 = note.Note(otos[random_num[3] + 14 + i], quarterLength = 0.25)
meas.append(n3)
n4 = note.Note(otos[random_num[4] + 14 + i], quarterLength = 0.25)
meas.append(n4)
n5 = note.Note(otos[random_num[5] + 14 + i], quarterLength = 0.25)
meas.append(n5)
n6 = note.Note(otos[random_num[6] + 14 + i], quarterLength = 0.25)
meas.append(n6)
n7 = note.Note(otos[random_num[7] + 14 + i], quarterLength = 0.25)
meas.append(n7)
stream_right.append(meas)
for i in range(14): #Mist
###1. Bar
meas = stream.Measure()
x = 18
n0 = note.Note(otos[x + 14 - i], quarterLength = 0.25)
meas.append(n0)
n1 = note.Note(otos[x - random_num[1] + 14 - i], quarterLength = 0.25)
meas.append(n1)
n2 = note.Note(otos[x - random_num[2] + 14 - i], quarterLength = 0.25)
meas.append(n2)
n3 = note.Note(otos[x - random_num[3] + 14 - i], quarterLength = 0.25)
meas.append(n3)
n4 = note.Note(otos[x - random_num[4] + 14 - i], quarterLength = 0.25)
meas.append(n4)
n5 = note.Note(otos[x - random_num[5] + 14 - i], quarterLength = 0.25)
meas.append(n5)
n6 = note.Note(otos[x - random_num[6] + 14 - i], quarterLength = 0.25)
meas.append(n6)
n7 = note.Note(otos[x - random_num[7] + 14 - i], quarterLength = 0.25)
meas.append(n7)
stream_right.append(meas)
###Letzte Maßnahme
meas = stream.Measure()
n = note.Note("C3", quarterLength = 2)
meas.append(n)
stream_right.append(meas)
##linke Hand
for i in range(14): #Klettern
###1. Bar
meas = stream.Measure()
n0 = note.Note(otos[random_num[0] + 7 + i], quarterLength = 0.25)
meas.append(n0)
n1 = note.Note(otos[random_num[1] + 7 + i], quarterLength = 0.25)
meas.append(n1)
n2 = note.Note(otos[random_num[2] + 7 + i], quarterLength = 0.25)
meas.append(n2)
n3 = note.Note(otos[random_num[3] + 7 + i], quarterLength = 0.25)
meas.append(n3)
n4 = note.Note(otos[random_num[4] + 7 + i], quarterLength = 0.25)
meas.append(n4)
n5 = note.Note(otos[random_num[5] + 7 + i], quarterLength = 0.25)
meas.append(n5)
n6 = note.Note(otos[random_num[6] + 7 + i], quarterLength = 0.25)
meas.append(n6)
n7 = note.Note(otos[random_num[7] + 7 + i], quarterLength = 0.25)
meas.append(n7)
stream_left.append(meas)
for i in range(14): #Mist
###1. Bar
meas = stream.Measure()
x = 18
n0 = note.Note(otos[x + 7 - i], quarterLength = 0.25)
meas.append(n0)
n1 = note.Note(otos[x - random_num[1] + 7 - i], quarterLength = 0.25)
meas.append(n1)
n2 = note.Note(otos[x - random_num[2] + 7 - i], quarterLength = 0.25)
meas.append(n2)
n3 = note.Note(otos[x - random_num[3] + 7 - i], quarterLength = 0.25)
meas.append(n3)
n4 = note.Note(otos[x - random_num[4] + 7 - i], quarterLength = 0.25)
meas.append(n4)
n5 = note.Note(otos[x - random_num[5] + 7 - i], quarterLength = 0.25)
meas.append(n5)
n6 = note.Note(otos[x - random_num[6] + 7 - i], quarterLength = 0.25)
meas.append(n6)
n7 = note.Note(otos[x - random_num[7] + 7 - i], quarterLength = 0.25)
meas.append(n7)
stream_left.append(meas)
###Letzte Maßnahme
meas = stream.Measure()
n = note.Note("C2", quarterLength = 2)
meas.append(n)
stream_left.append(meas)
##Die letzte Magie
s = stream.Score()
s.append(stream_right)
s.append(stream_left)
s.show('musicxml')
Sie können es auch auf GitHub sehen. Von hier aus werde ich den Quellcode separat erklären. Ich habe jedoch gerade angefangen, music21 zu verwenden, und ich bin mir nicht sicher, und es gibt viele Teile, die ich anderen Menschen nacheifere. Bitte weisen Sie darauf hin, wenn Sie einen Fehler machen.
python
# -*- coding: utf-8 -*-
from music21 import *
import numpy
import matplotlib
import scipy
import random
Anders als zufällig scheint es notwendig zu sein, music21 zu verwenden, also habe ich es vorerst importiert. Ich möchte eine Zufallszahl erstellen, daher importiere ich eine Zufallszahl.
python
#Zufällige Generierung
random_num = [-1 for _ in range(8)]
random_num[0] = 0
for i in range(1,8):
random_num[i] = random.randint(1, 7)
if i >= 1: #Vermeiden Sie es, die gleichen Noten wie die vorherige zu tragen
while True:
if random_num[i] != random_num[i-1]:
break
else:
random_num[i] = random.randint(1, 7)
Wenn nur die 2. bis 8. Note des 1. Takts zufällig angeordnet sind, wird der Rest nur transponiert, sodass wir 7 Zufallszahlen vorbereitet haben. Ich wollte, dass die Zahlen den Zahlen entsprechen, also habe ich die Zufallszahlen im Bereich von 1-8 gemacht. Die while-Anweisung wird so gedreht, dass derselbe Sound nicht fortgesetzt wird.
python
##Irgendwie die erste Magie
stream_right = stream.Part()
stream_left = stream.Part()
inst1 = instrument.Instrument()
inst2 = instrument.Instrument()
stream_right.append(inst1)
stream_left.append(inst2)
tc = clef.TrebleClef() #Höhenzeichen
bc = clef.BassClef() #F Tonsymbol
stream_right.append(tc)
stream_left.append(bc)
otos = ["C1", "D1", "E1", "F1", "G1", "A1", "B1", "C2", "D2", "E2", "F2", "G2", "A2", "B2", "C3", "D3", "E3", "F3", "G3", "A3", "B3", "C4", "D4", "E4", "F4", "G4", "A4", "B4", "C5", "D5", "E5", "F5", "G5", "A5", "B5", "C6"]
Erstens gibt es zwei Teile, die rechte und die linke Hand. Bereiten Sie also zwei Teile vor. Fügen Sie dann jedem Teil ein Höhensymbol und ein Höhensymbol hinzu. Schließlich werde ich die Sounds vorbereiten, die in einem Array verwendet werden sollen.
python
##rechte Hand
for i in range(14): #Klettern
###1. Bar
meas = stream.Measure()
n0 = note.Note(otos[random_num[0] + 14 + i], quarterLength = 0.25)
meas.append(n0)
n1 = note.Note(otos[random_num[1] + 14 + i], quarterLength = 0.25)
meas.append(n1)
n2 = note.Note(otos[random_num[2] + 14 + i], quarterLength = 0.25)
meas.append(n2)
n3 = note.Note(otos[random_num[3] + 14 + i], quarterLength = 0.25)
meas.append(n3)
n4 = note.Note(otos[random_num[4] + 14 + i], quarterLength = 0.25)
meas.append(n4)
n5 = note.Note(otos[random_num[5] + 14 + i], quarterLength = 0.25)
meas.append(n5)
n6 = note.Note(otos[random_num[6] + 14 + i], quarterLength = 0.25)
meas.append(n6)
n7 = note.Note(otos[random_num[7] + 14 + i], quarterLength = 0.25)
meas.append(n7)
stream_right.append(meas)
for i in range(14): #Mist
###1. Bar
meas = stream.Measure()
x = 18
n0 = note.Note(otos[x + 14 - i], quarterLength = 0.25)
meas.append(n0)
n1 = note.Note(otos[x - random_num[1] + 14 - i], quarterLength = 0.25)
meas.append(n1)
n2 = note.Note(otos[x - random_num[2] + 14 - i], quarterLength = 0.25)
meas.append(n2)
n3 = note.Note(otos[x - random_num[3] + 14 - i], quarterLength = 0.25)
meas.append(n3)
n4 = note.Note(otos[x - random_num[4] + 14 - i], quarterLength = 0.25)
meas.append(n4)
n5 = note.Note(otos[x - random_num[5] + 14 - i], quarterLength = 0.25)
meas.append(n5)
n6 = note.Note(otos[x - random_num[6] + 14 - i], quarterLength = 0.25)
meas.append(n6)
n7 = note.Note(otos[x - random_num[7] + 14 - i], quarterLength = 0.25)
meas.append(n7)
stream_right.append(meas)
###Letzte Maßnahme
meas = stream.Measure()
n = note.Note("C3", quarterLength = 2)
meas.append(n)
stream_right.append(meas)
Erstellen Sie zunächst den ersten Balken. Zu diesem Zeitpunkt, als ich die for-Anweisung verwendete, gab es aus irgendeinem Grund nur einen Ton in einem Takt, so dass ich keine andere Wahl hatte, als ihn solide zu schreiben. Schreiben Sie es als Notiz. Hinweis (Tonhöhe, Länge). Die Länge des Klangs wird als Bruch oder Bruch ausgedrückt, wobei die Viertelnote 1 ist. Wenn der erste Takt abgeschlossen ist, wiederholen Sie ihn 14 Mal, während Sie ihn transponieren, um den Aufstieg abzuschließen! Schreiben Sie die untere Zeile auf die gleiche Weise. Und vergessen Sie nicht, die Erweiterung des letzten Balkens hinzuzufügen, und fertig! !! Die linke Hand ist nur eine Oktave tiefer, also habe ich sie weggelassen.
python
##Die letzte Magie
s = stream.Score()
s.append(stream_right)
s.append(stream_left)
s.show('musicxml')
Zeigen Sie abschließend an, was Sie bisher in MuseScore geschrieben haben. Sie können es auch in Lilypond anzeigen, indem Sie die letzte Zeile neu schreiben.
Mir wurde gesagt, dass ich maschinelles Lernen ausprobieren sollte, um mehr Hanon-ness zu erreichen, also habe ich den Wunsch, es zu versuchen (ich weiß nichts, also muss ich von 0 lernen ... ). Ich möchte auch in der Lage sein, den Schwierigkeitsgrad in ungefähr 5 Schritten anzupassen. Außerdem scheint music21 für die Musikanalyse verwendbar zu sein, und es scheint, dass es überprüfen kann, welche Art von Ton es ist (erstaunlich), also dachte ich, dass ich auch damit spielen möchte.
Recommended Posts