def cut(input_path, output_file, metadata): segments = metadata['segments'] segments = [segment_seconds(segment) for segment in segments] with TempFile('.mp3') as temp_file: # Open a new temporary file to store audio in between processes if segments: # Cut audio into segments and create fade in/out # We need to use a new temporary file for each # audio segment temp_segments = [TempFile('.mp3') for segment in segments] try: for index, segment in enumerate(segments): sox = Transformer() sox.channels(1) sox.norm(-24) sox.trim(*segment) sox.fade(1, 2, 't') sox.build(input_path, temp_segments[index].path) if len(segments) > 1: # Concatenate all the audio segments back together # and output to our main temporary file Combiner().build( [temp_segment.path for temp_segment in temp_segments], temp_file.path, 'concatenate', ) else: # Only one segment so we don't need to combine anything subprocess.run( ['cp', temp_segments[0].path, temp_file.path]) except Exception as e: raise (e) finally: # Cleanup temporary segment files even on error if temp_segments: for temp_segment in temp_segments: temp_segment.close() # Second process: filter, compress and EQ the # audio in temporary file and output to output_file sox = Transformer() sox.highpass(100) sox.lowpass(10000) sox.compand(0.005, 0.12, 6, [ (-90, -90), (-70, -55), (-50, -35), (-32, -32), (-24, -24), (0, -8), ]) sox.equalizer(3000, 1000, 3) sox.equalizer(280, 120, 3) sox.build(temp_file.path, output_file)
def process(x): file_path, text = x file_name = os.path.splitext(os.path.basename(file_path))[0] text = text.lower().strip() audio_path = os.path.join(audio_clips_path, file_path) output_wav_path = os.path.join(wav_dir, file_name + '.wav') tfm = Transformer() tfm.rate(samplerate=args.sample_rate) tfm.channels(n_channels=args.n_channels) tfm.build(input_filepath=audio_path, output_filepath=output_wav_path) duration = sox.file_info.duration(output_wav_path) return output_wav_path, duration, text
def process(x): file_path, text = x file_name = os.path.splitext(os.path.basename(file_path))[0] text = text.lower().strip() audio_path = os.path.join(audio_clips_path, file_path) if os.path.getsize(audio_path) == 0: logging.warning(f'Skipping empty audio file {audio_path}') return '', '', '' output_wav_path = os.path.join(wav_dir, file_name + '.wav') if not os.path.exists(output_wav_path): tfm = Transformer() tfm.rate(samplerate=args.sample_rate) tfm.channels(n_channels=args.n_channels) tfm.build(input_filepath=audio_path, output_filepath=output_wav_path) duration = sox.file_info.duration(output_wav_path) return output_wav_path, duration, text