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

Diff of /linuxsampler/trunk/src/engines/sfz/sfz.cpp

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

revision 2072 by persson, Sat Mar 20 11:37:52 2010 UTC revision 2082 by persson, Sun Apr 11 10:20:24 2010 UTC
# Line 67  namespace sfz Line 67  namespace sfz
67      Definition::Definition() :      Definition::Definition() :
68          locc(128), hicc(128), start_locc(128), start_hicc(128), stop_locc(128),          locc(128), hicc(128), start_locc(128), start_hicc(128), stop_locc(128),
69          stop_hicc(128), on_locc(128), on_hicc(128), delay_oncc(128), delay_samples_oncc(128),          stop_hicc(128), on_locc(128), on_hicc(128), delay_oncc(128), delay_samples_oncc(128),
70          offset_oncc(128), amp_velcurve_(128), gain_oncc(128), xfin_locc(128), xfin_hicc(128),          offset_oncc(128), amp_velcurve(128), gain_oncc(128), xfin_locc(128), xfin_hicc(128),
71          xfout_locc(128), xfout_hicc(128), cutoff_oncc(128), cutoff2_oncc(128), cutoff_smoothcc(128),          xfout_locc(128), xfout_hicc(128), cutoff_oncc(128), cutoff2_oncc(128), cutoff_smoothcc(128),
72          cutoff2_smoothcc(128), cutoff_stepcc(128), cutoff2_stepcc(128), cutoff_curvecc(128),          cutoff2_smoothcc(128), cutoff_stepcc(128), cutoff2_stepcc(128), cutoff_curvecc(128),
73          cutoff2_curvecc(128), resonance_oncc(128), resonance2_oncc(128), resonance_smoothcc(128),          cutoff2_curvecc(128), resonance_oncc(128), resonance2_oncc(128), resonance_smoothcc(128),
# Line 471  namespace sfz Line 471  namespace sfz
471              offset_oncc[i].unset();              offset_oncc[i].unset();
472    
473              // amplifier              // amplifier
474              amp_velcurve_[i] = 0; //fixme: 20 log (127^2 / i^2)              amp_velcurve[i] = -1;
475              gain_oncc[i] = 0;              gain_oncc[i] = 0;
476              xfin_locc[i] = 0;              xfin_locc[i] = 0;
477              xfin_hicc[i] = 0;              xfin_hicc[i] = 0;
# Line 635  namespace sfz Line 635  namespace sfz
635          region->amp_keytrack = amp_keytrack;          region->amp_keytrack = amp_keytrack;
636          region->amp_keycenter = amp_keycenter;          region->amp_keycenter = amp_keycenter;
637          region->amp_veltrack = amp_veltrack;          region->amp_veltrack = amp_veltrack;
638          region->amp_velcurve_ = amp_velcurve_;          region->amp_velcurve = amp_velcurve;
639          region->amp_random = amp_random;          region->amp_random = amp_random;
640          region->rt_decay = rt_decay;          region->rt_decay = rt_decay;
641          region->gain_oncc = gain_oncc;          region->gain_oncc = gain_oncc;
# Line 889  namespace sfz Line 889  namespace sfz
889              } else {              } else {
890                  std::cerr << "Invalid key switch range: " << low << " - " << high << std::endl;                  std::cerr << "Invalid key switch range: " << low << " - " << high << std::endl;
891              }              }
892    
893                // create velocity response curve
894                int prev = 0;
895                float prevvalue = 0;
896                for (int v = 0 ; v < 128 ; v++) {
897                    if (pRegion->amp_velcurve[v] >= 0) {
898                        float step = (pRegion->amp_velcurve[v] - prevvalue) / (v - prev);
899                        for ( ; prev < v ; prev++) {
900                            pRegion->amp_velcurve[prev] = prevvalue;
901                            prevvalue += step;
902                        }
903                    }
904                }
905                if (prev) {
906                    float step = (1 - prevvalue) / (127 - prev);
907                    for ( ; prev < 128 ; prev++) {
908                        pRegion->amp_velcurve[prev] = prevvalue;
909                        prevvalue += step;
910                    }
911                } else {
912                    // default curve
913                    for (int v = 0 ; v < 128 ; v++) {
914                        pRegion->amp_velcurve[v] = v * v / (127.0 * 127.0);
915                    }
916                }
917                // apply amp_veltrack
918                float offset = -pRegion->amp_veltrack;
919                if (offset <= 0) offset += 100;
920                for (int v = 0 ; v < 128 ; v++) {
921                    pRegion->amp_velcurve[v] =
922                        (offset + pRegion->amp_veltrack * pRegion->amp_velcurve[v]) / 100;
923                }
924          }          }
925      }      }
926    
# Line 1179  namespace sfz Line 1211  namespace sfz
1211          else if ("eq2_vel2gain" == key) pCurDef->eq2_vel2gain = ToFloat(value);          else if ("eq2_vel2gain" == key) pCurDef->eq2_vel2gain = ToFloat(value);
1212          else if ("eq3_vel2gain" == key) pCurDef->eq3_vel2gain = ToFloat(value);          else if ("eq3_vel2gain" == key) pCurDef->eq3_vel2gain = ToFloat(value);
1213    
1214          //fixme: parse amp_velcurve_N          else if (sscanf(key.c_str(), "amp_velcurve_%d", &x)) {
1215                pCurDef->amp_velcurve[x] = ToFloat(value);
1216            }
1217    
1218          // CCs          // CCs
1219          else if (key.find("cc") != std::string::npos)          else if (key.find("cc") != std::string::npos)

Legend:
Removed from v.2072  
changed lines
  Added in v.2082

  ViewVC Help
Powered by ViewVC