-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwriteMusic.py
54 lines (40 loc) · 1.76 KB
/
writeMusic.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from music21 import *
import random
import learnMusic
import writeRhythm
import writeNotes
environment.set('musicxmlPath', '/usr/bin/mscore')
outputStream = stream.Stream()
keys = {'C': 0, 'C#': 7, 'D': 2, 'E-': -3, 'E': 4, 'F': -1, 'F#': 6, 'G': 1, 'A-': -4, 'A': 3, 'B-': -2, 'B': 5}
keyIndex = ['C', 'C#', 'D', 'E-', 'E', 'F', 'F#', 'G', 'A-', 'A', 'B-', 'B']
# assign random key signature
songKey = key.KeySignature(keys[keyIndex[random.randint(0, 11)]])
if random.randint(0, 1) % 2:
# major
scaleOfNotes = songKey.getScale('major')
else:
# minor
scaleOfNotes = songKey.getScale('minor')
# timeSignature = random.randint(3, 4)
timeSignature = 4
timeSignature = str(timeSignature) + '/4'
outputStream.append(meter.TimeSignature(timeSignature))
# listOfNotes.chord._notes
# thats how i wanna get a list of notes cause it's a hackathon
outputStream.append(songKey)
outputStream.append(meter.TimeSignature(timeSignature))
outputStream.append(tempo.MetronomeMark(number=random.randint(80,120)))
# dictOfMeasures = writeRhythm.fillRhythmicDissonance(learnMusic.rhythmMatrix, learnMusic.states, meter.TimeSignature(timeSignature))
# listOfMeasures = []
# for keyOfDict in dictOfMeasures:
# listOfMeasures.append(keyOfDict)
#
# for measureNumber in listOfMeasures:
# for l in dictOfMeasures[measureNumber]:
# if type(l) is note.Note:
# outputStream.append(l)
outputStream.append(writeRhythm.createMeasuresOfRhythm(learnMusic.rhythmMatrix, learnMusic.states, meter.TimeSignature(timeSignature)))
writeNotes.adjustNotesNormal(outputStream, learnMusic.noteGraph, learnMusic.noteStates)
# writeNotes.adjustNotes(outputStream, learnMusic.noteGraph, learnMusic.noteStates, scaleOfNotes.chord._notes)
outputStream = outputStream.flat
outputStream.show()