aboutsummaryrefslogtreecommitdiff
path: root/src/supermariobros.audio.sql
blob: 914a1d97829b21b4028b6606d9b2ec1c938747ed (plain) (blame)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
INSERT OR REPLACE INTO audio_tracks (id, sample_rate, format) VALUES ('supermariobros', 8000, 'u8') RETURNING id;

WITH RECURSIVE
  audio AS
    (SELECT *, 225 AS beat, 160 AS gain FROM audio_tracks WHERE id = 'supermariobros'),
  notes AS (SELECT
    440.0000 AS A4,
    466.1638 AS Bflat4,
    493.8833 AS B4,
    261.6256 AS C4,
    329.6276 AS E4,
    391.9954 AS G4,
    880.0000 AS A5,
    523.2511 AS C5,
    587.3295 AS D5,
    622.2540 AS Dsharp5,
    659.2250 AS E5,
    698.4565 AS F5,
    739.9888 AS Fsharp5,
    783.9909 AS G5,
    1760.000 AS A6,
    1046.502 AS C6,
    1318.510 AS E6,
    1396.913 AS F6,
    1567.982 AS G6),
  melody(m_id, mduration, mnote) AS
    (SELECT ROW_NUMBER() OVER () as m_id, * FROM (VALUES
      (5,  (SELECT E5 FROM notes))     , (1,  0),
      (5,  (SELECT E5 FROM notes))     , (6,  0),
      (5,  (SELECT E5 FROM notes))     , (6,  0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT E5 FROM notes))     , (6,  0),
      (5,  (SELECT G5 FROM notes))     , (17, 0),
      (5,  (SELECT G4 FROM notes))     , (17, 0),
      --
      (5,  (SELECT C5 FROM notes))     , (12, 0),
      (5,  (SELECT G4 FROM notes))     , (10, 0),
      (5,  (SELECT E4 FROM notes))     , (7,  0),
      (5,  (SELECT A4 FROM notes))     , (6,  0),
      (5,  (SELECT B4 FROM notes))     , (5,  0),
      (5,  (SELECT Bflat4 FROM notes)) , (1,  0),
      (5,  (SELECT A4 FROM notes))     , (6,  0),
      (5,  (SELECT G4 FROM notes))     , (2,  0),
      (5,  (SELECT E5 FROM notes))     , (2,  0),
      (5,  (SELECT G5 FROM notes))     , (2,  0),
      (5,  (SELECT A5 FROM notes))     , (6,  0),
      (5,  (SELECT F5 FROM notes))     , (1,  0),
      (5,  (SELECT G5 FROM notes))     , (5,  0),
      (5,  (SELECT E5 FROM notes))     , (8,  0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (1,  0),
      (5,  (SELECT B4 FROM notes))     , (12,  0),
      --
      (5,  (SELECT C5 FROM notes))     , (12, 0),
      (5,  (SELECT G4 FROM notes))     , (10, 0),
      (5,  (SELECT E4 FROM notes))     , (7,  0),
      (5,  (SELECT A4 FROM notes))     , (6,  0),
      (5,  (SELECT B4 FROM notes))     , (5,  0),
      (5,  (SELECT Bflat4 FROM notes)) , (1,  0),
      (5,  (SELECT A4 FROM notes))     , (6,  0),
      (5,  (SELECT G4 FROM notes))     , (2,  0),
      (5,  (SELECT E5 FROM notes))     , (2,  0),
      (5,  (SELECT G5 FROM notes))     , (2,  0),
      (5,  (SELECT A5 FROM notes))     , (6,  0),
      (5,  (SELECT F5 FROM notes))     , (1,  0),
      (5,  (SELECT G5 FROM notes))     , (5,  0),
      (5,  (SELECT E5 FROM notes))     , (8,  0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (1,  0),
      (5,  (SELECT B4 FROM notes))     , (24,  0),
      --
      (5,  (SELECT G5 FROM notes))     , (1, 0),
      (5,  (SELECT Fsharp5 FROM notes)), (1, 0),
      (5,  (SELECT F5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (8,  0),
      (5,  (SELECT E5 FROM notes))     , (6,  0),
      (5,  (SELECT G4 FROM notes))     , (1, 0),
      (5,  (SELECT A4 FROM notes))     , (1,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT A4 FROM notes))     , (1, 0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (12,  0),
      --
      (5,  (SELECT G5 FROM notes))     , (1, 0),
      (5,  (SELECT Fsharp5 FROM notes)), (1, 0),
      (5,  (SELECT F5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (8,  0),
      (5,  (SELECT E5 FROM notes))     , (6,  0),
      (5,  (SELECT C6 FROM notes))     , (4,  0),
      (5,  (SELECT C6 FROM notes))     , (1,  0),
      (5,  (SELECT C6 FROM notes))     , (36,  0),
      --
      (5,  (SELECT G5 FROM notes))     , (1, 0),
      (5,  (SELECT Fsharp5 FROM notes)), (1, 0),
      (5,  (SELECT F5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (8,  0),
      (5,  (SELECT E5 FROM notes))     , (6,  0),
      (5,  (SELECT G4 FROM notes))     , (1, 0),
      (5,  (SELECT A4 FROM notes))     , (1,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT A4 FROM notes))     , (1, 0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (12,  0),
      --
      (5,  (SELECT Dsharp5 FROM notes)), (12,  0),
      (5,  (SELECT D5 FROM notes))     , (12,  0),
      (5,  (SELECT C5 FROM notes))     , (36,  0),
      --
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (6,  0),
      (5,  (SELECT E5 FROM notes))     , (1,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT A4 FROM notes))     , (1,  0),
      (5,  (SELECT G4 FROM notes))     , (17,  0),
      --
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (1,  0),
      (5,  (SELECT E5 FROM notes))     , (40,  0),
      --
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (6,  0),
      (5,  (SELECT E5 FROM notes))     , (1,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT A4 FROM notes))     , (1,  0),
      (5,  (SELECT G4 FROM notes))     , (17,  0),
      --
      (5,  (SELECT E5 FROM notes))     , (1,  0),
      (5,  (SELECT E5 FROM notes))     , (6,  0),
      (5,  (SELECT E5 FROM notes))     , (6,  0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT E5 FROM notes))     , (6,  0),
      (5,  (SELECT G5 FROM notes))     , (17,  0),
      (5,  (SELECT G4 FROM notes))     , (17,  0),
      --
      (5,  (SELECT C5 FROM notes))     , (12, 0),
      (5,  (SELECT G4 FROM notes))     , (10, 0),
      (5,  (SELECT E4 FROM notes))     , (8,  0),
      (5,  (SELECT A4 FROM notes))     , (6,  0),
      (5,  (SELECT B4 FROM notes))     , (5,  0),
      (5,  (SELECT Bflat4 FROM notes)) , (1,  0),
      (5,  (SELECT A4 FROM notes))     , (6,  0),
      (5,  (SELECT G4 FROM notes))     , (2,  0),
      (5,  (SELECT E5 FROM notes))     , (2,  0),
      (5,  (SELECT G5 FROM notes))     , (2,  0),
      (5,  (SELECT A5 FROM notes))     , (6,  0),
      (5,  (SELECT F5 FROM notes))     , (1,  0),
      (5,  (SELECT G5 FROM notes))     , (5,  0),
      (5,  (SELECT E5 FROM notes))     , (8,  0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (1,  0),
      (5,  (SELECT B4 FROM notes))     , (12,  0),
      --
      (5,  (SELECT C5 FROM notes))     , (12, 0),
      (5,  (SELECT G4 FROM notes))     , (10, 0),
      (5,  (SELECT E4 FROM notes))     , (8,  0),
      (5,  (SELECT A4 FROM notes))     , (6,  0),
      (5,  (SELECT B4 FROM notes))     , (5,  0),
      (5,  (SELECT Bflat4 FROM notes)) , (1,  0),
      (5,  (SELECT A4 FROM notes))     , (6,  0),
      (5,  (SELECT G4 FROM notes))     , (2,  0),
      (5,  (SELECT E5 FROM notes))     , (2,  0),
      (5,  (SELECT G5 FROM notes))     , (2,  0),
      (5,  (SELECT A5 FROM notes))     , (6,  0),
      (5,  (SELECT F5 FROM notes))     , (1,  0),
      (5,  (SELECT G5 FROM notes))     , (5,  0),
      (5,  (SELECT E5 FROM notes))     , (8,  0),
      (5,  (SELECT C5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (1,  0),
      (5,  (SELECT B4 FROM notes))     , (17,  0),
      --
      (5,  (SELECT E5 FROM notes))     , (0,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT G4 FROM notes))     , (12,  0),
      (5,  (SELECT G4 FROM notes))     , (6,  0),
      (5,  (SELECT A4 FROM notes))     , (2,  0),
      (5,  (SELECT F5 FROM notes))     , (4,  0),
      (5,  (SELECT F5 FROM notes))     , (2,  0),
      (5,  (SELECT A4 FROM notes))     , (12,  0),
      --
      (5,  (SELECT B4 FROM notes))     , (1,  0),
      (5,  (SELECT A5 FROM notes))     , (3,  0),
      (5,  (SELECT A5 FROM notes))     , (1,  0),
      (5,  (SELECT A5 FROM notes))     , (4,  0),
      (5,  (SELECT G5 FROM notes))     , (1,  0),
      (5,  (SELECT F5 FROM notes))     , (1,  0),
      (5,  (SELECT E5 FROM notes))     , (2,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT A4 FROM notes))     , (1,  0),
      (5,  (SELECT G4 FROM notes))     , (17,  0),
      --
      (5,  (SELECT E5 FROM notes))     , (0,  0),
      (5,  (SELECT C5 FROM notes))     , (6,  0),
      (5,  (SELECT G4 FROM notes))     , (12,  0),
      (5,  (SELECT G4 FROM notes))     , (6,  0),
      (5,  (SELECT A4 FROM notes))     , (2,  0),
      (5,  (SELECT F5 FROM notes))     , (4,  0),
      (5,  (SELECT F5 FROM notes))     , (2,  0),
      (5,  (SELECT A4 FROM notes))     , (12,  0),
      --
      (5,  (SELECT B4 FROM notes))     , (1,  0),
      (5,  (SELECT F5 FROM notes))     , (3,  0),
      (5,  (SELECT F5 FROM notes))     , (1,  0),
      (5,  (SELECT F5 FROM notes))     , (4,  0),
      (5,  (SELECT E5 FROM notes))     , (1,  0),
      (5,  (SELECT D5 FROM notes))     , (1,  0),
      (5,  (SELECT C5 FROM notes))     , (2,  0),
      (5,  (SELECT G4 FROM notes))     , (6,  0),
      (5,  (SELECT E4 FROM notes))     , (1,  0),
      (5,  (SELECT C4 FROM notes))     , (17,  0),
      --
      (1,  0))),
  melody_with_offsets(mstart, mend, mnote) AS
    (SELECT
      SUM(mduration) OVER (ORDER BY m_id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS mstart,
      SUM(mduration) OVER (ORDER BY m_id) AS mend,
      mnote
    FROM melody),
  note_positions(position) AS
    (SELECT 0 UNION ALL
      SELECT position + 1 FROM note_positions, audio
        WHERE position < (SELECT SUM(mduration) FROM melody) * beat),
  _samples(value, position) AS
    (SELECT
      IFNULL((SELECT mnote * position FROM melody_with_offsets
          WHERE position BETWEEN IFNULL(mstart, 0) * beat AND mend * beat
          LIMIT 1), 0) AS value,
      position
    FROM note_positions, notes, audio),
  samples(value, position) AS
    (SELECT MOD(FLOOR(value * 2.0 / sample_rate), 2) * gain, position
      FROM _samples, audio)
INSERT INTO audio_track_samples (audio_track_id, value, position) SELECT 'supermariobros', value, position FROM samples ORDER BY position;