float CBassAudio::GetSoundBPM ( void ) { if ( m_fBPM == 0.0f && !m_bStream ) { float fData = 0.0f; // open the same file as played but for bpm decoding detection DWORD bpmChan = BASS_StreamCreateFile ( false, m_strPath, 0, 0, BASS_STREAM_DECODE ); if ( !bpmChan ) { bpmChan = BASS_MusicLoad ( false, m_strPath, 0, 0, BASS_MUSIC_DECODE|BASS_MUSIC_PRESCAN, 0 ); } // detect bpm in background and return progress in GetBPM_ProgressCallback function if ( bpmChan ) { fData = BASS_FX_BPM_DecodeGet ( bpmChan, 0, GetLength ( ), 0, BASS_FX_FREESOURCE, NULL, NULL ); } if ( BASS_ErrorGetCode ( ) != BASS_OK ) { g_pCore->GetConsole ( )->Printf ( "BASS ERROR %d in BASS_FX_BPM_DecodeGet path:%s 3d:%d loop:%d", BASS_ErrorGetCode ( ), *m_strPath, m_b3D, m_bLoop ); } else { m_fBPM = floor ( fData ); } BASS_FX_BPM_BeatFree ( bpmChan ); } return m_fBPM; }
void DecodingBPM(BOOL newStream, double startSec, double endSec, const char *fp) { char c[30]; if (newStream){ // Open file for bpm decoding detection hBPM = BASS_StreamCreateFile(FALSE, fp, 0, 0, BASS_STREAM_DECODE); if (!hBPM) hBPM = BASS_MusicLoad(FALSE, fp, 0, 0, BASS_MUSIC_DECODE|BASS_MUSIC_PRESCAN, 0); } orgBPM = BASS_FX_BPM_DecodeGet(hBPM, startSec, endSec, 0, BASS_FX_BPM_BKGRND|BASS_FX_BPM_MULT2|BASS_FX_FREESOURCE, (BPMPROCESSPROC*)GetBPM_Process); // don't bother to update the BPM view if it's zero if (orgBPM) { // update the bpm view sprintf(c,"BPM: %0.2f", GetNewBPM(hBPM)); MESS(IDC_SBPM,WM_SETTEXT,0,c); } }
float BassPlayer::bpmCalc(const QUrl & uri) { int cochan; if (uri.isLocalFile()) cochan = open(uri.toLocalFile(), LOCAL_BPM_ATTRS);// BASS_StreamCreateFile(false, uri.toLocalFile().toStdWString().c_str(), 0, 0, LOCAL_BPM_ATTRS); else cochan = openRemote(uri.toString(), REMOTE_BPM_ATTRS); //BASS_StreamCreateURL(uri.toString().toStdString().c_str(), 0, REMOTE_BPM_ATTRS, NULL, 0); if (cochan) { int playBackDuration = BASS_ChannelBytes2Seconds(cochan, BASS_ChannelGetLength(cochan, BASS_POS_BYTE)); return BASS_FX_BPM_DecodeGet(cochan, 0, playBackDuration, MAKEWORD(20, 180), BASS_FX_FREESOURCE, //BASS_FX_BPM_BKGRND // BASS_FX_BPM_MULT2 NULL, NULL ); } else return 0; }