PyQTGraph -- 图形显示是巨大的

PyQT Graph -- Graph display is huge

我这里有一个代码可以在 PyQT Graph 中显示音频文件的波形,不幸的是这个图看起来太大了。

我还不能附上图片,所以我会提供我制作的图表的屏幕截图 link。

这是我的代码:

 self.waveFile = wave.open(audio,'rb')
 self.format = pyaudio.paInt16
 channel = self.waveFile.getnchannels()
 self.rate = self.waveFile.getframerate()
 self.frame = self.waveFile.getnframes()
 self.stream = p.open(format=self.format, 
                         channels=channel,
                         rate=self.rate,
                         output=True)

 durationF = self.frame / float(self.rate)
 self.data_int = self.waveFile.readframes(self.frame)
 self.data_plot = np.fromstring(self.data_int, 'Int16')
 self.data_plot.shape = -1, 2
 self.data_plot = self.data_plot.T
 self.time = np.arange(0, self.frame) * (1.0 / self.rate)

 w = pg.plot()
 w.plot(self.time, self.data_plot[0])

我需要调整 X 和 Y 范围限制吗?我应该调整 Y 峰值吗?如您所见,我使用的音频文件中的 X(time) 匹配时长为 8 秒。但是 Y 不是(?)。我不确定如何调整波形数据以使其适合 window。任何回复和建议都会有很大的帮助!

我认为有几个选项取决于您要显示的内容。

1:调整Y-limit

最简单的解决方案是缩放 Y 轴。

# See docs for function setYrange
# setYRange(min, max, padding=None, update=True)
w.setRange(YRange=[min,max])

您可以查看文档 here

也就是说,如果您想保持所有音频值与当前相同,尽管您真的需要这些值的音频数据吗?通常至少出于科学目的,音频数据显示为 -1 和 +1 之间的浮点数。

2:调整你的数据

如前所述,音频数据在 -1 和 +1 之间缩放时往往最有用;我们只是更容易看一眼它并立即了解幅度是否正确(例如,如果我们正在测试增益程序)。在 Python).

中,除了内置 wave module, which will handle this much easier for you like PySoundFile or many others (see this other SO post 之外,还有许多其他 Python 库用于读取 .wav 文件的其他方法。

否则,您可以使用类似这样的方法将从 wave 模块接收到的数据转换为浮点数据(代码支持 yeeking):

import wave
import struct
import sys

def wav_to_floats(wave_file):
    w = wave.open(wave_file)
    astr = w.readframes(w.getnframes())
    # convert binary chunks to short 
    a = struct.unpack("%ih" % (w.getnframes()* w.getnchannels()), astr)
    a = [float(val) / pow(2, 15) for val in a]
    return a

# read the wav file specified as first command line arg
signal = wav_to_floats(sys.argv[1])
print "read "+str(len(signal))+" frames"
print  "in the range "+str(min(signal))+" to "+str(min(signal))

如果可能,在这种情况下使用库总是更好,因为 wave module 目前不支持许多音频用例(据我所知,仅支持单声道 16 位音频)。

注意:如果你确实将它转换为 -1 到 +1 数据,可能仍然值得像第 1 部分中解释的那样调整 Y-Limit。只是为了避免加载时奇怪的缩放不同的 .wav 文件。