def convert_samplerate(audio_path, desired_sample_rate): """Convert extracted audio to the format expected by DeepSpeech ***WONT be called as extract_audio() converts the audio to 16kHz while saving*** Args: audio_path: audio file path desired_sample_rate: DeepSpeech expects 16kHz Returns: numpy buffer: audio signal stored in numpy array """ sox_cmd = "sox {} --type raw --bits 16 --channels 1 --rate {} --encoding signed-integer --endian little --compression 0.0 --no-dither - ".format( quote(audio_path), desired_sample_rate) try: output = subprocess.check_output(shlex.split(sox_cmd), stderr=subprocess.PIPE) except subprocess.CalledProcessError as e: raise RuntimeError("SoX returned non-zero status: {}".format(e.stderr)) except OSError as e: raise OSError( e.errno, "SoX not found, use {}hz files or install it: {}".format( desired_sample_rate, e.strerror)) return np.frombuffer(output, np.int16)
def convert_samplerate(audio_path: str, desired_sample_rate: int) -> np.ndarray: """ Apply sample rate conversion # Ref: https://deepspeech.readthedocs.io/en/v0.7.4/Python-Examples.html """ sox_cmd: str = """ sox {} --type raw\ --bits 16 --channels 1 --rate {}\ --encoding signed-integer --endian little\ --compression 0.0 --no-dither - """.format( quote(audio_path), desired_sample_rate ) output: bytes = b"" try: output = subprocess.check_output(shlex.split(sox_cmd), stderr=subprocess.PIPE) except subprocess.CalledProcessError as e: raise RuntimeError("SoX returned non-zero status: {}".format(e.stderr)) except OSError as e: raise OSError( e.errno, "SoX not found, use {}hz files or install it: {}".format( desired_sample_rate, e.strerror ), ) return desired_sample_rate, np.frombuffer(output, np.int16)
def convert_samplerate(audio_path): sox_cmd = 'sox {} --type raw --bits 16 --channels 1 --rate 16000 - '.format(quote(audio_path)) try: output = subprocess.check_output(shlex.split(sox_cmd), stderr=subprocess.PIPE) except subprocess.CalledProcessError as e: raise RuntimeError('SoX returned non-zero status: {}'.format(e.stderr)) except OSError as e: raise OSError(e.errno, 'SoX not found, use 16kHz files or install it: {}'.format(e.strerror)) return 16000, np.frombuffer(output, np.int16)
def convert_samplerate(audio_path): sox_cmd = 'sox {} --type raw --bits 16 --channels 1 --rate 16000 - '.format(quote(audio_path)) try: output = subprocess.check_output(shlex.split(sox_cmd), stderr=subprocess.PIPE) except subprocess.CalledProcessError as e: raise RuntimeError('SoX returned non-zero status: {}'.format(e.stderr)) except OSError as e: raise OSError(e.errno, 'SoX not found, use 16kHz files or install it: {}'.format(e.strerror)) return 16000, np.frombuffer(output, np.int16)
def convert_samplerate(audio_path, desired_sample_rate): sox_cmd = 'sox {} --type raw --bits 16 --channels 1 --rate {} --encoding signed-integer --endian little --compression 0.0 --no-dither - '.format( quote(audio_path), desired_sample_rate) try: output = subprocess.check_output(shlex.split(sox_cmd), stderr=subprocess.PIPE) except subprocess.CalledProcessError as e: raise RuntimeError('SoX returned non-zero status: {}'.format(e.stderr)) except OSError as e: raise OSError(e.errno, 'SoX not found, use {}hz files or install it: {}'.format(desired_sample_rate, e.strerror)) return desired_sample_rate, np.frombuffer(output, np.int16)
def normalize_mp3(mp3filepath): filename, file_extension = os.path.splitext(mp3filepath) mp3normfile = "{}{}{}".format(filename, "_norm", file_extension) normalize_cmd = "ffmpeg-normalize {} ".format(quote(mp3filepath)) normalize_cmd += "-c:a libmp3lame -b:a 192k --normalization-type ebu " # normalize_cmd += \ # '--loudness-range-target 7.0 --true-peak 0.0 --offset 0.0 ' normalize_cmd += "--target-level {} -f -o {}".format( NORMALIZE_TARGET_LEVEL, quote(mp3normfile)) if DEBUG: print(normalize_cmd) try: subprocess.check_output(shlex.split(normalize_cmd), stderr=subprocess.PIPE) return mp3normfile except subprocess.CalledProcessError as e: log.error("ffmpeg-normalize returned non-zero status: {}".format( e.stderr)) return mp3filepath except OSError as e: log.error("ffmpeg-normalize not found {}".format(e.strerror)) return mp3filepath