【问题标题】:Is there a way to add gain to an audio signal with Librosa in python?有没有办法在 python 中使用 Librosa 为音频信号增加增益?
【发布时间】:2020-10-14 22:37:12
【问题描述】:

我目前正致力于在 Python 中增强音频。由于 Librosa 的速度和简单性,我一直在使用它,但需要使用 PyDub 来使用其他一些实用程序,例如应用增益。

有没有一种数学方法可以为 librosa.load 提供的 Numpy 数组增加增益?在 PyDub 中,这很容易,但我必须不断地在 Pydub 的 get_array_of_samples() 到 np.array 之间转换回 [-1,1) 尺度上的正确 32 位浮点表示(Librosa 默认使用)。为了简单起见,我宁愿将它们全部保存在一个库中。

此外,预先将音频信号标准化为 0 db 增益也很有用。我对音频信号处理中使用的许多术语有点陌生。

这就是我目前正在做的事情。在路上,我想让它成为一个类方法,从使用 librosa 的 numpy 数组开始,所以如果有一种方法可以在数学上将特定单元中的指定增益添加到 librosa 的 numpy 数组中,那将是理想的。

谢谢

import librosa
import numpy as np

from pydub import AudioSegment, effects

pydub_audio = AudioSegment.from_file(audio_file_path)
pydub_audio = pydub_audio.set_frame_rate(16000) # make file 16k khz frame rate

print("Original dBFS is {}".format(pydub_audio.dBFS))
pydub_audio = pydub_audio.apply_gain(20) # apply 20db of gain to introduce clipping
#pydub_audio = effects.normalize(pydub_audio)
print("New dBFS is {}".format(pydub_audio.dBFS))

pydub_array = pydub_audio.get_array_of_samples()
pydub_array = np.array(pydub_array)
print("PyDub audio type is {}".format(pydub_array.dtype))

pydub_array_32bitfloat = pydub_array.astype(np.float32, order = 'C') / 32768 # rescaling to between [-1, 1] like librosa
print("Rescaled Pydub type is {}".format(pydub_array_32bitfloat.dtype))

import soundfile as sf
sf.write(r"test_pydub_gain.wav", pydub_array_32bitfloat, samplerate = 16000, format = 'wav')

【问题讨论】:

  • 应用增益只是放大信号,它只是乘以一个比例因子。比例因子可以从分贝值计算出来。
  • 归一化到 -0dB 意味着缩放数据使得最大值为 1.0/-1.0
  • @jonnor 谢谢。现在我学到了更多,增益很简单。还要感谢关于规范化点的观点。我想这更像是“缩放”而不是标准化,对吗?归一化会更复杂,比如使用峰值幅度、RMS 等?
  • 我上面提出的是使用峰值幅度
  • @jonnor 我将如何在数学上这样做?没有使用 PyDub,就是这样。我想了解数学上发生了什么。

标签: python python-3.x audio-processing librosa pydub


【解决方案1】:

考虑一下,(如果我没记错的话),数学上的收获是: dBFS = 20 * log (level2 / level1) 所以我会将数组的所有元素乘以 10**(dBFS/20) 应用增益

【讨论】:

  • 你能问一个实际的问题吗?这是否只是一个评估。您使用哪种语言?你的代码是什么,如果有的话?
  • 我试图回答上面的问题:“有没有一种数学方法可以为 librosa.load 提供的 Numpy 数组增加增益?” .语言是 Python。如果我必须对 numpy 数组应用增益(dBFS),我会将 numpy 数组的所有元素乘以 10**(dBFS/20)
猜你喜欢
  • 2012-12-12
  • 2017-01-16
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2019-04-24
  • 2014-02-03
相关资源
最近更新 更多