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 文件。
我这里有一个代码可以在 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 文件。