Example #1
0
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)
Example #2
0
    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
Example #3
0
    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