diff --git a/src/projectM-engine/CustomWave.hpp b/src/projectM-engine/CustomWave.hpp index 35916fb99..94536d106 100755 --- a/src/projectM-engine/CustomWave.hpp +++ b/src/projectM-engine/CustomWave.hpp @@ -78,7 +78,7 @@ public: float * value2; float * sample_mesh; - bool enabled; /* if nonzero then wave is visible, hidden otherwise */ + bool enabled; /* if true then wave is visible, hidden otherwise */ int samples; /* number of samples associated with this wave form. Usually powers of 2 */ float sample; bool bSpectrum; /* spectrum data or pcm data */ diff --git a/src/projectM-engine/Expr.cpp b/src/projectM-engine/Expr.cpp index c13b45a70..316f65ed3 100755 --- a/src/projectM-engine/Expr.cpp +++ b/src/projectM-engine/Expr.cpp @@ -446,132 +446,6 @@ DLLEXPORT InfixOp::InfixOp ( int type, int precedence ) this->precedence = precedence; } -/* Clones a general expression */ -GenExpr *GenExpr::clone_gen_expr() -{ - GenExpr * new_gen_expr; - ValExpr * val_expr; - TreeExpr * tree_expr; - PrefunExpr * prefun_expr; - - /* Out of memory */ - if ( ( new_gen_expr = ( GenExpr* ) wipemalloc ( sizeof ( GenExpr ) ) ) == NULL ) - return NULL; - - /* Case on the type of general expression */ - switch ( new_gen_expr->type = type ) - { - - case VAL_T: /* val expression */ - if ( ( val_expr = ( ( ValExpr* ) item )->clone_val_expr() ) == NULL ) - { - free ( new_gen_expr ); - new_gen_expr = NULL; - return NULL; - } - new_gen_expr->item = ( void* ) val_expr; - break; - - case PREFUN_T: /* prefix function expression */ - if ( ( prefun_expr = ( ( PrefunExpr* ) item )->clone_prefun_expr() ) == NULL ) - { - free ( new_gen_expr ); - new_gen_expr = NULL; - return NULL; - } - new_gen_expr->item = ( void* ) prefun_expr; - break; - - case TREE_T: /* tree expression */ - if ( ( tree_expr = ( ( TreeExpr* ) item )->clone_tree_expr() ) == NULL ) - { - free ( new_gen_expr ); - new_gen_expr = NULL; - return NULL; - } - new_gen_expr->item = ( void* ) tree_expr; - break; - - default: /* unknown type, ut oh.. */ - free ( new_gen_expr ); - new_gen_expr = NULL; - return NULL; - } - - return new_gen_expr; /* Return the new (cloned) general expression */ -} - - -/* Clones a tree expression */ -TreeExpr *TreeExpr::clone_tree_expr() -{ - - abort(); - TreeExpr * new_tree_expr; - - /* Out of memory */ - if ( ( new_tree_expr = ( TreeExpr* ) wipemalloc ( sizeof ( TreeExpr ) ) ) == NULL ) - return NULL; - - /* Set each argument in TreeExpr struct */ - new_tree_expr->infix_op = infix_op; /* infix operators are in shared memory */ - new_tree_expr->gen_expr = gen_expr->clone_gen_expr(); /* clone the general expression */ - new_tree_expr->left = left->clone_tree_expr(); /* clone the left tree expression */ - new_tree_expr->right = right->clone_tree_expr(); /* clone the right tree expression */ - - return new_tree_expr; /* Return the new (cloned) tree expression */ -} - -/* Clones a value expression, currently only passes the pointer to - the value that this object represents, not a pointer to a copy of the value */ -ValExpr *ValExpr::clone_val_expr() -{ - - abort(); - ValExpr * new_val_expr; - - /* Allocate space, check for out of memory */ - if ( ( new_val_expr = ( ValExpr* ) wipemalloc ( sizeof ( ValExpr ) ) ) == NULL ) - return NULL; - - /* Set the values in the ValExpr struct */ - new_val_expr->type = type; - new_val_expr->term = term; - - /* Return the new (cloned) value expression */ - return new_val_expr; -} - -/* Clones a prefix function with its arguments */ -PrefunExpr *PrefunExpr::clone_prefun_expr() -{ - - int i; - PrefunExpr * new_prefun_expr; - - /* Out of memory */ - if ( ( new_prefun_expr = ( PrefunExpr* ) wipemalloc ( sizeof ( PrefunExpr ) ) ) == NULL ) - return NULL; - - /* Set the function argument paired with its number of arguments */ - new_prefun_expr->num_args = num_args; - new_prefun_expr->func_ptr = func_ptr; - - /* Allocate space for the expression list pointers */ - if ( ( new_prefun_expr->expr_list = ( GenExpr** ) wipemalloc ( sizeof ( GenExpr* ) *new_prefun_expr->num_args ) ) == NULL ) - { - free ( new_prefun_expr ); - new_prefun_expr = NULL; - return NULL; - } - - /* Now copy each general expression from the argument expression list */ - for ( i = 0; i < new_prefun_expr->num_args;i++ ) - new_prefun_expr->expr_list[i] = expr_list[i]->clone_gen_expr(); - - /* Finally, return the new (cloned) prefix function expression */ - return new_prefun_expr; -} PrefunExpr::PrefunExpr() {} diff --git a/src/projectM-engine/Expr.hpp b/src/projectM-engine/Expr.hpp index 9d6554dac..a33e89e95 100755 --- a/src/projectM-engine/Expr.hpp +++ b/src/projectM-engine/Expr.hpp @@ -69,7 +69,6 @@ public: ~GenExpr(); GenExpr( int type, void *item ); - GenExpr *clone_gen_expr(); float eval_gen_expr(int mesh_i, int mesh_j); static GenExpr *const_to_expr( float val ); @@ -86,8 +85,7 @@ public: ~ValExpr(); ValExpr( int type, Term *term ); - ValExpr *clone_val_expr(); - + float eval_val_expr(int mesh_i, int mesh_j); }; @@ -102,7 +100,7 @@ public: ~TreeExpr(); TreeExpr( InfixOp *infix_op, GenExpr *gen_expr, TreeExpr *left, TreeExpr *right ); - TreeExpr *clone_tree_expr(); + float eval_tree_expr(int mesh_i, int mesh_j); }; @@ -115,7 +113,6 @@ public: GenExpr **expr_list; PrefunExpr(); ~PrefunExpr(); - PrefunExpr *clone_prefun_expr(); /* Evaluates functions in prefix form */ float eval_prefun_expr(int mesh_i, int mesh_j); diff --git a/src/projectM-engine/IdlePreset.hpp b/src/projectM-engine/IdlePreset.hpp index 034a469cb..50079fa21 100644 --- a/src/projectM-engine/IdlePreset.hpp +++ b/src/projectM-engine/IdlePreset.hpp @@ -11,7 +11,7 @@ class IdlePreset { public: /// Allocate a new idle preset instance /// \param presetInputs the preset inputs instance to associate with the preset - /// \param presetOutputs the preset output instance to associate with the prest + /// \param presetOutputs the preset output instance to associate with the preset /// \returns a newly allocated auto pointer of an idle preset instance static std::auto_ptr allocate(const PresetInputs & presetInputs, PresetOutputs & presetOutputs); private: diff --git a/src/projectM-engine/MoodBar.cpp b/src/projectM-engine/MoodBar.cpp index bb28552fa..5fcf03c65 100644 --- a/src/projectM-engine/MoodBar.cpp +++ b/src/projectM-engine/MoodBar.cpp @@ -7,7 +7,7 @@ // his implementation and mine is the adaptations for "real time" normalization. A ring buffer // is used to remember a fixed window of most recently observed rgb values. All such unnormalized // values are used to calculate a "stretched" normalized set of color intensities. - +// WARNING: CODE IS VERY EXPERIMENTAL // Author: Carmelo Piccione , (C) 2007 // // Copyright: See COPYING file that comes with this distribution @@ -37,7 +37,6 @@ const unsigned int MoodBar::s_bark_bands[] = 5300, 6400, 7700, 9500, 12000, 15500 }; -/// NOTE: currently unused void MoodBar::standardNormalize(float * rgb) { float sum = 0; @@ -49,8 +48,9 @@ void MoodBar::standardNormalize(float * rgb) { if (sum == 0) return; - for (int i = 0; i < 3; i++) { + for (int i = 0; i < 3; i++) { rgb[i] /= sum; + rgb[i]= projectM_fmin(1.0, rgb[i] + sqrtf(rgb[i])); } } @@ -59,7 +59,7 @@ void MoodBar::resetBuffer() { for (int c = 0; c < 3; c++) for (unsigned int i = 0; i < RingBuffer::RING_BUFFER_SIZE; i++) - m_ringBuffers[c].append(0.f); + m_ringBuffers[c].append(.0f); } @@ -114,13 +114,19 @@ void MoodBar::calculateMood } - stretchNormalize(rgb_left); - stretchNormalize(rgb_right); - stretchNormalize(rgb_avg); + std::cerr << "rgb_avg (pre norm): " << rgb_avg[0] << "," << rgb_avg[1] << "," << rgb_avg[2] << std::endl; + + //stretchNormalize(rgb_left); + //stretchNormalize(rgb_right); + //stretchNormalize(rgb_avg); + + standardNormalize(rgb_left); + standardNormalize(rgb_right); + standardNormalize(rgb_avg); -#if 0 - std::cerr << "rgb_avg: " << rgb_avg[0] << "," << rgb_avg[1] << "," << rgb_avg[2] << std::endl; +#if 1 + std::cerr << "rgb_avg (post norm): " << rgb_avg[0] << "," << rgb_avg[1] << "," << rgb_avg[2] << std::endl; for (i = 0; i < 3; i++) { assert(rgb_avg[i] <= 1.0); assert(rgb_avg[i] >= 0.0); @@ -143,7 +149,7 @@ MoodBar::calcBarkbandTable () return; if (m_barkband_table) - free (m_barkband_table); + delete[] (m_barkband_table); m_barkband_table = new unsigned int[(m_numFreqs * sizeof (unsigned int))]; @@ -185,11 +191,11 @@ 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 m_ringBuffer of the array + // Compute max and min values of the array for (i = 1; i < numvals; i++) { @@ -200,7 +206,7 @@ void MoodBar::stretchNormalize (float * rgb) mini = _tmpval; } - assert((oldcurrent % RingBuffer::RING_BUFFER_SIZE) == (m_ringBuffers[c].current() % RingBuffer::RING_BUFFER_SIZE)); + //assert((oldcurrent % RingBuffer::RING_BUFFER_SIZE) == (m_ringBuffers[c].current() % RingBuffer::RING_BUFFER_SIZE)); // Compute array average excluding the maximum and minimum ranges for (i = 0; i < numvals; i++) @@ -213,8 +219,7 @@ void MoodBar::stretchNormalize (float * rgb) t++; } } - assert((oldcurrent % RingBuffer::RING_BUFFER_SIZE) == (m_ringBuffers[c].current() % RingBuffer::RING_BUFFER_SIZE)); - + // 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. @@ -236,8 +241,7 @@ void MoodBar::stretchNormalize (float * rgb) } } } - assert((oldcurrent % RingBuffer::RING_BUFFER_SIZE) == (m_ringBuffers[c].current() % RingBuffer::RING_BUFFER_SIZE)); - + // This normalizes the computations in the previous for loop // so they represent proper averages of their respective sets avgu /= (float) tu; @@ -246,8 +250,8 @@ void MoodBar::stretchNormalize (float * rgb) tu = 0.f; tb = 0.f; - // Computes two averages. One of m_ringBuffer that are less than previously computer lower bound and - // one of m_ringBuffer greater than the previously computed upper bound. + // Computes two averages. One of values that are less than previously computer lower bound and + // one of values greater than the previously computed upper bound. // As usual, min and max elements are excluded. for (i = 0; i < numvals; i++) { @@ -268,11 +272,12 @@ void MoodBar::stretchNormalize (float * rgb) } } } - assert((oldcurrent % RingBuffer::RING_BUFFER_SIZE) == (m_ringBuffers[c].current() % RingBuffer::RING_BUFFER_SIZE)); - + avguu /= (float) tu; avgbb /= (float) tb; + 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); @@ -281,12 +286,6 @@ void MoodBar::stretchNormalize (float * rgb) if (delta == 0.f) delta = 1.f; - // Assign colos to normalized m_ringBufferue of last item in buffer -// i = numvals-1; -// m_ringBuffers[c]. - - rgb[c] = (!projectM_isnan(rgb[c])) ? projectM_fmin(1.f, projectM_fmax(0.f, (rgb[c] - mini) / delta)) - : 0.f; - + rgb[c] = projectM_fmin(1.f, projectM_fmax(0.f, (rgb[c] - mini) / delta)); } } diff --git a/src/projectM-engine/Param.cpp b/src/projectM-engine/Param.cpp index 4f542599c..30a79d218 100755 --- a/src/projectM-engine/Param.cpp +++ b/src/projectM-engine/Param.cpp @@ -177,7 +177,7 @@ Param * Param::new_param_bool(char * name, short int flags, void * engine_val, return param; } -/* Creates a new parameter of type bool */ +/* Creates a new parameter of type string */ Param * Param::new_param_string(char * name, short int flags, void * engine_val) { Param * param; diff --git a/src/projectM-engine/PresetChooser.hpp b/src/projectM-engine/PresetChooser.hpp index adf626257..bf96e1109 100644 --- a/src/projectM-engine/PresetChooser.hpp +++ b/src/projectM-engine/PresetChooser.hpp @@ -1,6 +1,3 @@ -/** PresetChooser.hpp: - * Provides functions and iterators to select presets. Requires a preset loader upon construction. - */ /// @idea Weighted random based on user stats @@ -57,6 +54,7 @@ private: }; +/// Provides functions and iterators to select presets. Requires a preset loader upon construction class PresetChooser { public: diff --git a/src/projectM-engine/PresetLoader.cpp b/src/projectM-engine/PresetLoader.cpp index c8c35ed26..897aed5e6 100644 --- a/src/projectM-engine/PresetLoader.cpp +++ b/src/projectM-engine/PresetLoader.cpp @@ -140,10 +140,10 @@ void PresetLoader::handleDirectoryError() std::cerr << "[PresetLoader] out of memory! Are you running Windows?" << std::endl; abort(); case ENOTDIR: - std::cerr << "[PresetLoader] directory specified is not a preset directory! Cannot continue." << std::endl; + std::cerr << "[PresetLoader] directory specified is not a preset directory! Trying to continue..." << std::endl; break; case ENFILE: - std::cerr << "[PresetLoader] Your system has reached its open file limit. Giving up..." << std::endl; + std::cerr << "[PresetLoader] Your system has reached its open file limit. Trying to continue..." << std::endl; break; case EMFILE: std::cerr << "[PresetLoader] too many files in use by projectM! Bailing!" << std::endl; diff --git a/src/projectM-engine/RingBuffer.hpp b/src/projectM-engine/RingBuffer.hpp index e0d06085d..c9234bc9d 100644 --- a/src/projectM-engine/RingBuffer.hpp +++ b/src/projectM-engine/RingBuffer.hpp @@ -6,8 +6,8 @@ template 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 = 16384; private: kind buffer[RING_BUFFER_SIZE]; diff --git a/src/projectM-engine/projectM.cpp b/src/projectM-engine/projectM.cpp index 9077315bb..d1586b2d4 100755 --- a/src/projectM-engine/projectM.cpp +++ b/src/projectM-engine/projectM.cpp @@ -68,7 +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 ), moodBar(0),presetURL(preset_url) +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) { presetURL = preset_url; projectM_reset();