wavetable.py 文件源码

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

项目:Bigglesworth 作者: MaurizioB 项目源码 文件源码
def dropEvent(self, event):
        items = [i for i in self.items(event.pos()) if isinstance(i, WavePlaceHolderItem)]
        if not items: return
        index = items[0].index
        mimedata = event.mimeData()
        if mimedata.hasFormat('audio/wavesamples'):
            data = mimedata.data('audio/wavesamples')
            slice_range = len(data) / 256
            self.dropAction.emit(DROP_WAVE, True, self.waveobj_list[index:index + slice_range], '"{}"'.format(mimedata.text()))
            for w in xrange(slice_range):
                values = []
                for s in xrange(128):
                    values.append(audioop.getsample(data, 2, w * 128 + s) * 31)
                self.waveobj_list[index + w].setValues(values)
            for r in self.waveobj_list:
                r.preview_rect.setHighlight(False)
            self.dropAction.emit(DROP_WAVE, False, self.waveobj_list[index:index + slice_range], '')
            event.accept()
        elif mimedata.hasFormat('audio/waves'):
            start, end = map(int, str(mimedata.data('audio/waves')).split(':'))
            if start == index:
                event.ignore()
                return
            wave_len = end - start + 1
            if start == end:
                drop_text = 'wave {}'.format(start + 1)
            else:
                drop_text = 'wave {} to {}'.format(start + 1, end + 1)

            if mimedata.hasFormat('data/reference'):
                ref = mimedata.referenceData()
                if ref == self.main:
                    source = self.waveobj_list
                else:
                    source = ref.waveobj_list
                    drop_text = 'from "{}" {}'.format(ref.wavetable_name, drop_text)
            else:
                source = self.waveobj_list
            data_list = []
            self.dropAction.emit(DROP_WAVE, True, self.waveobj_list[index:index + wave_len], drop_text)
            for wave_obj in source[start:end + 1]:
                data_list.append(wave_obj.values)
            for i, wave_obj in enumerate(self.waveobj_list[index:index + wave_len]):
                wave_obj.setValues(data_list[i])
            for r in self.waveobj_list:
                r.preview_rect.setHighlight(False)
            selection = tuple(xrange(index, index + wave_len))
            for i, r in enumerate(self.waveobj_list):
                r.preview_rect.setSelected(True if i in selection else False)
            self.selection = selection
            self.dropAction.emit(DROP_WAVE, False, self.waveobj_list[index:index + wave_len], '')
            event.accept()
        else:
            event.ignore()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号