如何正确使用pitch_shift(librosa)?
How to properly use pitch_shift (librosa)?
我尝试使用 librosa 和 pitch_shift 来自 librosa。
我录了一些我的声音并使用了这个代码:
sampling_rate= 44100
y, sr = librosa.load(directory, sr=sampling_rate) # y is a numpy array of the wav file, sr = sample rate
y_shifted = librosa.effects.pitch_shift(y, sr, n_steps=4, bins_per_octave=24) # shifted by 4 half steps
librosa.output.write_wav(directory, y_shifted, sr=sampling_rate, norm=False)
它工作正常 - 差不多。
我听到我的新声音有些杂音(pitch_shifting 后)
有什么需要用的吗?
没有班次:
https://vocaroo.com/i/s1qEEDvzcUHN
带班次(n_steps = 4):
变调通常涉及 STFT, the shift—usually of a magnitude spectrum along the frequency axis, and then signal reconstruction via the Griffin-Lim-algorithm (Quora-explanation Griffin-Lim 的工作原理)。
问题在于,当我们移动幅度谱时,我们就是这么做的——而忽略了相位! Griffin-Lim 在重建时域信号时试图找到一个合理的解决方案来找到正确的相位,但往往只是:一个合理的解决方案,而不是完美一个。这就是为什么您会听到这种金属的声音。那是你的信号相位不太正确(也称为 "phasiness")。
我相信您对 librosa
的函数调用是完全正确的。它可能不是地球上最伟大的实现。给PyRubberband a try. It's based on Rubberband (a C++ library) and has a good reputation.
我尝试使用 librosa 和 pitch_shift 来自 librosa。 我录了一些我的声音并使用了这个代码:
sampling_rate= 44100
y, sr = librosa.load(directory, sr=sampling_rate) # y is a numpy array of the wav file, sr = sample rate
y_shifted = librosa.effects.pitch_shift(y, sr, n_steps=4, bins_per_octave=24) # shifted by 4 half steps
librosa.output.write_wav(directory, y_shifted, sr=sampling_rate, norm=False)
它工作正常 - 差不多。
我听到我的新声音有些杂音(pitch_shifting 后)
有什么需要用的吗?
没有班次:
https://vocaroo.com/i/s1qEEDvzcUHN
带班次(n_steps = 4):
变调通常涉及 STFT, the shift—usually of a magnitude spectrum along the frequency axis, and then signal reconstruction via the Griffin-Lim-algorithm (Quora-explanation Griffin-Lim 的工作原理)。
问题在于,当我们移动幅度谱时,我们就是这么做的——而忽略了相位! Griffin-Lim 在重建时域信号时试图找到一个合理的解决方案来找到正确的相位,但往往只是:一个合理的解决方案,而不是完美一个。这就是为什么您会听到这种金属的声音。那是你的信号相位不太正确(也称为 "phasiness")。
我相信您对 librosa
的函数调用是完全正确的。它可能不是地球上最伟大的实现。给PyRubberband a try. It's based on Rubberband (a C++ library) and has a good reputation.