void CBassAudio::SetTempoValues ( float fSampleRate, float fTempo, float fPitch, bool bReverse ) { if ( fTempo != m_fTempo ) { m_fTempo = fTempo; } if ( fPitch != m_fPitch ) { m_fPitch = fPitch; } if ( fSampleRate != m_fSampleRate ) { m_fSampleRate = fSampleRate; } m_bReversed = bReverse; // Update our attributes if ( m_pSound ) { // TODO: These are lost when the sound is not streamed in BASS_ChannelSetAttribute ( m_pSound, BASS_ATTRIB_TEMPO, m_fTempo ); BASS_ChannelSetAttribute ( m_pSound, BASS_ATTRIB_TEMPO_PITCH, m_fPitch ); BASS_ChannelSetAttribute ( m_pSound, BASS_ATTRIB_TEMPO_FREQ, m_fSampleRate ); BASS_ChannelSetAttribute ( BASS_FX_TempoGetSource ( m_pSound ), BASS_ATTRIB_REVERSE_DIR, (float)(bReverse == false ? BASS_FX_RVS_FORWARD : BASS_FX_RVS_REVERSE) ); } }
pascal OSStatus DirEventHandler(EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { DWORD srcChan=BASS_FX_TempoGetSource(chan); float dir; BASS_ChannelGetAttribute(srcChan, BASS_ATTRIB_REVERSE_DIR, &dir); if(dir<0){ BASS_ChannelSetAttribute(srcChan, BASS_ATTRIB_REVERSE_DIR, BASS_FX_RVS_FORWARD); SetControlText(16, "Playing Direction - Forward"); }else{ BASS_ChannelSetAttribute(srcChan, BASS_ATTRIB_REVERSE_DIR, BASS_FX_RVS_REVERSE); SetControlText(16,"Playing Direction - Reverse"); } return noErr; }