/[svn]/libgig/trunk/src/gig.cpp
ViewVC logotype

Diff of /libgig/trunk/src/gig.cpp

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

revision 695 by persson, Sat Jul 16 19:36:23 2005 UTC revision 728 by persson, Tue Jul 26 11:13:53 2005 UTC
# Line 1134  namespace { Line 1134  namespace {
1134          VCFEnabled = vcfcutoff & 0x80; // bit 7          VCFEnabled = vcfcutoff & 0x80; // bit 7
1135          VCFCutoff  = vcfcutoff & 0x7f; // lower 7 bits          VCFCutoff  = vcfcutoff & 0x7f; // lower 7 bits
1136          VCFCutoffController = static_cast<vcf_cutoff_ctrl_t>(_3ewa->ReadUint8());          VCFCutoffController = static_cast<vcf_cutoff_ctrl_t>(_3ewa->ReadUint8());
1137          VCFVelocityScale = _3ewa->ReadUint8();          uint8_t vcfvelscale = _3ewa->ReadUint8();
1138            VCFCutoffControllerInvert = vcfvelscale & 0x80; // bit 7
1139            VCFVelocityScale = vcfvelscale & 0x7f; // lower 7 bits
1140          _3ewa->ReadInt8(); // unknown          _3ewa->ReadInt8(); // unknown
1141          uint8_t vcfresonance = _3ewa->ReadUint8();          uint8_t vcfresonance = _3ewa->ReadUint8();
1142          VCFResonance = vcfresonance & 0x7f; // lower 7 bits          VCFResonance = vcfresonance & 0x7f; // lower 7 bits
# Line 1161  namespace { Line 1163  namespace {
1163          // this models a strange behaviour or bug in GSt: two of the          // this models a strange behaviour or bug in GSt: two of the
1164          // velocity response curves for release time are not used even          // velocity response curves for release time are not used even
1165          // if specified, instead another curve is chosen.          // if specified, instead another curve is chosen.
   
1166          if ((curveType == curve_type_nonlinear && depth == 0) ||          if ((curveType == curve_type_nonlinear && depth == 0) ||
1167              (curveType == curve_type_special   && depth == 4)) {              (curveType == curve_type_special   && depth == 4)) {
1168              curveType = curve_type_nonlinear;              curveType = curve_type_nonlinear;
# Line 1169  namespace { Line 1170  namespace {
1170          }          }
1171          pVelocityReleaseTable = GetVelocityTable(curveType, depth, 0);          pVelocityReleaseTable = GetVelocityTable(curveType, depth, 0);
1172    
1173            curveType = VCFVelocityCurve;
1174            depth = VCFVelocityDynamicRange;
1175    
1176            // even stranger GSt: two of the velocity response curves for
1177            // filter cutoff are not used, instead another special curve
1178            // is chosen. This curve is not used anywhere else.
1179            if ((curveType == curve_type_nonlinear && depth == 0) ||
1180                (curveType == curve_type_special   && depth == 4)) {
1181                curveType = curve_type_special;
1182                depth = 5;
1183            }
1184            pVelocityCutoffTable = GetVelocityTable(curveType, depth,
1185                                                    VCFCutoffController == vcf_cutoff_ctrl_none ? VCFVelocityScale : 0);
1186    
1187          SampleAttenuation = pow(10.0, -Gain / (20.0 * 655360));          SampleAttenuation = pow(10.0, -Gain / (20.0 * 655360));
1188      }      }
1189    
# Line 1339  namespace { Line 1354  namespace {
1354          return pVelocityReleaseTable[MIDIKeyVelocity];          return pVelocityReleaseTable[MIDIKeyVelocity];
1355      }      }
1356    
1357        double DimensionRegion::GetVelocityCutoff(uint8_t MIDIKeyVelocity) {
1358            return pVelocityCutoffTable[MIDIKeyVelocity];
1359        }
1360    
1361      double* DimensionRegion::CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling) {      double* DimensionRegion::CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling) {
1362    
1363          // line-segment approximations of the 15 velocity curves          // line-segment approximations of the 15 velocity curves
# Line 1372  namespace { Line 1391  namespace {
1391          const int spe4[] = { 1, 4, 23, 5, 49, 13, 57, 17, 92, 57, 122, 127,          const int spe4[] = { 1, 4, 23, 5, 49, 13, 57, 17, 92, 57, 122, 127,
1392                               127, 127 };                               127, 127 };
1393    
1394            // this is only used by the VCF velocity curve
1395            const int spe5[] = { 1, 2, 30, 5, 60, 19, 77, 70, 83, 85, 88, 106,
1396                                 91, 127, 127, 127 };
1397    
1398          const int* const curves[] = { non0, non1, non2, non3, non4,          const int* const curves[] = { non0, non1, non2, non3, non4,
1399                                        lin0, lin1, lin2, lin3, lin4,                                        lin0, lin1, lin2, lin3, lin4,
1400                                        spe0, spe1, spe2, spe3, spe4 };                                        spe0, spe1, spe2, spe3, spe4, spe5 };
1401    
1402          double* const table = new double[128];          double* const table = new double[128];
1403    

Legend:
Removed from v.695  
changed lines
  Added in v.728

  ViewVC Help
Powered by ViewVC