def setStereoWave(self, stream):
sampwidth = stream.getsampwidth()
left_delta = 2**(8 * sampwidth)
right_delta = left_delta * 2
frames = stream.getnframes()
ratio = frames / 255
data = stream.readframes(float('inf'))
left_data = audioop.tomono(data, sampwidth, 1, 0)
right_data = audioop.tomono(data, sampwidth, 0, 1)
wavepath = QtGui.QPainterPath()
try:
for frame_set in xrange(256):
left_min = left_max = right_min = right_max = 0
for frame in xrange(ratio):
try:
pos = frame + frame_set * ratio
left_value = audioop.getsample(left_data, sampwidth, pos)
left_min = min(left_min, left_value)
left_max = max(left_max, left_value)
right_value = audioop.getsample(right_data, sampwidth, pos)
right_min = min(right_min, right_value)
right_max = max(right_max, right_value)
except:
break
wavepath.moveTo(frame_set, left_delta - left_min)
wavepath.lineTo(frame_set, left_delta - left_max)
wavepath.moveTo(frame_set, right_delta - right_min)
wavepath.lineTo(frame_set, right_delta - right_max)
# left_wavepath.lineTo(frame, left_sampwidth_int - left_value)
# right_wavepath.lineTo(frame, right_sampwidth_int - right_value)
except:
pass
# left_wavepath.addPath(right_wavepath)
self.wavepath = self.scene.addPath(wavepath)
self.wavepath.setPen(self.pen)
self.fitInView(0, 0, 256, right_delta)
self.centerOn(self.wavepath)
self.setBackgroundBrush(QtCore.Qt.white)
评论列表
文章目录