首页 > 解决方案 > PyQT Graph -- 图形显示巨大

问题描述

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

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

在此处输入图像描述

这是我的代码:

 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 不是(?)。我不知道如何调整波形数据以使其适合窗口。任何回应和建议都会有很大帮助!

标签: pythonpyqtgraph

解决方案


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

1:调整Y-limit

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

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

您可以在此处查看文档。

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

2:调整你的数据

如前所述,音频数据在 -1 和 +1 之间缩放时往往最有用;我们更容易看一眼并立即了解幅度是否正确(例如,如果我们正在测试增益程序)。除了内置的wave模块之外,还有很多其他的 Python 库,它们会像PySoundFile或许多其他模块一样为您处理这件事要容易得多(有关在 Python 中读取 .wav 文件的其他方法,请参阅此其他SO 帖子)。

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

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 模块不支持许多音频用例(据我所知,只有单声道 16 位音频)。

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


推荐阅读