-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathbaudot-in-midi.py
executable file
·99 lines (74 loc) · 2.41 KB
/
baudot-in-midi.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# ASCII to Baudot-in-MIDI
# For Python 2
# By Zoe Blade
# Converts a specified message to Baudot within a MIDI file, to embed messages in music as rhythmic harmonies
import midi # Installed from https://github.com/vishnubob/python-midi
import sys # For command line arguments
if len(sys.argv) < 2:
print 'Please specify a message to convert'
exit()
message = sys.argv[1].upper()
noteLength = 110
pattern = midi.Pattern()
track = midi.Track()
pattern.append(track)
tick = 0
for letter in message:
if letter not in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ':
continue
elements = [False, False, False, False, False]
# Using https://en.wikipedia.org/wiki/Baudot_code#/media/File:International_Telegraph_Alphabet_2.jpg as a guide
if letter in 'ABDEFJKQSUWXYZ':
elements[0] = True
if letter in 'ACGIJKLPQRUVW':
elements[1] = True
if letter in 'CFHIKMNPQSUVXY ':
elements[2] = True
if letter in 'BCDFGJKMNORVX':
elements[3] = True
if letter in 'BGHLMOPQTVWXYZ':
elements[4] = True
lineToPrint = letter + ' '
elementCount = 0
for element in elements:
if elementCount == 2:
lineToPrint += '.'
if element == True:
lineToPrint += 'o'
if elementCount == 0:
track.append(midi.NoteOnEvent(tick=0, velocity=100, pitch=midi.E_4))
elif elementCount == 1:
track.append(midi.NoteOnEvent(tick=0, velocity=100, pitch=midi.C_4))
elif elementCount == 2:
track.append(midi.NoteOnEvent(tick=0, velocity=100, pitch=midi.G_3))
elif elementCount == 3:
track.append(midi.NoteOnEvent(tick=0, velocity=100, pitch=midi.E_3))
else:
track.append(midi.NoteOnEvent(tick=0, velocity=100, pitch=midi.C_3))
else:
lineToPrint += ' '
elementCount += 1
movedOnYet = False
elementCount = 0
for element in elements:
if element == True:
if movedOnYet == True:
ticks = 0
else:
ticks = noteLength
if elementCount == 0:
track.append(midi.NoteOffEvent(tick=ticks, pitch=midi.E_4))
elif elementCount == 1:
track.append(midi.NoteOffEvent(tick=ticks, pitch=midi.C_4))
elif elementCount == 2:
track.append(midi.NoteOffEvent(tick=ticks, pitch=midi.G_3))
elif elementCount == 3:
track.append(midi.NoteOffEvent(tick=ticks, pitch=midi.E_3))
else:
track.append(midi.NoteOffEvent(tick=ticks, pitch=midi.C_3))
movedOnYet = True
elementCount += 1
print lineToPrint
track.append(midi.EndOfTrackEvent(tick=1))
midi.write_midifile('baudot.mid', pattern)
print 'Exported baudot.mid'