Source code for malaya_speech.utils.read

import numpy as np
import soundfile as sf
from scipy.io.wavfile import read
from scipy import interpolate
from herpetologist import check_type


[docs]def resample(data, old_samplerate, new_samplerate): """ Resample signal. Parameters ---------- data: np.array old_samplerate: int old sample rate. new_samplerate: int new sample rate. Returns ------- result: data """ old_audio = data duration = data.shape[0] / old_samplerate time_old = np.linspace(0, duration, old_audio.shape[0]) time_new = np.linspace( 0, duration, int(old_audio.shape[0] * new_samplerate / old_samplerate) ) interpolator = interpolate.interp1d(time_old, old_audio.T) data = interpolator(time_new).T return data
def read_audio(data, old_samplerate, sample_rate=22050): if len(data.shape) == 2: data = data[:, 0] if old_samplerate != sample_rate and sample_rate is not None: data = resample(data, old_samplerate, sample_rate) else: sample_rate = old_samplerate return data, sample_rate
[docs]@check_type def load(file: str, sr=16000, scale: bool = True): """ Read sound file, any format supported by soundfile.read Parameters ---------- file: str sr: int, (default=16000) new sample rate. If input sample rate is not same, will resample automatically. scale: bool, (default=True) Scale to -1 and 1. Returns ------- result: (y, sr) """ data, old_samplerate = sf.read(file) y, sr = read_audio(data, old_samplerate, sr) if scale: y = y / (np.max(np.abs(y)) + 1e-9) return y, sr