当我从长音频文件创建一系列谱图时,颜色强度明显变化

0 投票
0 回答
22 浏览
提问于 2025-04-11 23:46

我正在使用Python、librosa和numpy。我的音频是立体声,采样率为44.1k,文件大小大约2GB,时长3小时。

首先,我把音频转换成单声道,然后每60秒分成一块,计算每块的最大音量。

接下来,我用这些最大音量中的最高值作为全局最大音量的参考,来生成声谱图。

在这个过程中,我使用的高频和低频范围、分贝的高低值、FFT的点数、希望的长度和梅尔频率都是一样的。

采样率和最大音量参考也保持一致。

基本上就是为了得到全局最大音量的参考。

    for i in tqdm(range(0, len(y), samples_per_chunk)):
    y_chunk = y[i : i + samples_per_chunk]
    S = librosa.feature.melspectrogram(
        y=y_chunk,
        sr=sr,
        n_fft=n_fft,
        hop_length=hop_length,
        n_mels=n_mels,
        fmin=f_low,
        fmax=f_high,
    )
    maxpower = np.max(S)
    if maxpower > global_max_power:
        global_max_power = maxpower

然后我用这个最大音量来创建图像,并转换成分贝。

转换的公式是:

S_dB = librosa.power_to_db(

S,

ref=max_power,

amin=10 ** (db_low / 10.0),

top_db=db_high - db_low,

)

接下来渲染图像。

    plt.figure(figsize=(image_width / 100, video.get("height", 100) / 100))
    librosa.display.specshow(
        S_dB,
        sr=sr,
        cmap=audiovis.get("cmap", "magma"),
        hop_length=hop_length,
        fmin=f_low,
        fmax=f_high,
    )

如果我把图像做得很宽,不需要分块处理(使用一个小一点的文件),我就看不到音频的颜色强度变化。

但当我把音频分块处理时,这种变化就出现了,尽管控制处理的参数是一样的。

我不太确定该如何进一步诊断这个问题。

0 个回答

暂无回答

撰写回答