def isolateVocals(self, path, fftWindowSize, phaseIterations=10): console.log("Attempting to isolate vocals from", path) audio, sampleRate = conversion.loadAudioFile(path) spectrogram, phase = conversion.audioFileToSpectrogram(audio, fftWindowSize=fftWindowSize) console.log("Retrieved spectrogram; processing...") expandedSpectrogram = conversion.expandToGrid(spectrogram, self.peakDownscaleFactor) expandedSpectrogramWithBatchAndChannels = expandedSpectrogram[np.newaxis, :, :, np.newaxis] print(expandedSpectrogramWithBatchAndChannels.shape) # 预测 predictedSpectrogramWithBatchAndChannels = self.model.predict(expandedSpectrogramWithBatchAndChannels) predictedSpectrogram = predictedSpectrogramWithBatchAndChannels[0, :, :, 0] # o /// o newSpectrogram = predictedSpectrogram[:spectrogram.shape[0], :spectrogram.shape[1]] console.log("Processed spectrogram; reconverting to audio") newAudio = conversion.spectrogramToAudioFile(newSpectrogram, sampleRate, fftWindowSize=fftWindowSize, phaseIterations=phaseIterations) pathParts = os.path.split(path) fileNameParts = os.path.splitext(pathParts[1]) outputFileNameBase = os.path.join(pathParts[0], fileNameParts[0] + "_unet") console.log("Converted to audio; writing to", outputFileNameBase) conversion.saveAudioFile(newAudio, outputFileNameBase + ".wav", sampleRate) conversion.saveSpectrogram(newSpectrogram, outputFileNameBase + ".png") conversion.saveSpectrogram(spectrogram, os.path.join(pathParts[0], fileNameParts[0]) + ".png") console.log("Vocal isolation complete")
if acapellaSlices.__len__() > 0: self.x.extend(mashupSlices) self.y.extend(acapellaSlices) console.info(count, "Created spectrogram for", fileName, "with length", acapellaSlices.__len__()) # Add a "channels" channel to please the network self.x = np.array(self.x)[:, :, :, np.newaxis] self.y = np.array(self.y)[:, :, :, np.newaxis] console.info('Train data shape: x: ', self.x.shape, ' y: ', self.y.shape) # Save to file if asked if saveDataAsH5: h5f = h5py.File(h5Path, "w") h5f.create_dataset("x", data=self.x) h5f.create_dataset("y", data=self.y) h5f.close() if __name__ == "__main__": # Simple testing code to use while developing console.h1("Loading Data") d = Data(sys.argv[1], 1536) console.h1("Writing Sample Data") conversion.saveSpectrogram(d.x[0], "x_sample_0.png") conversion.saveSpectrogram(d.y[0], "y_sample_0.png") audio = conversion.spectrogramToAudioFile(d.x[0], 1536) conversion.saveAudioFile(audio, "x_sample.wav", 22050)