peterf@2: #!/usr/bin/env python peterf@2: '''CREATED:2013-12-08 14:28:34 by Brian McFee peterf@2: peterf@2: Demonstration of harmonic-percussive source separation peterf@2: ''' peterf@2: from __future__ import print_function peterf@2: peterf@2: import argparse peterf@2: import sys peterf@2: import librosa peterf@2: peterf@2: peterf@2: def hpss_demo(input_file, output_harmonic, output_percussive): peterf@2: '''HPSS demo function. peterf@2: peterf@2: :parameters: peterf@2: - input_file : str peterf@2: path to input audio peterf@2: - output_harmonic : str peterf@2: path to save output harmonic (wav) peterf@2: - output_percussive : str peterf@2: path to save output harmonic (wav) peterf@2: ''' peterf@2: peterf@2: # 1. Load the wav file, resample peterf@2: print('Loading ', input_file) peterf@2: peterf@2: y, sr = librosa.load(input_file) peterf@2: peterf@2: # Separate components with the effects module peterf@2: print('Separating harmonics and percussives... ') peterf@2: y_harmonic, y_percussive = librosa.effects.hpss(y) peterf@2: peterf@2: # 5. Save the results peterf@2: print('Saving harmonic audio to: ', output_harmonic) peterf@2: librosa.output.write_wav(output_harmonic, y_harmonic, sr) peterf@2: peterf@2: print('Saving percussive audio to: ', output_percussive) peterf@2: librosa.output.write_wav(output_percussive, y_percussive, sr) peterf@2: peterf@2: peterf@2: def process_arguments(args): peterf@2: '''Argparse function to get the program parameters''' peterf@2: peterf@2: parser = argparse.ArgumentParser(description='harmonic-percussive example') peterf@2: peterf@2: parser.add_argument('input_file', peterf@2: action='store', peterf@2: help='path to the input file (wav, mp3, etc)') peterf@2: peterf@2: parser.add_argument('output_harmonic', peterf@2: action='store', peterf@2: help='path to the harmonic output (wav)') peterf@2: peterf@2: parser.add_argument('output_percussive', peterf@2: action='store', peterf@2: help='path to the percussive output (wav)') peterf@2: peterf@2: return vars(parser.parse_args(args)) peterf@2: peterf@2: peterf@2: if __name__ == '__main__': peterf@2: # get the parameters peterf@2: parameters = process_arguments(sys.argv[1:]) peterf@2: peterf@2: # Run the HPSS code peterf@2: hpss_demo(parameters['input_file'], peterf@2: parameters['output_harmonic'], peterf@2: parameters['output_percussive'])