当我从长音频文件创建一系列谱图时,颜色强度明显变化
我正在使用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 个回答
暂无回答