[英]PyQT Graph — Graph display is huge
我这里有一个代码,可在PyQT图表中显示音频文件的波形,不幸的是,图表看起来很大。
我还不能附加图像,因此我将提供所制作图形的屏幕快照的链接。
这是我的代码:
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不是(?)。 我不确定如何调整波形数据以使其适合窗口内部。 任何回应和建议都会有很大帮助!
我认为有两种选择取决于您要显示的内容。
最简单的解决方案是缩放Y轴。
# See docs for function setYrange
# setYRange(min, max, padding=None, update=True)
w.setRange(YRange=[min,max])
您可以在此处查看文档。
就是说,尽管您真的需要就这些值而言的音频数据,但您还是要使所有音频值保持与当前相同。 通常,至少出于科学目的,音频数据显示为-1和+1之间的浮点数。
如前所述,当音频数据在-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限制。只是为了避免在加载不同的.wav文件时出现奇怪的缩放比例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.