2024-04-20 00:39:02 发布
网友
如果使用Librosa进行人声分离,可以分别绘制人声和背景音乐,但我想从人声部分提取音频,并且人声部分的频谱位于名为“S_foreground”的变量中(请访问上述链接进行演示)。如何获得前景(人声)音频?在
您可能已经注意到S_foreground来自S_full,它来自一个名为magphase的函数。根据有关此功能的文档,它可以
S_foreground
S_full
magphase
Separate a complex-valued spectrogram D into its magnitude (S) and phase (P) components, so that D = S * P.
因为magphase中的实际参数
S_full, phase = librosa.magphase(librosa.stft(y))
是stft(y),这是y的短时傅里叶变换,初始的ndarray,我想你需要做的是计算一个新的D:
stft(y)
y
ndarray
D
D_foreground = S_foreground * phase
然后把它扔给逆stft函数(librosa.istft):
librosa.istft
y_foreground = librosa.istft(D_foreground)
之后,您可以使用输出函数:
librosa.output.write_wav(output_file_path, y_foreground, sr)
老实说,我对这些理论上的东西并不熟悉(我用这种方法输出的质量差可能就是一个证明),但以上是我对如何导出音频的猜测。结果显示,保真度非常差(至少在我的情况下),所以如果你真的关心音频质量,你可能想试试其他软件。在
您可能已经注意到
S_foreground
来自S_full
,它来自一个名为magphase
的函数。根据有关此功能的文档,它可以因为
magphase
中的实际参数S_full, phase = librosa.magphase(librosa.stft(y))
是
stft(y)
,这是y
的短时傅里叶变换,初始的ndarray
,我想你需要做的是计算一个新的D
:D_foreground = S_foreground * phase
然后把它扔给逆stft函数(
librosa.istft
):y_foreground = librosa.istft(D_foreground)
之后,您可以使用输出函数:
librosa.output.write_wav(output_file_path, y_foreground, sr)
老实说,我对这些理论上的东西并不熟悉(我用这种方法输出的质量差可能就是一个证明),但以上是我对如何导出音频的猜测。结果显示,保真度非常差(至少在我的情况下),所以如果你真的关心音频质量,你可能想试试其他软件。在
相关问题 更多 >
编程相关推荐