Example #1
0
        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)
Example #2
0
    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()

Example #3
0
				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)
Example #4
0
#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)