def specgrams_to_melspecgrams(magnitude, IF): """Converts specgrams to melspecgrams. Args: specgrams: Tensor of log magnitudes and instantaneous frequencies, shape [freq, time]. Returns: melspecgrams: Tensor of log magnitudes and instantaneous frequencies, shape [freq, time], mel scaling of frequencies. """ logmag = magnitude.T p = IF.T mag2 = np.exp(2.0 * logmag) mag2 = np.array([mag2]) phase_angle = np.cumsum(p * np.pi, axis=1) phase_angle = np.array([phase_angle]) l2mel = _linear_to_mel_matrix() logmelmag2 = np.log(np.tensordot(mag2,l2mel,axes=1) + 1e-6) mel_phase_angle = np.tensordot(phase_angle, l2mel, axes=1) mel_p = phase_op.instantaneous_frequency(mel_phase_angle,time_axis=1) return logmelmag2[0].T, mel_p[0].T
def melspecgrams_to_specgrams(logmelmag2, mel_p): """Converts melspecgrams to specgrams. Args: melspecgrams: Tensor of log magnitudes and instantaneous frequencies, shape [freq, time], mel scaling of frequencies. Returns: specgrams: Tensor of log magnitudes and instantaneous frequencies, shape [freq, time]. """ logmelmag2 = logmelmag2.T mel_p = mel_p.T logmelmag2 = np.array([logmelmag2]) mel_p = np.array([mel_p]) mel2l = _mel_to_linear_matrix() mag2 = np.tensordot(np.exp(logmelmag2), mel2l, 1) logmag = 0.5 * np.log(mag2 + 1e-6) mel_phase_angle = np.cumsum(mel_p * np.pi, axis=1) phase_angle = np.tensordot(mel_phase_angle, mel2l, 1) p = phase_op.instantaneous_frequency(phase_angle, time_axis=1) return logmag[0].T, p[0].T
sample_mid = (sample_left + sample_right) / 2 sample_side = (sample_left - sample_right) / 2 sample_left = sample_mid sample_right = sample_side spec_left = librosa.stft(sample_left, n_fft=2048, hop_length=512) spec_right = librosa.stft(sample_right, n_fft=2048, hop_length=512) # print(spec_left[100]) """ log10 말고 log로 처리""" magnitude_left = np.log(np.abs(spec_left) + 1.0e-6)[:1024] magnitude_right = np.log(np.abs(spec_right) + 1.0e-6)[:1024] angle_left = np.angle(spec_left) angle_right = np.angle(spec_right) IF_left = phase_operation.instantaneous_frequency(angle_left, time_axis=1)[:1024] IF_right = phase_operation.instantaneous_frequency(angle_right, time_axis=1)[:1024] magnitude_left = reduce(magnitude_left) magnitude_right = reduce(magnitude_right) IF_left = reduce(IF_left) IF_right = reduce(IF_right) logmelmag2_left, mel_p_left = spec_helper.specgrams_to_melspecgrams( magnitude_left, IF_left) logmelmag2_right, mel_p_right = spec_helper.specgrams_to_melspecgrams( magnitude_right, IF_right) # print(magnitude_left.shape)