python pyloudnorm 获取 PCM WAV 的 RMS 值(响度计量)

问题描述 投票:0回答:2

目前我正在使用此代码:

import sys
import soundfile as sf
import pyloudnorm as pyln

f = open( "c:\\temp\\wav_analysis.txt", "w" )
data, rate = sf.read(sys.argv[1]) # load audio (with shape (samples, channels))
meter = pyln.Meter( rate ) # create BS.1770 meter
loudness = meter.integrated_loudness(data) # measure loudness
'''output analysis data'''
for i in range(1, len(data)):
    if abs(data[i]) > 0.4:
        f.write(str( i / rate ) + "," + str(abs(data[ i ])) + "\n")

WAV 文件作为参数传入,它被读入,然后分析所有“数据”的响度。

我不想这样。 我想分析 100 毫秒的数据窗口(即一次 4410 个样本,同时将窗口移动 50 毫秒,从而创建大量响度值。

有没有办法以这样的方式调用meter.integrated_loundess()?

或者我是否需要以某种方式创建一堆从“数据”派生的 4410 值长数据数组,然后将其中的每一个一个一个地输入到meter.integrated_loudness()?

(“输出分析数据”下面的东西只是一个占位符,我想用我需要的替换它。)

编辑:请参阅下面的“切片”答案。另外,请记住,通过反复试验,我发现 Integrated_loudness 要求数据至少为 17640 个样本长(即 44100 时为 400 毫秒)。

EDIT2:在随机搜索其他内容时,我发现了这个网站:https://pysoundfile.readthedocs.io/en/0.8.0/

这个代码片段正是我最初想要快速获取 WAV 文件的 RMS 值的内容:

import numpy as np
import soundfile as sf

rms = [np.sqrt(np.mean(block**2)) for block in
       sf.blocks('myfile.wav', blocksize=1024, overlap=512)]

它不仅速度更快,而且也不受我使用meter.integrated_loudness遇到的“0.4秒”窗口限制。

python pcm rms
2个回答
1
投票

如果我正确理解你的问题,也许你可以像下面这样对数据进行切片:

import sys
import soundfile as sf
import pyloudnorm as pyln

with open("c:\\temp\\wav_analysis.txt", "w") as f:
    data, rate = sf.read(sys.argv[1]) # load audio (with shape (samples, channels))
    meter = pyln.Meter(rate) # create BS.1770 meter

    window_size = int(rate * 0.1) # window size of 100ms in samples
    hop_size = int(rate * 0.05) # hop size of 50ms in samples

    for i in range(0, len(data)-window_size, hop_size):
        window = data[i:i+window_size] # extract a 100ms window of data
        loudness = meter.integrated_loudness(window) # measure loudness of the window
        f.write(f"{str(i / rate)},{str(loudness)}" + "\n")

0
投票

虽然有点晚了,但 librosa 有一个 RMS 功能,可以在给定的窗口上运行并在轨道上跳跃。

https://librosa.org/doc/main/ generated/librosa.feature.rms.html

© www.soinside.com 2019 - 2024. All rights reserved.