void projectM::selectPrevious(const bool hardCut) { if (m_presetChooser->empty()) return; if (!hardCut) { timeKeeper->StartSmoothing(); } m_presetChooser->previousPreset(*m_presetPos); if (!hardCut) { switchPreset(m_activePreset2); } else { switchPreset(m_activePreset); timeKeeper->StartPreset(); } presetSwitchedEvent(hardCut, **m_presetPos); // m_activePreset = m_presetPos->allocate(); // renderer->SetPipeline(m_activePreset->pipeline()); // renderer->setPresetName(m_activePreset->name()); //timeKeeper->StartPreset(); }
void projectM::switchPreset(const bool hardCut) { std::string result; if (!hardCut) { result = switchPreset(m_activePreset2); } else { result = switchPreset(m_activePreset); if (result.empty()) timeKeeper->StartPreset(); } if (result.empty() && !hardCut) { timeKeeper->StartSmoothing(); } if (result.empty()) presetSwitchedEvent(hardCut, **m_presetPos); else presetSwitchFailedEvent(hardCut, **m_presetPos, result); }
void projectM::selectRandom(const bool hardCut) { if (m_presetChooser->empty()) return; if (!hardCut) { timeKeeper->StartSmoothing(); } *m_presetPos = m_presetChooser->weightedRandom(hardCut); if (!hardCut) { switchPreset(m_activePreset2); } else { switchPreset(m_activePreset); timeKeeper->StartPreset(); } presetSwitchedEvent(hardCut, **m_presetPos); }
void projectM::selectNext(const bool hardCut) { if (m_presetChooser->empty()) return; if (!hardCut) { timeKeeper->StartSmoothing(); std::cout << "start smoothing" << std::endl; } m_presetChooser->nextPreset(*m_presetPos); if (!hardCut) { switchPreset(m_activePreset2); } else { switchPreset(m_activePreset); timeKeeper->StartPreset(); } presetSwitchedEvent(hardCut, **m_presetPos); }
void projectM::selectPreset ( unsigned int index, bool hardCut) { if (m_presetChooser->empty()) return; if (!hardCut) { timeKeeper->StartSmoothing(); } *m_presetPos = m_presetChooser->begin(index); if (!hardCut) { switchPreset(m_activePreset2); } else { switchPreset(m_activePreset); timeKeeper->StartPreset(); } presetSwitchedEvent(hardCut, **m_presetPos); }
void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode) { switch( event ) { case PROJECTM_KEYDOWN: switch( keycode ) { case PROJECTM_K_UP: beatDetect->beat_sensitivity += 0.25; if (beatDetect->beat_sensitivity > 5.0) beatDetect->beat_sensitivity = 5.0; break; case PROJECTM_K_DOWN: beatDetect->beat_sensitivity -= 0.25; if (beatDetect->beat_sensitivity < 0) beatDetect->beat_sensitivity = 0; break; case PROJECTM_K_h: renderer->showhelp = !renderer->showhelp; renderer->showstats= false; renderer->showfps=false; case PROJECTM_K_F1: renderer->showhelp = !renderer->showhelp; renderer->showstats=false; renderer->showfps=false; break; case PROJECTM_K_y: this->setShuffleEnabled(!this->isShuffleEnabled()); break; case PROJECTM_K_F5: if (!renderer->showhelp) renderer->showfps = !renderer->showfps; break; case PROJECTM_K_F4: if (!renderer->showhelp) renderer->showstats = !renderer->showstats; break; case PROJECTM_K_F3: { renderer->showpreset = !renderer->showpreset; break; } case PROJECTM_K_F2: renderer->showtitle = !renderer->showtitle; break; #ifndef MACOS case PROJECTM_K_F9: #else case PROJECTM_K_F8: #endif renderer->studio = !renderer->studio; break; case PROJECTM_K_ESCAPE: { // exit( 1 ); break; } case PROJECTM_K_f: break; case PROJECTM_K_a: renderer->correction = !renderer->correction; break; case PROJECTM_K_b: break; case PROJECTM_K_n: m_presetChooser->nextPreset(*m_presetPos); presetSwitchedEvent(true, **m_presetPos); m_activePreset = m_presetPos->allocate(this->presetInputs, this->presetOutputs); renderer->setPresetName(m_activePreset->presetName()); timeKeeper->StartPreset(); break; case PROJECTM_K_r: if (m_presetChooser->empty()) break; *m_presetPos = m_presetChooser->weightedRandom(); presetSwitchedEvent(true, **m_presetPos); m_activePreset = m_presetPos->allocate(this->presetInputs, this->presetOutputs); assert(m_activePreset.get()); renderer->setPresetName(m_activePreset->presetName()); timeKeeper->StartPreset(); break; case PROJECTM_K_p: if (m_presetChooser->empty()) break; // Case: idle preset currently running, selected last preset of chooser else if (*m_presetPos == m_presetChooser->end()) { --(*m_presetPos); } else if (*m_presetPos != m_presetChooser->begin()) { --(*m_presetPos); } else { *m_presetPos = m_presetChooser->end(); --(*m_presetPos); } m_activePreset = m_presetPos->allocate(this->presetInputs, this->presetOutputs); renderer->setPresetName(m_activePreset->presetName()); timeKeeper->StartPreset(); break; case PROJECTM_K_l: renderer->noSwitch=!renderer->noSwitch; break; case PROJECTM_K_s: renderer->studio = !renderer->studio; case PROJECTM_K_i: break; case PROJECTM_K_z: break; case PROJECTM_K_0: // nWaveMode=0; break; case PROJECTM_K_6: // nWaveMode=6; break; case PROJECTM_K_7: // nWaveMode=7; break; case PROJECTM_K_m: break; case PROJECTM_K_t: break; default: break; } default: break; } }
DLLEXPORT void projectM::renderFrame() { #ifdef DEBUG char fname[1024]; FILE *f = NULL; int index = 0; int x, y; #endif timeKeeper->UpdateTimers(); //printf("A:%f, B:%f, S:%f\n", timeKeeper->PresetProgressA(), timeKeeper->PresetProgressB(), timeKeeper->SmoothRatio()); mspf= ( int ) ( 1000.0/ ( float ) presetInputs.fps ); //milliseconds per frame setupPresetInputs(&m_activePreset->presetInputs()); m_activePreset->presetInputs().frame = timeKeeper->PresetFrameA(); m_activePreset->presetInputs().progress= timeKeeper->PresetProgressA(); beatDetect->detectFromSamples(); //m_activePreset->evaluateFrame(); if ( renderer->noSwitch==false && !m_presetChooser->empty() ) { if ( timeKeeper->PresetProgressA()>=1.0 && !timeKeeper->IsSmoothing()) { timeKeeper->StartSmoothing(); // printf("Start Smooth\n"); // if(timeKeeper->IsSmoothing())printf("Confirmed\n"); switchPreset(m_activePreset2, &m_activePreset->presetInputs() == &presetInputs ? presetInputs2 : presetInputs, &m_activePreset->presetOutputs() == &presetOutputs ? presetOutputs2 : presetOutputs); presetSwitchedEvent(false, **m_presetPos); } else if ( ( beatDetect->vol-beatDetect->vol_old>beatDetect->beat_sensitivity ) && timeKeeper->CanHardCut() ) { // printf("Hard Cut\n"); switchPreset(m_activePreset, presetInputs, presetOutputs); timeKeeper->StartPreset(); presetSwitchedEvent(true, **m_presetPos); } } if ( timeKeeper->IsSmoothing() && timeKeeper->SmoothRatio() <= 1.0 && !m_presetChooser->empty() ) { // printf("start thread\n"); assert ( m_activePreset.get() ); #ifdef USE_THREADS pthread_cond_signal(&condition); pthread_mutex_unlock( &mutex ); #endif m_activePreset->evaluateFrame(); renderer->PerPixelMath ( &m_activePreset->presetOutputs(), &presetInputs ); renderer->WaveformMath ( &m_activePreset->presetOutputs(), &presetInputs, true ); #ifdef USE_THREADS pthread_mutex_lock( &mutex ); #else evaluateSecondPreset(); #endif PresetMerger::MergePresets ( m_activePreset->presetOutputs(),m_activePreset2->presetOutputs(),timeKeeper->SmoothRatio(),presetInputs.gx, presetInputs.gy ); } else { if ( timeKeeper->IsSmoothing() && timeKeeper->SmoothRatio() > 1.0 ) { //printf("End Smooth\n"); m_activePreset = m_activePreset2; timeKeeper->EndSmoothing(); } //printf("Normal\n"); m_activePreset->evaluateFrame(); renderer->PerPixelMath ( &m_activePreset->presetOutputs(), &presetInputs ); renderer->WaveformMath ( &m_activePreset->presetOutputs(), &presetInputs, false ); } // std::cout<< m_activePreset->absoluteFilePath()<<std::endl; // renderer->presetName = m_activePreset->absoluteFilePath(); renderer->RenderFrame ( &m_activePreset->presetOutputs(), &presetInputs ); count++; #ifndef WIN32 /** Frame-rate limiter */ /** Compute once per preset */ if ( this->count%100==0 ) { this->renderer->realfps=100.0/ ( ( getTicks ( &timeKeeper->startTime )-this->fpsstart ) /1000 ); this->fpsstart=getTicks ( &timeKeeper->startTime ); } int timediff = getTicks ( &timeKeeper->startTime )-this->timestart; if ( timediff < this->mspf ) { // printf("%s:",this->mspf-timediff); int sleepTime = ( unsigned int ) ( this->mspf-timediff ) * 1000; // DWRITE ( "usleep: %d\n", sleepTime ); if ( sleepTime > 0 && sleepTime < 100000 ) { if ( usleep ( sleepTime ) != 0 ) {}} } this->timestart=getTicks ( &timeKeeper->startTime ); #endif /** !WIN32 */ }