Ejemplo n.º 1
0
	def generateAudio(self, duration, track):
		if duration == 0:
			return

		# generate the base empty sample
		seconds = (60.0 / (self.bpm * self.ppq)) * duration
		length = int(seconds * self.sampleRate)
		sample = numpy.zeros(length)
		melodysample = numpy.zeros(length)
		# add in any notes that are active
		#print "adding some samples in"
		for i in range(0, 128):
			if (self.noteActive[i]):
				#print "note: " + str(i)
				frequency = midi_util.midiToFrequency(i)
				#print "adding frequency " + str(frequency)
				sample += wave_gen.saw(frequency, seconds, self.sampleRate)
				if track == 0: #melody track for chorales
					melodysample += wave_gen.sine(frequency, seconds, self.sampleRate)

		# concatenate this to the output
		self.tracks[track] = numpy.concatenate([self.tracks[track], sample])
		if track == 0: #melody track for chorales
			self.output[1] = numpy.concatenate([self.output[1], melodysample])
Ejemplo n.º 2
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)
Ejemplo n.º 3
0
def plotFourierTransform(sample):
	fourierTrans = numpy.abs(numpy.fft.fft(sample))
	fourierTrans = fourierTrans[0:(fourierTrans.size / 2)]
	fig, ax = plt.subplots()
	ax.plot(fourierTrans)
	plt.show()

def plotSample(sample):
	fig, ax = plt.subplots()
	ax.plot(sample)
	plt.show()

if __name__ == '__main__':
	# create a sine wave at the desired frequency
	sineWave = wave_gen.saw(440, 1, 44100) #+ wave_gen.sine(1000, 1, 44100)
	#sineWave = sineWave + (wave_gen.noise(1, 44100) * 10)
	# create the plot
	fig, ax = plt.subplots()

	# get the fourier transform
	sineFreq = numpy.abs(numpy.fft.fft(sineWave))

	# we only care about the positive frequencies
	sineFreq = sineFreq[0:(sineFreq.size / 2)]
	print numpy.max(sineFreq)

	# plot our fourier transform
	#saw = wave_gen.saw(440, 1, 44100)
	print sineWave[0]
	ax.plot(sineFreq)
Ejemplo n.º 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)
Ejemplo n.º 5
0
def saveFile(filename, data):
	numpy.savetxt(filename, data, delimiter=',', fmt='%.2f', newline = '\n')

def addToFeatureMatrix(matrix, feature):
	feature = feature.reshape(1, feature.shape[0])
	if matrix.size is 0:
		matrix = feature;
	else:
		matrix = numpy.vstack((matrix, feature))
	return matrix

if __name__ == '__main__':
	matrix = numpy.array([])
	seconds = 1
	for note in range(0, 12):
		print "generating note " + str(note)
		for x in range(0, 100):
			notesToPlay = chord_gen.createMajorChords(note)
			length = int(seconds * 44100)
			sample = numpy.zeros(length)
			for i in range(0, len(notesToPlay)):
				freq = midi_util.midiToFrequency(notesToPlay[i])
				sample += wave_gen.saw(freq, seconds, 44100)
			features = analyzer.getFrequencies(sample)
			features = numpy.append(features[0:5000], note)
			#features = features.astype(numpy.int16)
			matrix = addToFeatureMatrix(matrix, features)

	saveFile('largedata.csv', matrix)