【问题标题】:Wav audio level is too largeWav 音频电平太大
【发布时间】:2020-07-29 18:55:04
【问题描述】:

我有一个用于“玻璃破碎”声音的单声道 wav 文件。当我使用 librosa 库在 python 中以图形方式显示它的级别时,它显示了非常大的幅度范围,在 +/ 20000 而不是 +/- 1 之间。当我使用 Audacity 打开相同的 wav 文件时,级别在 +/- 1 之间。

我的问题是是什么导致了显示幅度级别的这种差异以及如何在 Python 中纠正它? MinMax 缩放会扭曲声音,如果可能,我想避免它。

代码是:

from scipy.io import wavfile
fs1, glass_break_data = wavfile.read('test_break_glass_normalized.wav')

%matplotlib inline
import matplotlib.pyplot as plt
import librosa.display

sr=44100
x = glass_break_data.astype('float')

plt.figure(figsize=(14, 5))
librosa.display.waveplot(x, sr=sr)

这些是笔记本和 Audacity 中的图像:

【问题讨论】:

    标签: python-3.x audio normalization wav librosa


    【解决方案1】:

    WAV 通常使用整数值来表示单个样本,而不是浮点数。因此,您在 librosa 图中看到的内容对于 16 位/样本音频文件是准确的。

    VLC 之类的程序会在其信息对话框中显示格式,包括每个样本的位深度,以便您轻松检查。 检查格式的另一种方法可能是使用soxiffmpeg

    Audacity 将所有内容标准化为 -1 到 1 范围内的浮点数——它不会向您显示原始格式。

    librosa.load() 也是如此——它也标准化为 [-1,1]。另一方面,wavfile.read() 不规范化。有关读取 WAV 音频的更多信息,请参阅例如 this answer

    【讨论】:

      【解决方案2】:

      如果您使用librosa.load 而不是wavfile.read,它会将范围标准化为-1, 1

      glass_break_data, fs1 = librosa.load('test_break_glass_normalized.wav')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 2012-02-29
        • 1970-01-01
        • 2016-02-05
        • 2020-09-15
        • 1970-01-01
        相关资源
        最近更新 更多