aboutsummaryrefslogtreecommitdiff
path: root/music.py
diff options
context:
space:
mode:
Diffstat (limited to 'music.py')
-rw-r--r--music.py319
1 files changed, 256 insertions, 63 deletions
diff --git a/music.py b/music.py
index bb98365..27c687a 100644
--- a/music.py
+++ b/music.py
@@ -7,69 +7,248 @@ import sys
bitrate = 44100
intro = [
- (1, 3, 3),
- (1, 3, 7),
- (1, 3, 10),
- (3, 4, 2),
- (1, 3, 1),
- (1, 3, 5),
- (1, 3, 8),
- (3, 4, 0),
- (1, 2, 11),
- (1, 3, 3),
- (1, 3, 6),
- (2, 3, 10),
- (1 / 2, 3, 9, 1 / 2),
- (1 / 2, 3, 8, 1 / 2),
- (6, 3, 7, 1 / 2),
+ (1,3,3),
+ (1,3,7),
+ (1,3,10),
+ (6,4,2),
+
+ (1,3,1),
+ (1,3,5),
+ (1,3,8),
+ (3,4,0),
+
+ (1,2,11),
+ (1,3,3),
+ (1,3,6),
+ (3,3,10),
+
+ (1,2,8),
+ (1,3,0),
+ (1,3,3),
+ (8,3,7),
]
melody = [
- (3, 3, 7),
- (3, 3, 3),
- (3, 3, 8),
- (2, 3, 7),
- (2, 3, 5),
- (3, 3, 7),
- (2, 3, 3),
- (2, 2, 10),
- (2, 3, 0),
- (6, 3, 3),
+ (1,3,3),
+ (1,3,7),
+ (1,3,10),
+ (1,4,2),
+ (1,4,3),
+ (1,4,7),
+ (2,4,8),
+
+ (1,3,1),
+ (1,3,5),
+ (1,3,8),
+ (1,4,0),
+ (1,4,1),
+ (1,4,5),
+ (2,4,8),
+
+ (1,3,3),
+ (1,3,7),
+ (1,3,10),
+ (1,4,2),
+ (1,4,3),
+ (1,4,10),
+ (2,4,3),
+
+ (1,3,1),
+ (1,3,5),
+ (1,3,8),
+ (1,4,0),
+ (1,4,10),
+ (1,4,8),
+ (2,4,10),
+
+
+ (1,3,3),
+ (1,3,7),
+ (1,3,10),
+ (1,4,2),
+ (1,4,3),
+ (1,4,7),
+ (2,4,8),
+
+ (1,3,1),
+ (1,3,5),
+ (1,3,8),
+ (1,4,0),
+ (1,4,1),
+ (1,4,5),
+ (2,4,1),
+
+ (1,3,3),
+ (1,3,7),
+ (1,3,10),
+ (1,4,2),
+ (1,4,3),
+ (1,4,10),
+ (1,4,8),
+ (1,4,7),
+
+ (1,3,1),
+ (1,3,5),
+ (1,3,8),
+ (1,4,0),
+ (1,4,10),
+ (1,4,8),
+ (2,4,10),
]
bass = [
- (1, 0, 7),
- (1, 2, 7),
- (1, 2, 7),
- (1, 0, 7),
- (1, 2, 3),
- (1, 2, 3),
- (1, 0, 7),
- (1, 2, 8),
- (1, 2, 8),
- (1, 0, 7),
- (1, 2, 7),
- (1, 0, 7),
- (1, 2, 5),
- (1, 0, 7),
- (1, 2, 7),
- (1, 2, 7),
- (1, 0, 7),
- (1, 2, 3),
- (1, 0, 7),
- (1, 1, 10),
- (1, 0, 7),
- (1, 2, 0),
- (1, 0, 7),
- (1, 2, 3),
- (1, 2, 3),
- (1, 0, 7),
- (1, 2, 3),
- (1, 2, 3),
+ (1,1,3),
+ (1,1,10),
+ (1,1,1),
+ (1,1,8),
+ (1,1,3),
+ (1,2,3),
+ (1,1,1),
+ (1,1,10),
]
-music = []
+melody2 = [
+ (1,0,0),
+ (1,5,10),
+ (1,5,8),
+ (1,5,7),
+ (1,5,8),
+ (3,5,7,2),
+
+ (1,5,3),
+ (1,4,10),
+ (6,5,1,2),
+
+ (1/2,5,0,2),
+ (1/2,5,1,2),
+ (3,5,3,2),
+ (1/2,5,10,2),
+ (7/2,5,3,2),
+
+ (8,0,0),
+
+ (1,0,0),
+ (1,5,3),
+ (1,5,10),
+ (1,5,10),
+ (4/3,5,10),
+ (4/3,5,8),
+ (4/3,5,7),
+
+ (1,0,0),
+ (1,5,1),
+ (1,5,8),
+ (1,5,8),
+ (4/3,5,8),
+ (4/3,5,8),
+ (4/3,5,10),
+ (8,0,0),
+
+ (1,0,0),
+ (5,5,3,2),
+ (2,5,10,2),
+]
+
+melody3 = [
+ (1,0,0),
+ (1,5,10),
+ (1/2,5,8,2/3),
+ (1/2,5,7,2/3),
+ (1/4,5,8,1/2),
+ (1/4,5,7,1/2),
+ (1/4,5,8,1/2),
+ (1/4,5,7,1/2),
+ (1,5,8),
+ (3,5,7,2),
+
+ (1,5,3),
+ (1,4,10),
+ (1,5,1),
+ (5,5,7,2),
+
+ (1/2,5,7),
+ (1/2,5,10),
+ (1/4,5,7),
+ (1/4,5,10),
+ (1/4,5,7),
+ (1/4,5,10),
+ (1,6,3),
+ (2,5,3,2),
+ (1/2,6,3),
+ (5/2,5,3,2),
+
+ (1/2,5,10),
+ (1/2,5,8),
+ (1/2,5,7),
+ (1/2,5,8),
+ (1/2,5,7),
+ (1/2,5,3),
+ (1/2,4,10),
+ (1/2,5,1),
+ (1/2,5,0),
+ (1/2,4,10),
+ (1/2,4,8),
+ (1/2,4,10),
+ (1/2,5,3),
+ (1/2,5,7),
+ (1/2,5,3),
+ (1/2,5,10),
+
+ (4/3,5,7),
+ (4/3,6,3),
+ (4/3,6,3),
+ (4/3,6,2),
+ (4/3,5,10),
+ (4/3,5,7),
+
+ (3,5,5),
+ (2,5,7),
+ (2,5,8),
+ (1,6,1),
+
+ (1,5,3),
+ (1,5,5),
+ (2,5,7),
+ (1,5,3),
+ (1,5,8),
+ (2,5,10),
+
+ (3/2,6,0),
+ (3/2,6,1),
+ (5,6,3,2),
+]
+
+outro = [
+ (1,3,3),
+ (1,3,7),
+ (1,3,10),
+ (1,4,2),
+ (1,4,3),
+ (1,4,7),
+ (2,4,8),
+
+ (1,3,1),
+ (1,3,5),
+ (1,3,8),
+ (1,4,0),
+ (1,4,1),
+ (1,4,5),
+ (2,4,8),
+
+ (1,2,11),
+ (1,3,3),
+ (1,3,6),
+ (1,3,10),
+ (1.5,3,11),
+ (1.5,4,3),
+ (3,4,8),
+
+ (1.5,2,8),
+ (1.5,3,0),
+ (2,3,3),
+ (16,3,7),
+]
def process(notes, start, speed=1, gain=1):
"""
@@ -80,15 +259,28 @@ def process(notes, start, speed=1, gain=1):
vol = 1
if len(note) == 4:
vol = note[3]
- music.append((t, t + note[0] / speed, note[1], note[2], vol * gain))
- t += note[0] / speed
+ start = min(t, t + note[0] / speed)
+ end = max(t, t + note[0] / speed)
+ music.append((start, end, note[1], note[2], vol * gain))
+ t = end
# Process all lists of notes
-process(intro, 0, 3)
-process(melody, 8, 3)
-process(bass, 8, 3, 1 / 2)
-# And sort them
+music = []
+process(intro, 0, 4)
+process(melody, 8, 4)
+process(melody, 24, 4)
+process(bass, 24)
+process(bass, 32)
+process(melody, 40, 4)
+process(melody2, 40, 4)
+process(bass, 40)
+process(bass, 48)
+process(melody, 56, 4)
+process(melody3, 56, 4)
+process(bass, 56)
+process(bass, 64)
+process(outro, 72, 4)
music.sort()
@@ -110,8 +302,9 @@ def tone(f, t):
# Y += Y * Y * Y
# Y *= 1 + 16 * t * math.exp(-6 * t)
w = 2 * math.pi * f
- Y = 0.6 * math.sin(w * t) * math.exp(-0.0015 * w * t)
- Y += 0.4 * math.sin(2 * w * t) * math.exp(-0.0015 * w * t)
+ Y = 0.6 * math.sin(w * t) * math.exp(-0.001 * w * t)
+ Y += 0.2 * math.sin(2 * w * t) * math.exp(-0.001 * w * t)
+ Y += 0.05 * math.sin(3 * w * t) * math.exp(-0.001 * w * t)
Y += Y * Y * Y
Y *= 1 + 16 * t * math.exp(-6 * t)
return Y
@@ -133,5 +326,5 @@ def at(t):
# Print out music encoded in s16 to standard output
-for i in range(0 * bitrate, 16 * bitrate):
+for i in range(0 * bitrate, 84 * bitrate):
sys.stdout.buffer.write(struct.pack("h", at(i / bitrate)))