-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatasets.py
More file actions
98 lines (78 loc) · 3.14 KB
/
datasets.py
File metadata and controls
98 lines (78 loc) · 3.14 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
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
# A Wavenet For Source Separation - Francesc Lluis - 25.10.2018
# Datasets.py
import util
import os
import random
import numpy as np
import jams
import logging
import scipy
jam = jams.JAMS()
encoded_key_vals = np.eye(24)
encoded_key_vals = [tuple(arr) for arr in encoded_key_vals]
class GiantStepsDataset():
def __init__(self, mode):
self.mode = mode
self.activeSequences = 0
self.jams_directory = r"dataset\annotations\jams"
self.key_vals = {
'A:minor': encoded_key_vals[0],
'A:major':encoded_key_vals[1],
'Ab:minor':encoded_key_vals[2],
'Ab:major':encoded_key_vals[3],
'B:minor':encoded_key_vals[4],
'B:major':encoded_key_vals[5],
'Bb:minor':encoded_key_vals[6],
'Bb:major':encoded_key_vals[7],
'C:minor':encoded_key_vals[8],
'C:major':encoded_key_vals[9],
'D:minor':encoded_key_vals[10],
'D:major':encoded_key_vals[11],
'Db:minor':encoded_key_vals[12],
'Db:major':encoded_key_vals[13],
'E:minor':encoded_key_vals[14],
'E:major':encoded_key_vals[15],
'Eb:minor':encoded_key_vals[16],
'Eb:major':encoded_key_vals[17],
'F:major':encoded_key_vals[18],
'F:minor':encoded_key_vals[19],
'G:minor':encoded_key_vals[20],
'G:major':encoded_key_vals[21],
'Gb:minor':encoded_key_vals[22],
'Gb:major':encoded_key_vals[23],
}
if(mode == "test"):
self.directory = r"dataset\wav\test"
else:
self.directory = r"dataset\wav\train"
def load_dataset_generator(self):
print('Loading dataset...')
print(self.directory)
input_length = 500000
while True:
filenames = os.listdir(self.directory)
random.shuffle(filenames)
sequences = []
letters = []
key_types = []
for i in range(3):
if filenames[i].endswith(".wav"):
sequence_path = os.path.join(self.directory, filenames[i])
sequence = util.load_wav(sequence_path,16000)
jams_name = filenames[i][:-4] + ".jams"
jams_path = os.path.join(self.jams_directory, jams_name)
jamsObj = jams.load(jams_path)
if(jamsObj):
data_val = jamsObj.annotations[0].data[0].value
sequence = sequence[:input_length]
f, t, Sxx = scipy.signal.spectrogram(sequence, 16000)
sequence = np.array(Sxx)
sequences.append(sequence)
key_types.append(self.key_vals[data_val])
else:
continue
sequences = np.array(sequences)
sequences = np.expand_dims(sequences, axis=-1)
key_types = np.array(key_types)
batch = {'data_input': sequences}, {'data_output': key_types}
yield(batch)