Connaissez-vous le manuel de piano de Hanon? De nombreuses personnes qui ont déjà joué du piano peuvent avoir des souvenirs désagréables. Le manuel de piano de Hanon est un manuel qui vous apprend les rudiments du piano. Voir c'est croire, donc certainement vidéo en cours de lecture et [score](https://ameblo.jp/manana888/entry- Jetez un œil à 11753162091.html). Cette fois, j'avais pour objectif de créer automatiquement des chansons comme les n ° 1 à 20 dans les manuels Hanon Piano.
Le langage utilisé est ** Python **. J'ai également utilisé ** music21 **, une bibliothèque de traitement d'informations musicales Python développée par le MIT. En fait, la musique21 elle-même ne crée pas la partition, contrairement à MuseScore et Lilypond. (Cependant, je ne touche pas vraiment MuseScore ou Lilypond, donc je n'ai pas besoin de savoir quoi que ce soit à ce sujet.) En ce qui concerne music21, je suis très reconnaissant à ce blog.
Pour faire un score à la Hanon, vous devez penser à Hanon. J'ai décidé que les conditions suivantes ressemblaient à celles de Hanon. Il peut être difficile pour les personnes qui ne jouent pas de musique de comprendre, alors ce serait bien si vous pouviez penser que vous avez décidé des règles tout en regardant la partition vous-même.
Mis en œuvre pour créer aléatoirement un score qui remplit ces conditions. En conséquence, une partition comme ce tweet a été créée!
<détails> Vous pouvez également le voir sur GitHub.
De là, je vais expliquer le code source séparément.
Cependant, je commence tout juste à utiliser la musique21, et je n'en suis pas sûr, et il y a beaucoup de parties qui imitent d'autres personnes, alors veuillez signaler si vous faites une erreur. Autre que aléatoire, il semble nécessaire d'utiliser music21, donc je l'ai importé pour le moment.
Je veux créer un nombre aléatoire, je vais donc importer au hasard. Si seulement les 2e à 8e notes de la 1ère mesure sont randomisées, le reste est juste transposé, j'ai donc préparé 7 nombres aléatoires.
Je voulais que les nombres correspondent aux nombres, alors j'ai fait les nombres aléatoires dans la gamme de 1 à 8.
L'instruction while est tournée pour que le même son ne continue pas. Premièrement, il y a deux parties, la main droite et la main gauche, alors préparez deux parties.
Ensuite, ajoutez un symbole d'aigus et un symbole de basse à chaque partie.
Enfin, je préparerai les sons à utiliser dans un tableau. Commencez par créer la première barre.
À cette époque, lorsque j'utilisais l'instruction for, pour une raison quelconque, il n'y avait qu'un seul son dans une mesure, donc je n'avais pas d'autre choix que de l'écrire solidement.
Écrivez-le sous forme de note Remarque (hauteur, longueur).
La longueur du son est exprimée sous forme de fraction ou de fraction, avec la noire comme 1.
Lorsque la première mesure est terminée, répétez-la 14 fois en la transposant pour terminer l'ascendant!
Écrivez la ligne inférieure de la même manière.
Et n'oubliez pas d'ajouter l'extension de la dernière barre et le tour est joué! !!
La main gauche est seulement une octave plus bas, donc je l'ai omise. Enfin, affichez ce que vous avez écrit jusqu'à présent dans MuseScore.
Vous pouvez également l'afficher dans Lilypond en réécrivant la dernière ligne. On m'a dit que je devrais essayer l'apprentissage automatique afin de poursuivre plus de ressemblance avec Hanon, donc j'ai envie de l'essayer (je ne sais rien, donc je dois étudier à partir de 0 ... ).
Je souhaite également pouvoir régler le niveau de difficulté en 5 étapes environ.
De plus, music21 semble être utilisable pour l'analyse musicale, et il semble que cela puisse vérifier de quel type de ton il s'agit (incroyable), alors j'ai pensé que j'aimerais jouer avec ça aussi.
Recommended Posts
Hanon.py
# -*- coding: utf-8 -*-
from music21 import *
import numpy
import matplotlib
import scipy
import random
#Génération aléatoire
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: #Évitez de porter les mêmes billets que le précédent
while True:
if random_num[i] != random_num[i-1]:
break
else:
random_num[i] = random.randint(1, 7)
#Écrivez le score
##D'une certaine manière, la première 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() #Signe des aigus
bc = clef.BassClef() #Symbole sonore F
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"]
##main droite
for i in range(14): #Escalade
###1ère barre
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): #Merde
###1ère barre
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)
###Dernière mesure
meas = stream.Measure()
n = note.Note("C3", quarterLength = 2)
meas.append(n)
stream_right.append(meas)
##main gauche
for i in range(14): #Escalade
###1ère barre
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): #Merde
###1ère barre
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)
###Dernière mesure
meas = stream.Measure()
n = note.Note("C2", quarterLength = 2)
meas.append(n)
stream_left.append(meas)
##La dernière magie
s = stream.Score()
s.append(stream_right)
s.append(stream_left)
s.show('musicxml')
Bibliothèques
python
# -*- coding: utf-8 -*-
from music21 import *
import numpy
import matplotlib
import scipy
import random
Faire un nombre aléatoire
python
#Génération aléatoire
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: #Évitez de porter les mêmes billets que le précédent
while True:
if random_num[i] != random_num[i-1]:
break
else:
random_num[i] = random.randint(1, 7)
Préparation à la rédaction d'une partition
python
##D'une certaine manière, la première 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() #Signe des aigus
bc = clef.BassClef() #Symbole sonore F
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"]
Écrivez une partition! Partie principale! !!
python
##main droite
for i in range(14): #Escalade
###1ère barre
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): #Merde
###1ère barre
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)
###Dernière mesure
meas = stream.Measure()
n = note.Note("C3", quarterLength = 2)
meas.append(n)
stream_right.append(meas)
Affichage avec Muse Score
python
##La dernière magie
s = stream.Score()
s.append(stream_right)
s.append(stream_left)
s.show('musicxml')
finalement