| @@ -17,22 +17,19 @@ | |||||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||||
| /*******************************************************************************/ | /*******************************************************************************/ | ||||
| /* a VU meter, either horizontal or vertical. Color is a gradient | |||||
| from min_color() to max_color(). box() is used to draw the | |||||
| /* a Digital Peak Meter, either horizontal or vertical. Color is a | |||||
| gradient from min_color() to max_color(). box() is used to draw the | |||||
| individual 'lights'. division() controls how many 'lights' there | individual 'lights'. division() controls how many 'lights' there | ||||
| are. */ | |||||
| are. value() is volume in dBFS */ | |||||
| #include "VU_Meter.H" | |||||
| #include "DPM.H" | |||||
| #include <FL/Fl.H> | #include <FL/Fl.H> | ||||
| #include <FL/fl_draw.H> | #include <FL/fl_draw.H> | ||||
| VU_Meter::VU_Meter ( int X, int Y, int W, int H, const char *L ) : | |||||
| Fl_Widget( X, Y, W, H, L ) | |||||
| DPM::DPM ( int X, int Y, int W, int H, const char *L ) : | |||||
| Meter( X, Y, W, H, L ) | |||||
| { | { | ||||
| _peak = 0.0f; | |||||
| divisions( 32 ); | divisions( 32 ); | ||||
| type( FL_VERTICAL ); | type( FL_VERTICAL ); | ||||
| @@ -42,19 +39,17 @@ VU_Meter::VU_Meter ( int X, int Y, int W, int H, const char *L ) : | |||||
| max_color( FL_RED ); | max_color( FL_RED ); | ||||
| box( FL_ROUNDED_BOX ); | box( FL_ROUNDED_BOX ); | ||||
| minimum( 0.0f ); | |||||
| maximum( 1.0f ); | |||||
| value( 0.0f ); | |||||
| } | } | ||||
| /* which marks to draw beside meter */ | |||||
| const int marks [] = { -70, -50, -40, -30, -10, -3, 0, 4 }; | |||||
| void | void | ||||
| VU_Meter::draw ( void ) | |||||
| DPM::draw ( void ) | |||||
| { | { | ||||
| // draw_box( FL_FLAT_BOX, x(), y(), w(), h(), color() ); | // draw_box( FL_FLAT_BOX, x(), y(), w(), h(), color() ); | ||||
| int v = pos( value() ); | int v = pos( value() ); | ||||
| int pv = pos( _peak ); | |||||
| int pv = pos( peak() ); | |||||
| int bh = h() / _divisions; | int bh = h() / _divisions; | ||||
| int bw = w() / _divisions; | int bw = w() / _divisions; | ||||
| @@ -75,21 +70,4 @@ VU_Meter::draw ( void ) | |||||
| else | else | ||||
| draw_box( box(), x(), y() + h() - (p * bh), w(), bh, c ); | draw_box( box(), x(), y() + h() - (p * bh), w(), bh, c ); | ||||
| } | } | ||||
| if ( value() > _peak ) | |||||
| _peak = value(); | |||||
| } | |||||
| int | |||||
| VU_Meter::handle ( int m ) | |||||
| { | |||||
| switch ( m ) | |||||
| { | |||||
| case FL_PUSH: | |||||
| reset(); | |||||
| break; | |||||
| } | |||||
| return 0; | |||||
| } | } | ||||
| @@ -21,14 +21,10 @@ | |||||
| #include <FL/Fl_Valuator.H> // for FL_HORIZONTAL and FL_VERTICAL | #include <FL/Fl_Valuator.H> // for FL_HORIZONTAL and FL_VERTICAL | ||||
| class VU_Meter : public Fl_Widget | |||||
| { | |||||
| float _peak; | |||||
| #include "Meter.H" | |||||
| float _value; | |||||
| float _minimum; | |||||
| float _maximum; | |||||
| class DPM : public Meter | |||||
| { | |||||
| int _type; | int _type; | ||||
| int _divisions; | int _divisions; | ||||
| @@ -37,27 +33,20 @@ class VU_Meter : public Fl_Widget | |||||
| Fl_Color _min_color; | Fl_Color _min_color; | ||||
| Fl_Color _max_color; | Fl_Color _max_color; | ||||
| int pos ( float v ) { return ( v / _maximum ) * _divisions; } | |||||
| int pos ( float v ) | |||||
| { | |||||
| return deflection( v ) * _divisions; | |||||
| } | |||||
| protected: | protected: | ||||
| virtual void draw ( void ); | virtual void draw ( void ); | ||||
| virtual int handle ( int m ); | |||||
| public: | public: | ||||
| VU_Meter ( int X, int Y, int W, int H, const char *L = 0 ); | |||||
| void maximum( float v ) { _maximum = v; redraw(); } | |||||
| float maximum ( void ) const { return _maximum; } | |||||
| void minimum ( float v ) { _minimum = v; redraw(); } | |||||
| float minimum ( void ) const { return _minimum; } | |||||
| void value ( float v ) { if ( pos( v ) != pos( _value ) ) redraw(); _value = v; } | |||||
| float value ( void ) const { return _value; } | |||||
| DPM ( int X, int Y, int W, int H, const char *L = 0 ); | |||||
| void reset ( void ) { _peak = 0.0f; } | |||||
| // void value ( float v ) { if ( pos( v ) != pos( value() ) ) redraw(); Meter::value( v ) } | |||||
| bool divisions ( void ) const { return _divisions; } | bool divisions ( void ) const { return _divisions; } | ||||
| void divisions ( int v ) { _divisions = v; } | void divisions ( int v ) { _divisions = v; } | ||||
| @@ -1,5 +1,5 @@ | |||||
| CXXFLAGS=-ggdb -Wall -O0 | |||||
| CXXFLAGS=-ggdb -Wall -O0 -fno-rtti -fno-exceptions | |||||
| #LIBS=-L/usr/lib/sox -I/usr/include/sox -lsox -lsfx | #LIBS=-L/usr/lib/sox -I/usr/include/sox -lsox -lsfx | ||||
| LIBS=-lsndfile `fltk-config --ldflags` | LIBS=-lsndfile `fltk-config --ldflags` | ||||
| # CXXFLAGS=`fltk-config -cxxflags` | # CXXFLAGS=`fltk-config -cxxflags` | ||||
| @@ -26,8 +26,8 @@ $(OBJS): Makefile | |||||
| test: $(OBJS) | test: $(OBJS) | ||||
| $(CXX) $(CXXFLAGS) $(LIBS) $(OBJS) -o $@ | $(CXX) $(CXXFLAGS) $(LIBS) $(OBJS) -o $@ | ||||
| mixer: Mixer_Strip.o Mixer.o | |||||
| $(CXX) $(CXXFLAGS) $(LIBS) Mixer_Strip.o Mixer.o -o $@ | |||||
| mixer: Mixer_Strip.o Mixer.o DPM.o | |||||
| $(CXX) $(CXXFLAGS) $(LIBS) Mixer_Strip.o Mixer.o DPM.o -o $@ | |||||
| ESRCS=Audio_File.C Audio_File_SF.C Loggable.C | ESRCS=Audio_File.C Audio_File_SF.C Loggable.C | ||||
| @@ -2,7 +2,7 @@ | |||||
| version 1.0108 | version 1.0108 | ||||
| header_name {.H} | header_name {.H} | ||||
| code_name {.C} | code_name {.C} | ||||
| decl {\#include "VU_Meter.H"} {selected public global | |||||
| decl {\#include "DPM.H"} {public global | |||||
| } | } | ||||
| widget_class Mixer_Strip {open | widget_class Mixer_Strip {open | ||||
| @@ -42,9 +42,9 @@ widget_class Mixer_Strip {open | |||||
| xywh {14 195 33 471} type {Vert Knob} color 32 selection_color 1 minimum 1.5 maximum 0 step 0.01 value 1 textsize 14 | xywh {14 195 33 471} type {Vert Knob} color 32 selection_color 1 minimum 1.5 maximum 0 step 0.01 value 1 textsize 14 | ||||
| } | } | ||||
| Fl_Box meter { | Fl_Box meter { | ||||
| label VU | |||||
| label DPM selected | |||||
| xywh {57 193 55 484} box ROUNDED_BOX selection_color 88 | xywh {57 193 55 484} box ROUNDED_BOX selection_color 88 | ||||
| class VU_Meter | |||||
| class DPM | |||||
| } | } | ||||
| } | } | ||||
| Fl_Box {} { | Fl_Box {} { | ||||