def createChannel(self): #ファイルを読み込み、ストリームを生成 if os.path.isfile(self.fileName): handle = pybass.BASS_StreamCreateFile( False, self.fileName, 0, 0, pybass.BASS_UNICODE | pybass.BASS_STREAM_PRESCAN | pybass.BASS_STREAM_DECODE) #逆再生用のストリームを生成。さっきのhandleはこれと同時にfreeする reverseHandle = bass_fx.BASS_FX_ReverseCreate( handle, 0.3, bass_fx.BASS_FX_FREESOURCE | pybass.BASS_STREAM_DECODE) #再生速度をコントロールするストリームを生成。 handle = bass_fx.BASS_FX_TempoCreate( reverseHandle, 0) #bass_fx.BASS_FX_FREESOURCEしない #再生の向きを元の方向に設定 pybass.BASS_ChannelSetAttribute(reverseHandle, bass_fx.BASS_ATTRIB_REVERSE_DIR, bass_fx.BASS_FX_RVS_FORWARD) elif re.search("https?://.+\..+", self.fileName) != None: handle = pybass.BASS_StreamCreateURL(self.fileName.encode(), 0, 0, 0, 0) reverseHandle = 0 else: handle = 0 reverseHandle = 0 #再生ボリュームを初期設定 pybass.BASS_ChannelSetAttribute(handle, pybass.BASS_ATTRIB_VOL, self.handleVolume) #2つのhandleを返す return handle, reverseHandle
def fastMoveReset(self): self.moveTempo = 100.0 self.rewindFlag = 0 self.fastForwardFlag = 0 pybass.BASS_ChannelSetAttribute(self.handle, bass_fx.BASS_ATTRIB_TEMPO, self.channelTempo) pybass.BASS_ChannelSetAttribute(self.reverseHandle, bass_fx.BASS_ATTRIB_REVERSE_DIR, bass_fx.BASS_FX_RVS_FORWARD) pybass.BASS_ChannelUpdate(self.handle, 0)
def rewind(self): if self.fastForwardFlag == 0 and pybass.BASS_ChannelIsActive( self.handle) == pybass.BASS_ACTIVE_PLAYING: if pybass.BASS_ChannelSetAttribute(self.reverseHandle, bass_fx.BASS_ATTRIB_REVERSE_DIR, bass_fx.BASS_FX_RVS_REVERSE): self.rewindFlag = 1 if self.moveTempo < 500.0: self.moveTempo += 50.0 pybass.BASS_ChannelSetAttribute(self.handle, bass_fx.BASS_ATTRIB_TEMPO, self.moveTempo) elif self.fastForwardFlag == 1 and pybass.BASS_ChannelIsActive( self.handle) == pybass.BASS_ACTIVE_PLAYING: self.fastMoveReset()
def changeVolume(self, num): if num < 0 or num > 200: return num = num / 100 self.handleVolume = num pybass.BASS_ChannelSetAttribute(self.handle, pybass.BASS_ATTRIB_VOL, self.handleVolume)
def setPitch(self, pitch): self.channelPitch = pitch rtn = False if pitch >= -60 and pitch <= 60: if pybass.BASS_ChannelSetAttribute(self.handle, bass_fx.BASS_ATTRIB_TEMPO_PITCH, pitch): rtn = True return rtn
def setTempo(self, tempo): self.channelTempo = tempo rtn = False if tempo >= -95 and tempo <= 5000: if pybass.BASS_ChannelSetAttribute(self.handle, bass_fx.BASS_ATTRIB_TEMPO, tempo): rtn = True return rtn
def setFreq(self, freq): self.channelFreq = freq rtn = False if freq >= 5 and freq <= 5000: # パーセントから周波数に変換 freqHz = 44100 * (freq / 100) if pybass.BASS_ChannelSetAttribute(self.handle, bass_fx.BASS_ATTRIB_TEMPO_FREQ, freqHz): rtn = True return rtn
def fastForward(self): if self.rewindFlag == 0 and self.moveTempo < 500.0 and pybass.BASS_ChannelIsActive( self.handle) == pybass.BASS_ACTIVE_PLAYING: self.moveTempo += 50.0 if pybass.BASS_ChannelSetAttribute(self.handle, bass_fx.BASS_ATTRIB_TEMPO, self.moveTempo): self.fastForwardFlag = 1 else: self.moveTempo = 0.0 elif self.rewindFlag == 1 and pybass.BASS_ChannelIsActive( self.handle) == pybass.BASS_ACTIVE_PLAYING: self.fastMoveReset()