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])
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)
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)
#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)
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)