print "error: " + str(new_error) if abs(error - new_error) < 0.1: break error = new_error # save the network print "Saving neural network..." NetworkWriter.writeToFile(net, os.path.basename(dirname) + 'net') if __name__ == '__main__': dirname = os.path.normpath(sys.argv[1]) # wave_reader.extractFeatures(track) trainNetwork(dirname) net = NetworkReader.readFrom(os.path.basename(dirname) + 'net') # predict on some of the training examples print "Predicting on training set" data = numpy.genfromtxt(os.path.join(dirname, 'train09_seg.csv'), delimiter=",") labels = numpy.genfromtxt(os.path.join(dirname, 'train09REF.txt'), delimiter='\t')[0::10,1] ## for i in range(200): ## print net.activate(data[i]), labels[i] cdata = numpy.array([]) for feature in data: freq = max(0, net.activate(feature)) sample = wave_gen.saw(freq, 0.1, 44100) cdata = numpy.concatenate([cdata, sample]) wave_gen.saveAudioBuffer('test.wav', cdata) ## for freq in labels: ## sample = wave_gen.saw(freq, 0.1, 44100) ## cdata = numpy.concatenate([cdata, sample]) ## wave_gen.saveAudioBuffer('test_ref.wav', cdata)
dirname = os.path.normpath(sys.argv[1]) seq = sequencer.Sequencer() #create a sequencer to handle midi input tracks = glob.glob(os.path.join(dirname, '*.mid')) #match any midi file for t in tracks: track = os.path.splitext(t)[0] # sequence MIDI to saw + sine melody print "Sequencing %s..." %track wavData = seq.parseMidiFile("%s.mid" %track) sawData = wavData[0] melodyData = wavData[1] print "Saving %s... wav and melody" %track wave_gen.saveAudioBuffer("%s.wav" %track, sawData) wave_gen.saveAudioBuffer("%smelody.wav" %track, melodyData) print "Generating feature data..." data = wave_reader.wavToFeatures("%s.wav" %track) melody = wave_reader.wavToFeatures("%smelody.wav" %track) labels = melody.argmax(axis=1) #axis=1, max frequency across a sample numData = min(data.shape[0],labels.shape[0]) data = data[0:numData,] labels = labels[0:numData] matrix = numpy.concatenate([data, numpy.array([labels]).T], axis=1) #horizontal concatenate saveFile('%sdata.csv' %track, matrix) seq.resetSequencer()
if type(event) is midi.events.NoteOnEvent: self.generateAudio(event.tick, event.channel) note = event.pitch self.noteActive[note] = True elif type(event) is midi.events.NoteOffEvent: self.generateAudio(event.tick, event.channel) note = event.pitch self.noteActive[note] = False self.tracks.pop() #removes the extra added track (the first track is just metadata) track_len = min([len(track) for track in self.tracks]) self.tracks = [track[0:track_len] for track in self.tracks] #trim all tracks to the exact same size self.output[0] = numpy.sum(self.tracks, axis=0) #combine tracks return self.output def resetSequencer(self): self.noteActive = [False] * 128 self.sampleRate = 44100 self.output = [numpy.empty(0),numpy.empty(0)] self.tracks = [] self.bpm = 120 #default tempo self.ppq = 96 #default resolution if __name__ == '__main__': seq = Sequencer() samples = seq.parseMidiFile('000106b_.mid') wave_gen.saveAudioBuffer('000106b_.wav', samples) #samples = seq.parseMidiFile('mary.mid') #wave_gen.saveAudioBuffer('mary.wav', samples)
#produces a result wav so you can listen to the prediction if __name__ == '__main__': dirname = os.path.normpath(sys.argv[1]) #track = os.path.join(dirname, '000106b_.wav') print "Reading wav into input data..." data = wave_reader.wavToFeatures('000106b_.wav') numData = data.shape[0] labels = numpy.zeros(numData) print "Reloading neural network..." net = NetworkReader.readFrom(os.path.basename(dirname) + 'designnet') print "Activating neural network..." for i in range(numData): labels[i] = net.activate(data[i]) print "Generating result wav..." cdata = numpy.array([]) for label in labels: #if(freq > 0): # freq = midi_util.frequencyToNoteFrequency(label) label = round(label) freq = midi_util.midiToFrequency(label) sample = wave_gen.saw(freq, 0.25, 44100) sample = wave_gen.saw(freq, 0.25, 44100) cdata = numpy.concatenate([cdata, sample]) print "Saving result wav..." wave_gen.saveAudioBuffer('000106b_predict.wav', cdata)