wave_import.py 文件源码

python
阅读 24 收藏 0 点赞 0 评论 0

项目:Bigglesworth 作者: MaurizioB 项目源码 文件源码
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)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号