forked from mtrigoboff/cubase_drum_maps
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_dm.py
More file actions
56 lines (47 loc) · 1.63 KB
/
create_dm.py
File metadata and controls
56 lines (47 loc) · 1.63 KB
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
53
54
55
56
# Code written by Michael Trigoboff, http://spot.pcc.edu/~mtrigobo
import xml.etree.ElementTree as et, os.path, sys
def buildNoteNumbers():
noteNames = ('C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B')
noteNameIndex = 0
octaveIndex = 0
noteNumbers = {}
for noteNumber in range(24, 97):
noteNumbers[noteNames[noteNameIndex] + str(octaveIndex)] = noteNumber
noteNameIndex += 1
if (noteNameIndex > 11):
noteNameIndex = 0
octaveIndex += 1
return noteNumbers
def main(fileName):
noteNumbers = buildNoteNumbers()
tree = et.parse('empty.drm')
root = tree.getroot()
dk = open(fileName, "r")
lines = [line.rstrip() for line in dk.readlines()]
dk.close()
root[0].set('value', lines[0]) # drum map name
# set Name [9] in Map [2]
map = root[2]
for line in lines[1:]:
lineSplit = line.split()
noteNumber = noteNumbers[lineSplit[0]]
noteName = ' '.join(lineSplit[2:])
map[noteNumber][9].set('value', noteName)
# configure Order [3] so that items with names come first
order = root[3]
firstNoteNumber = noteNumbers[lines[1].split()[0]]
lastNoteNumber = noteNumbers[lines[-1].split()[0]]
item = 0
for noteNumber in range(firstNoteNumber, lastNoteNumber + 1):
order[item].set('value', str(noteNumber))
item += 1
for noteNumber in range(0, firstNoteNumber):
order[item].set('value', str(noteNumber))
item += 1
for noteNumber in range(lastNoteNumber + 1, 128):
order[item].set('value', str(noteNumber))
item += 1
tree.write(os.path.splitext(fileName)[0] + '.drm')
# when invoked from the command line
if __name__ == '__main__':
main(sys.argv[1])