/[svn]/linuxsampler/trunk/src/engines/gig/Voice.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/gig/Voice.cpp

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

revision 225 by schoenebeck, Sun Aug 22 14:46:47 2004 UTC revision 230 by schoenebeck, Thu Sep 2 21:52:29 2004 UTC
# Line 124  namespace LinuxSampler { namespace gig { Line 124  namespace LinuxSampler { namespace gig {
124          pTriggerEvent   = pNoteOnEvent;          pTriggerEvent   = pNoteOnEvent;
125    
126          if (!pRegion) {          if (!pRegion) {
127              std::cerr << "Audio Thread: No Region defined for MIDI key " << MIDIKey << std::endl << std::flush;              std::cerr << "gig::Voice: No Region defined for MIDI key " << MIDIKey << std::endl << std::flush;
128              Kill();              Kill();
129              return -1;              return -1;
130          }          }
131    
132          //TODO: current MIDI controller values are not taken into account yet          // get current dimension values to select the right dimension region
133          ::gig::DimensionRegion* pDimRgn = NULL;          //FIXME: controller values for selecting the dimension region here are currently not sample accurate
134          for (int i = pRegion->Dimensions - 1; i >= 0; i--) { // Check if instrument has a velocity split          uint DimValues[5] = {0,0,0,0,0};
135              if (pRegion->pDimensionDefinitions[i].dimension == ::gig::dimension_velocity) {          for (int i = pRegion->Dimensions - 1; i >= 0; i--) {
136                  uint DimValues[5] = {0,0,0,0,0};              switch (pRegion->pDimensionDefinitions[i].dimension) {
137                    case ::gig::dimension_samplechannel:
138                        DimValues[i] = 0; //TODO: we currently ignore this dimension
139                        break;
140                    case ::gig::dimension_layer:
141                        DimValues[i] = 0; //TODO: we currently ignore this dimension
142                        break;
143                    case ::gig::dimension_velocity:
144                      DimValues[i] = pNoteOnEvent->Velocity;                      DimValues[i] = pNoteOnEvent->Velocity;
145                  pDimRgn = pRegion->GetDimensionRegionByValue(DimValues[4],DimValues[3],DimValues[2],DimValues[1],DimValues[0]);                      break;
146                  break;                  case ::gig::dimension_channelaftertouch:
147                        DimValues[i] = 0; //TODO: we currently ignore this dimension
148                        break;
149                    case ::gig::dimension_releasetrigger:
150                        DimValues[i] = 0; //TODO: we currently ignore this dimension
151                        break;
152                    case ::gig::dimension_keyboard:
153                        DimValues[i] = (uint) pNoteOnEvent->Key;
154                        break;
155                    case ::gig::dimension_modwheel:
156                        DimValues[i] = pEngine->ControllerTable[1];
157                        break;
158                    case ::gig::dimension_breath:
159                        DimValues[i] = pEngine->ControllerTable[2];
160                        break;
161                    case ::gig::dimension_foot:
162                        DimValues[i] = pEngine->ControllerTable[4];
163                        break;
164                    case ::gig::dimension_portamentotime:
165                        DimValues[i] = pEngine->ControllerTable[5];
166                        break;
167                    case ::gig::dimension_effect1:
168                        DimValues[i] = pEngine->ControllerTable[12];
169                        break;
170                    case ::gig::dimension_effect2:
171                        DimValues[i] = pEngine->ControllerTable[13];
172                        break;
173                    case ::gig::dimension_genpurpose1:
174                        DimValues[i] = pEngine->ControllerTable[16];
175                        break;
176                    case ::gig::dimension_genpurpose2:
177                        DimValues[i] = pEngine->ControllerTable[17];
178                        break;
179                    case ::gig::dimension_genpurpose3:
180                        DimValues[i] = pEngine->ControllerTable[18];
181                        break;
182                    case ::gig::dimension_genpurpose4:
183                        DimValues[i] = pEngine->ControllerTable[19];
184                        break;
185                    case ::gig::dimension_sustainpedal:
186                        DimValues[i] = pEngine->ControllerTable[64];
187                        break;
188                    case ::gig::dimension_portamento:
189                        DimValues[i] = pEngine->ControllerTable[65];
190                        break;
191                    case ::gig::dimension_sostenutopedal:
192                        DimValues[i] = pEngine->ControllerTable[66];
193                        break;
194                    case ::gig::dimension_softpedal:
195                        DimValues[i] = pEngine->ControllerTable[67];
196                        break;
197                    case ::gig::dimension_genpurpose5:
198                        DimValues[i] = pEngine->ControllerTable[80];
199                        break;
200                    case ::gig::dimension_genpurpose6:
201                        DimValues[i] = pEngine->ControllerTable[81];
202                        break;
203                    case ::gig::dimension_genpurpose7:
204                        DimValues[i] = pEngine->ControllerTable[82];
205                        break;
206                    case ::gig::dimension_genpurpose8:
207                        DimValues[i] = pEngine->ControllerTable[83];
208                        break;
209                    case ::gig::dimension_effect1depth:
210                        DimValues[i] = pEngine->ControllerTable[91];
211                        break;
212                    case ::gig::dimension_effect2depth:
213                        DimValues[i] = pEngine->ControllerTable[92];
214                        break;
215                    case ::gig::dimension_effect3depth:
216                        DimValues[i] = pEngine->ControllerTable[93];
217                        break;
218                    case ::gig::dimension_effect4depth:
219                        DimValues[i] = pEngine->ControllerTable[94];
220                        break;
221                    case ::gig::dimension_effect5depth:
222                        DimValues[i] = pEngine->ControllerTable[95];
223                        break;
224                    case ::gig::dimension_none:
225                        std::cerr << "gig::Voice::Trigger() Error: dimension=none\n" << std::flush;
226                        break;
227                    default:
228                        std::cerr << "gig::Voice::Trigger() Error: Unknown dimension\n" << std::flush;
229              }              }
230          }          }
231          if (!pDimRgn) { // if there was no velocity split          ::gig::DimensionRegion* pDimRgn = pRegion->GetDimensionRegionByValue(DimValues[4],DimValues[3],DimValues[2],DimValues[1],DimValues[0]);
             pDimRgn = pRegion->GetDimensionRegionByValue(0,0,0,0,0);  
         }  
232    
233          pSample = pDimRgn->pSample; // sample won't change until the voice is finished          pSample = pDimRgn->pSample; // sample won't change until the voice is finished
234    

Legend:
Removed from v.225  
changed lines
  Added in v.230

  ViewVC Help
Powered by ViewVC