def get_training_data(window_size_ms, train_time_sec=30): #loop until empty input is detected X = [] y = [] print "Training time for each key is {} seconds".format(train_time_sec) i = 0 while True: s = raw_input('Press <enter> to begin training key {} or q-<enter> to quit'.format(i)) if s: break j = 0 while j < train_time_sec: j += (window_size_ms / float(1000)) freq_spect = read_spectral_data_for_time(window_size_ms) X.append(freq_spect) y.append([i]) #increment key counter i += 1 mb = MultiLabelBinarizer() y = mb.fit_transform(y) X = np.asarray(X) y = np.asarray(y) return X, y
def listen(clf, mb, window_size_ms): while True: freq_spect = read_spectral_data_for_time(window_size_ms) _label = clf.predict([freq_spect]) current_notes = mb.inverse_transform(_label)[0] for note in current_notes: note_buffer.put(note) print str(current_notes)
def single_key_experiment(window_size_ms, clf, train_time_sec): #loop until empty input is detected X = [] y = [] while True: #the key I will press key = raw_input('Label num:') if not key: break i = 0 while i < train_time_sec: i += (window_size_ms / float(1000)) freq_spect = read_spectral_data_for_time(window_size_ms) X.append(freq_spect) y.append(key) clf.fit(X, y) while True: freq_spect = read_spectral_data_for_time(window_size_ms) _label = clf.predict([freq_spect]) print 'Predicting class {}'.format(_label[0])
def train(window_size_ms, train_time_sec=30, clf = OneVsRestClassifier(DecisionTreeClassifier()), n_keys=2): #loop until empty input is detected X = [] y = [] labels = [(i,) for i in range(n_keys+1)] mb = MultiLabelBinarizer() labels = mb.fit_transform(labels) print "Training time for each key is {} seconds".format(train_time_sec) for label_num, label in enumerate(labels): raw_input('Press <enter> to begin training key {}'.format(label_num)) i = 0 while i < train_time_sec: i += (window_size_ms / float(1000)) freq_spect = read_spectral_data_for_time(window_size_ms) X.append(freq_spect) y.append(label) X = np.asarray(X) y = np.asarray(y) clf.fit(X, y) return (clf, mb)