/[svn]/linuxsampler/trunk/src/engines/common/Voice.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/common/Voice.h

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

revision 2012 by iliev, Fri Oct 23 17:53:17 2009 UTC revision 2203 by persson, Sat Jul 9 16:44:27 2011 UTC
# Line 3  Line 3 
3   *   LinuxSampler - modular, streaming capable sampler                     *   *   LinuxSampler - modular, streaming capable sampler                     *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003,2004 by Benno Senoner and Christian Schoenebeck    *   *   Copyright (C) 2003,2004 by Benno Senoner and Christian Schoenebeck    *
6   *   Copyright (C) 2005-2009 Christian Schoenebeck                         *   *   Copyright (C) 2005-2011 Christian Schoenebeck                         *
7   *                                                                         *   *                                                                         *
8   *   This program is free software; you can redistribute it and/or modify  *   *   This program is free software; you can redistribute it and/or modify  *
9   *   it under the terms of the GNU General Public License as published by  *   *   it under the terms of the GNU General Public License as published by  *
# Line 22  Line 22 
22   ***************************************************************************/   ***************************************************************************/
23    
24  #ifndef __LS_VOICE_H__  #ifndef __LS_VOICE_H__
25  #define __LS_VOICE_H__  #define __LS_VOICE_H__
26    
27  #include "Event.h"  #include "Event.h"
28    #include "../gig/Filter.h"
29  #include "../../common/Pool.h"  #include "../../common/Pool.h"
30    
31    #include <gig.h> // TODO: remove gig dependency
32    
33  namespace LinuxSampler {  namespace LinuxSampler {
34    
35      class Voice {      class Voice {
# Line 38  namespace LinuxSampler { Line 41  namespace LinuxSampler {
41                  playback_state_disk = 3                  playback_state_disk = 3
42              };              };
43    
44              // Types              // Type bits. Mostly mutual exclusive, but a voice may both be of one shot type and require a release trigger at the same time.
45              enum type_t {              enum type_t {
46                  type_normal,                  type_normal = 0,
47                  type_release_trigger_required,  ///< If the key of this voice will be released, it causes a release triggered voice to be spawned                  type_release_trigger_required = 1 << 1,  ///< If the key of this voice will be released, it causes a release triggered voice to be spawned
48                  type_release_trigger            ///< Release triggered voice which cannot be killed by releasing its key                  type_release_trigger = 1 << 2,           ///< Release triggered voice which cannot be killed by releasing its key
49                    type_one_shot = 1 << 3,                  ///< Voice should not be released by note off
50                    type_controller_triggered = 1 << 4       ///< Voice is triggered by MIDI CC instead of a note on
51                };
52    
53                struct PitchInfo {
54                    float PitchBase;      ///< Basic pitch depth, stays the same for the whole life time of the voice
55                    float PitchBend;      ///< Current pitch value of the pitchbend wheel
56                    float PitchBendRange; ///< The pitch range of the pitchbend wheel, value is in cents / 8192
57                };
58    
59                struct EGInfo {
60                    double Attack;
61                    double Decay;
62                    double Release;
63                };
64    
65                struct SampleInfo {
66                    uint SampleRate;
67                    uint ChannelCount;
68                    uint FrameSize;
69                    uint TotalFrameCount;
70                    uint BitDepth;
71                    bool HasLoops;
72                    uint LoopStart;
73                    uint LoopLength;
74                    uint LoopPlayCount; ///< Number of times the loop should be played (a value of 0 = infinite).
75                    bool Unpitched; ///< sound which is not characterized by a perceived frequency
76                };
77    
78                struct RegionInfo {
79                    uint8_t UnityNote; ///< The MIDI key number of the recorded pitch of the sample
80                    int16_t FineTune;
81                    int     Pan; ///< Panorama / Balance (-64..0..63 <-> left..middle..right)
82                    uint    SampleStartOffset; ///< Number of samples the sample start should be moved
83    
84                    double  EG2PreAttack; ///< Preattack value of the filter cutoff EG (in permilles)
85                    double  EG2Attack; ///< Attack time of the filter cutoff EG (in seconds)
86                    double  EG2Decay1;  ///< Decay time of the filter cutoff EG (in seconds)
87                    double  EG2Decay2;  ///< Only if (EG2InfiniteSustain == false): 2nd decay stage time of the filter cutoff EG (in seconds)
88                    double  EG2Sustain; ///< Sustain value of the filter cutoff EG (in permilles)
89                    bool    EG2InfiniteSustain; ///< If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released.
90                    double  EG2Release; ///< Release time of the filter cutoff EG (in seconds)
91    
92                    double  EG3Attack;  ///< Attack time of the sample pitch EG (in seconds)
93                    int     EG3Depth;   ///< Depth of the sample pitch EG (-1200 - +1200)
94                    double  ReleaseTriggerDecay; ///< How much release sample volume depends on note length. Release sample amplitude is multiplied with (1 - ReleaseTriggerDecay * note length).
95    
96                    bool               VCFEnabled;    ///< If filter should be used.
97                    Filter::vcf_type_t VCFType;       ///< Defines the general filter characteristic (lowpass, highpass, bandpass, etc.).
98                    uint8_t            VCFResonance;  ///< Firm internal filter resonance weight.
99              };              };
100    
101                struct InstrumentInfo {
102                    int   FineTune; // in cents
103                    uint  PitchbendRange;    ///< Number of semitones pitchbend controller can pitch
104                };
105    
106                /// Reflects a MIDI controller
107                struct midi_ctrl {
108                    uint8_t controller; ///< MIDI control change controller number
109                    uint8_t value;      ///< Current MIDI controller value
110                    float   fvalue;     ///< Transformed / effective value (e.g. volume level or filter cutoff frequency)
111                };
112    
113                Voice() { }
114                virtual ~Voice() { }
115      };      };
 } // namespace LinuxSampler  
116    
117  #endif  /* __LS_VOICE_H__ */      // |= operator for the type_t enum
118        inline Voice::type_t operator|=(Voice::type_t& lhs, Voice::type_t rhs) {
119            return lhs = static_cast<Voice::type_t>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs));
120        }
121    
122    } // namespace LinuxSampler
123    
124    #endif  /* __LS_VOICE_H__ */

Legend:
Removed from v.2012  
changed lines
  Added in v.2203

  ViewVC Help
Powered by ViewVC