diff --git a/src/projectM-engine/MoodBar.cpp b/src/projectM-engine/MoodBar.cpp index 0d93b9e6b..8780229bb 100644 --- a/src/projectM-engine/MoodBar.cpp +++ b/src/projectM-engine/MoodBar.cpp @@ -64,7 +64,7 @@ void MoodBar::resetBuffer() { } void MoodBar::calculateMood - (float * rgb_left, float * rgb_right, float * rgb_avg) { + (float * rgb_avg) { unsigned int i; float real_left, real_right, real_avg; @@ -72,8 +72,6 @@ void MoodBar::calculateMood for (i = 0; i < 24; ++i) { - m_amplitudes_left[i] = 0.f; - m_amplitudes_right[i] = 0.f; m_amplitudes_avg[i] = 0.f; } @@ -84,33 +82,24 @@ void MoodBar::calculateMood real_left = m_pcm->pcmdataL[2*i]; imag_left = m_pcm->pcmdataL[2*i + 1]; real_right = m_pcm->pcmdataR[2*i]; imag_right = m_pcm->pcmdataR[2*i + 1]; + real_avg = (real_left + real_right) / 2.0; imag_avg = (imag_left + imag_right) / 2.0; - m_amplitudes_left[m_barkband_table[i]] += sqrtf (real_left*real_left + imag_left*imag_left); - m_amplitudes_right[m_barkband_table[i]] += sqrtf (real_right*real_right + imag_right*imag_right); m_amplitudes_avg[m_barkband_table[i]] += sqrtf (real_avg*real_avg + imag_avg*imag_avg); } - for (i= 0; i < 3; i++) { - rgb_left[i] = 0.0; - rgb_right[i] = 0.0; + for (i= 0; i < 3; i++) { rgb_avg[i] = 0.0; } for (i = 0; i < 24; ++i) { - rgb_left[i/8] += m_amplitudes_left[i] * m_amplitudes_left[i]; - rgb_right[i/8] += m_amplitudes_right[i] * m_amplitudes_right[i]; rgb_avg[i/8] += m_amplitudes_avg[i] * m_amplitudes_avg[i]; } for (i = 0; i < 3; i++) { - - rgb_left[i] = sqrtf (rgb_left[i]); - rgb_right[i] = sqrtf (rgb_right[i]); rgb_avg[i] = sqrtf (rgb_avg[i]); - } @@ -120,9 +109,9 @@ void MoodBar::calculateMood //stretchNormalize(rgb_right); //stretchNormalize(rgb_avg); - standardNormalize(rgb_left); - standardNormalize(rgb_right); - standardNormalize(rgb_avg); + //standardNormalize(rgb_left); + //standardNormalize(rgb_right); + stretchNormalize(rgb_avg); #if 0 @@ -191,14 +180,14 @@ void MoodBar::stretchNormalize (float * rgb) if (numvals == 0) return; - //int oldcurrent = m_ringBuffers[c].current(); + //int oldcurrent = m_ringBuffers[c].current(); + mini = maxi = m_ringBuffers[c].back(); // Compute max and min values of the array for (i = 1; i < numvals; i++) { - float _tmpval = m_ringBuffers[c].back(); if (_tmpval > maxi) maxi = _tmpval; @@ -206,6 +195,8 @@ void MoodBar::stretchNormalize (float * rgb) mini = _tmpval; } +if (c==2) std::cerr << "max / min : " << maxi << " / " << mini << std::endl; + //assert((oldcurrent % RingBuffer::RING_BUFFER_SIZE) == (m_ringBuffers[c].current() % RingBuffer::RING_BUFFER_SIZE)); // Compute array average excluding the maximum and minimum ranges @@ -215,11 +206,13 @@ void MoodBar::stretchNormalize (float * rgb) if(_tmpval != mini && _tmpval != maxi) { - avg += _tmpval / ((float) numvals); + avg += _tmpval / numvals; t++; } } - + + if (c==2) std::cerr << "avg (-max -min): " << avg << std::endl; + // Now compute average values if we partition the elements into // two sets segmented by the previously computed average // Again we exclude the max and min elements. @@ -244,9 +237,17 @@ void MoodBar::stretchNormalize (float * rgb) // This normalizes the computations in the previous for loop // so they represent proper averages of their respective sets + + if (c==2) { + std::cerr << "tu / tb : " << tu << "/" << tb << std::endl; + std::cerr << "avgu / avgb (unnorm): " << avgu << "/" << avgb << std::endl; +} avgu /= (float) tu; avgb /= (float) tb; + if (c==2) + std::cerr << "avgu / avgb: " << avgu << "/" << avgb << std::endl; + tu = 0.f; tb = 0.f; @@ -272,20 +273,41 @@ void MoodBar::stretchNormalize (float * rgb) } } } - + + avguu /= (float) tu; avgbb /= (float) tb; - //std::cerr << "avguu: " << avguu << ", avgbb: " << avgbb << std::endl; + if (c== 2) + std::cerr << "avguu: " << avguu << ", avgbb: " << avgbb << std::endl; // lost from here- what is theory behind this? mini = projectM_fmax (avg + (avgb - avg) * 2.f, avgbb); maxi = projectM_fmin (avg + (avgu - avg) * 2.f, avguu); + + if (c == 2) { + std::cerr << "mini: " << mini << std::endl; + std::cerr << "maxi: " << maxi << std::endl; + } + delta = maxi - mini; if (delta == 0.f) delta = 1.f; - rgb[c] = projectM_fmin(1.f, projectM_fmax(0.f, (rgb[c] - mini) / delta)); + + if (c==2) { + std::cerr << "delta = " << delta << std::endl; + } + if (c==2) { + std::cerr << "rgb_orig[2] " << rgb[c] << std::endl; + } + + rgb[c] = projectM_fmin(1.f, projectM_fmax(0.f, (rgb[c] - mini) / delta)); + + if (c==2) { + std::cerr << "rgb_norm[2] " << rgb[c] << std::endl; + } + } } diff --git a/src/projectM-engine/MoodBar.hpp b/src/projectM-engine/MoodBar.hpp index 6e16f734c..205d558b6 100644 --- a/src/projectM-engine/MoodBar.hpp +++ b/src/projectM-engine/MoodBar.hpp @@ -43,7 +43,7 @@ public: /// Calculate rgb mood values for both left and right channels. /// Uses the pcm instance's latest assignment into its /// pcmL/R data buffers as inputs - void calculateMood(float * rgb_left, float * rgb_right, float * rgb_avg); + void calculateMood(float * rgb_avg); void stretchNormalize (float * colors); diff --git a/src/projectM-engine/Renderer.cpp b/src/projectM-engine/Renderer.cpp index 58faf671c..93f122b32 100644 --- a/src/projectM-engine/Renderer.cpp +++ b/src/projectM-engine/Renderer.cpp @@ -288,7 +288,6 @@ Renderer::~Renderer() { int x; #if 1 - std::cerr << "freeing grid elements" << std::endl; assert(gx > 0); for(x = 0; x < this->gx; x++) { diff --git a/src/projectM-engine/RingBuffer.hpp b/src/projectM-engine/RingBuffer.hpp index c9234bc9d..414139211 100644 --- a/src/projectM-engine/RingBuffer.hpp +++ b/src/projectM-engine/RingBuffer.hpp @@ -7,7 +7,7 @@ class RingBuffer { public: //static const unsigned long RING_BUFFER_SIZE = 1024; - static const unsigned long RING_BUFFER_SIZE = 1024; + static const unsigned long RING_BUFFER_SIZE = 32768; private: kind buffer[RING_BUFFER_SIZE]; diff --git a/src/projectM-engine/projectM.cpp b/src/projectM-engine/projectM.cpp index 0f45bba8e..736cee6b7 100755 --- a/src/projectM-engine/projectM.cpp +++ b/src/projectM-engine/projectM.cpp @@ -68,8 +68,7 @@ double smoothDuration = 5; //int smoothFrame = 0; int oldFrame = 1; -DLLEXPORT projectM::projectM(int gx, int gy, int fps, int texsize, int width, int height, std::string preset_url) :renderer(0), renderTarget(0), smoothFrame(0), beatDetect ( 0 ), presetURL(preset_url), moodBar(0) -{ +DLLEXPORT projectM::projectM(int gx, int gy, int fps, int texsize, int width, int height, std::string preset_url) :renderer(0), renderTarget(0), presetURL(preset_url), smoothFrame(0), beatDetect ( 0 ) { presetURL = preset_url; projectM_reset(); projectM_init(gx, gy, fps, texsize, width, height); @@ -86,8 +85,6 @@ projectM::~projectM() { delete(textureManager); if (beatDetect) delete(beatDetect); - if (moodBar) - delete(moodBar); if (renderTarget) delete(renderTarget); @@ -95,8 +92,8 @@ projectM::~projectM() { } DLLEXPORT projectM::projectM(std::string config_file) : - renderer(0), renderTarget(0), smoothFrame(0), beatDetect ( 0 ), moodBar(0) -{ + renderer(0), renderTarget(0), smoothFrame(0), beatDetect ( 0 ) { + projectM_reset(); readConfig(config_file); @@ -137,10 +134,9 @@ DLLEXPORT void projectM::renderFrame() int index = 0; int x, y; #endif - + // printf("Start of loop at %d\n",timestart); mspf= ( int ) ( 1000.0/ ( float ) presetInputs.fps ); //milliseconds per frame - #ifndef WIN32 presetInputs.time = getTicks ( &startTime ) * 0.001; @@ -162,32 +158,6 @@ DLLEXPORT void projectM::renderFrame() beatDetect->detectFromSamples(); -#ifndef USE_MOODBAR -//#define USE_MOODBAR -#endif - - -#ifdef USE_MOODBAR - float rgb_left[3], rgb_right[3], rgb_avg[3]; - // moodBar->calculateMood(rgb_left, rgb_right, rgb_avg); - - //rgb_avg[0] = presetInputs.bass_att; - //rgb_avg[1] = presetInputs.mid_att; - //rgb_avg[2] = presetInputs.treb_att; - - //moodBar->stretchNormalize(rgb_avg); - - //presetInputs.bass_att = rgb_avg[0]; - //presetInputs.mid_att = rgb_avg[1]; - //presetInputs.treb_att = rgb_avg[2]; - - presetInputs.mood_r = rgb_avg[0]; - presetInputs.mood_g = rgb_avg[1]; - presetInputs.mood_b = rgb_avg[2]; - - -#endif - DWRITE ( "=== vol: %f\tbass: %f\tmid: %f\ttreb: %f ===\n", beatDetect->vol,beatDetect->bass,beatDetect->mid,beatDetect->treb ); DWRITE ( "=== bass_att: %f ===\n", @@ -400,9 +370,6 @@ void projectM::projectM_reset() assert(!beatDetect); beatDetect = new BeatDetect(); - //moodBar = new MoodBar(beatDetect->pcm); - - /* Preset loading function */ initPresetTools(); #if 0 /* Load default preset directory */ diff --git a/src/projectM-engine/projectM.hpp b/src/projectM-engine/projectM.hpp index cf1a58b6e..04068ec7c 100755 --- a/src/projectM-engine/projectM.hpp +++ b/src/projectM-engine/projectM.hpp @@ -93,10 +93,8 @@ class MoodBar; #endif /** KEEP THIS UP TO DATE! */ -#define PROJECTM_VERSION "1.02.00" -#define PROJECTM_TITLE "projectM 1.02.00" - - +#define PROJECTM_VERSION "1.00.00" +#define PROJECTM_TITLE "projectM 1.00.00" /** Thread state */ typedef enum { GO, STOP } PMThreadState; diff --git a/src/projectM-xmms/main.cpp b/src/projectM-xmms/main.cpp index c47605853..a0e876558 100755 --- a/src/projectM-xmms/main.cpp +++ b/src/projectM-xmms/main.cpp @@ -280,7 +280,7 @@ extern "C" void projectM_xmms_init(void) printf("projectM plugin: Initializing\n"); - SDL_EnableUNICODE(1); + //SDL_EnableUNICODE(1); sem = SDL_CreateSemaphore(1); worker_thread = SDL_CreateThread ( *worker_func, NULL); @@ -375,13 +375,13 @@ std::string read_config() strcpy(projectM_home, home); strcpy(projectM_home+strlen(home), "/.projectM/config.inp"); projectM_home[strlen(home)+strlen("/.projectM/config.inp")]='\0'; - + if((out = fopen(projectM_home,"w"))!=0) { if ((in = fopen(projectM_config, "r")) != 0) { - + while(fgets(num,80,in)!=NULL) { fputs(num,out);