/[svn]/linuxsampler/trunk/src/modulationsystem.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/modulationsystem.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 30 by schoenebeck, Sun Jan 11 16:43:54 2004 UTC revision 33 by schoenebeck, Mon Feb 16 19:30:42 2004 UTC
# Line 25  Line 25 
25    
26  #include "global.h"  #include "global.h"
27    
28    /**
29     * Handles modulation parameters and events for the current audio fragment.
30     *
31     * TODO: class should better be renamed to 'EventSystem' or even better: most of the attributes here could be moved into the engine and everything left would just be class Event (thus -> event.h and event.cpp), but that can wait until we restructe the source tree for multi engine support
32     */
33  class ModulationSystem {  class ModulationSystem {
34      public:      public:
35          enum destination_t {          enum destination_t {
36              destination_vca,   ///< Volume level              destination_vca,   ///< Volume level
37                destination_vco,   ///< Pitch depth
38              destination_count  ///< Total number of modulation sources (this has to stay the last element in the enum)              destination_count  ///< Total number of modulation sources (this has to stay the last element in the enum)
39          };          };
40          enum source_t {          typedef uint32_t real_time_t; ///< We read the processor's cycle count register as an reference for the real time. These are of course only abstract values with arbitrary time entity, but that's not a problem as we calculate relatively.
41              source_eg1,   ///< Envelope Generator 1          enum event_type_t {
42              source_count  ///< Total number of modulation sources (this has to stay the last element in the enum)              event_type_note_on,
43                event_type_note_off,
44                event_type_pitchbend,
45                event_type_control_change,
46                event_type_cancel_release,  ///< transformed either from a note-on or sustain-pedal-down event
47                event_type_release          ///< transformed either from a note-off or sustain-pedal-up event
48            };
49            class Event {
50                public:
51                    event_type_t Type;
52                    union {
53                        uint8_t Key;          ///< MIDI key number for note-on and note-off events.
54                        uint8_t Controller;   ///< MIDI controller number for control change events.
55                    };
56                    union {
57                        uint8_t Velocity;     ///< Trigger or release velocity for note-on or note-off events.
58                        uint8_t Value;        ///< Value for control change events.
59                    };
60                    int16_t Pitch;            ///< Pitch value for pitchbend events.
61    
62                    Event() {
63                        TimeStamp = ModulationSystem::CreateTimeStamp();
64                        iFragmentPos = -1;
65                    }
66                    inline uint FragmentPos() {
67                        if (iFragmentPos >= 0) return (uint) iFragmentPos;
68                        return (uint) (iFragmentPos = ModulationSystem::ToFragmentPos(TimeStamp));
69                    }
70                private:
71                    real_time_t TimeStamp;    ///< Time stamp of the event's occurence.
72                    int         iFragmentPos; ///< Position in the current fragment this event refers to.
73          };          };
74    
75          static float** pDestinationParameter;          static float** pDestinationParameter;
         //static bool    DestinationParameterModified;  
76    
77          static        void Initialize(uint SampleRate, uint FragmentSize);          static        void  Initialize(uint SampleRate, uint MaxSamplesPerCycle);
78          static        void Close();          static        void  Close();
79          static        void ResetDestinationParameter(ModulationSystem::destination_t dst, float val);          static        void  ResetDestinationParameter(ModulationSystem::destination_t dst, float val);
80          static inline uint GetFragmentSize() { return FragmentSize; };          static        void  UpdateFragmentTime();
81          static inline uint GetSampleRate()   { return SampleRate;   };          static real_time_t  CreateTimeStamp();
82            static inline uint  MaxSamplesPerCycle()                  { return uiMaxSamplesPerCycle; }
83            static inline uint  SampleRate()                          { return uiSampleRate;         }
84            static inline uint  ToFragmentPos(real_time_t time_stamp) {
85                return uint ((time_stamp - FragmentTime.begin) * FragmentTime.sample_ratio);
86            }
87      protected:      protected:
88          static uint FragmentSize;          static uint uiMaxSamplesPerCycle;
89          static uint SampleRate;          static uint uiSampleRate;
90            static struct __FragmentTime__ {
91                real_time_t begin;         ///< Real time stamp of the beginning of this audio fragment cycle.
92                real_time_t end;           ///< Real time stamp of the end of this audio fragment cycle.
93                float       sample_ratio;  ///< (Samples per cycle) / (Real time duration of cycle)
94            } FragmentTime;
95  };  };
96    
97  #endif // __MODULATION_SYSTEM_H__  #endif // __MODULATION_SYSTEM_H__

Legend:
Removed from v.30  
changed lines
  Added in v.33

  ViewVC Help
Powered by ViewVC