peterf@2: #!/usr/bin/env python peterf@2: '''CREATED:2013-12-08 14:28:34 by Brian McFee peterf@2: peterf@2: Demonstration of phase vocoder time stretching. 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 stretch_demo(input_file, output_file, speed): peterf@2: '''Phase-vocoder time stretch demo function. peterf@2: peterf@2: :parameters: peterf@2: - input_file : str peterf@2: path to input audio peterf@2: - output_file : str peterf@2: path to save output (wav) peterf@2: - speed : float > 0 peterf@2: speed up by this factor 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: # 2. Time-stretch through effects module peterf@2: print('Playing back at {:3.0f}% speed'.format(speed * 100)) peterf@2: peterf@2: y_stretch = librosa.effects.time_stretch(y, speed) peterf@2: peterf@2: print('Saving stretched audio to: ', output_file) peterf@2: librosa.output.write_wav(output_file, y_stretch, 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='Time stretching 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_file', peterf@2: action='store', peterf@2: help='path to the stretched output (wav)') peterf@2: peterf@2: parser.add_argument('-s', '--speed', peterf@2: action='store', peterf@2: type=float, peterf@2: default=2.0, peterf@2: required=False, peterf@2: help='speed') 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: stretch_demo(parameters['input_file'], peterf@2: parameters['output_file'], peterf@2: parameters['speed'])