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

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

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

revision 829 by schoenebeck, Sat Jan 14 14:07:47 2006 UTC revision 831 by persson, Sat Jan 28 16:55:30 2006 UTC
# Line 1234  namespace LinuxSampler { namespace gig { Line 1234  namespace LinuxSampler { namespace gig {
1234              }              }
1235              case 7: { // volume              case 7: { // volume
1236                  //TODO: not sample accurate yet                  //TODO: not sample accurate yet
1237                  pEngineChannel->GlobalVolume = (float) itControlChangeEvent->Param.CC.Value / 127.0f *  CONFIG_GLOBAL_ATTENUATION;                  pEngineChannel->GlobalVolume = VolumeCurve[itControlChangeEvent->Param.CC.Value] *  CONFIG_GLOBAL_ATTENUATION;
1238                  pEngineChannel->bStatusChanged = true; // engine channel status has changed, so set notify flag                  pEngineChannel->bStatusChanged = true; // engine channel status has changed, so set notify flag
1239                  break;                  break;
1240              }              }
1241              case 10: { // panpot              case 10: { // panpot
1242                  //TODO: not sample accurate yet                  //TODO: not sample accurate yet
1243                  const int pan = (int) itControlChangeEvent->Param.CC.Value - 64;                  pEngineChannel->GlobalPanLeft  = PanCurve[128 - itControlChangeEvent->Param.CC.Value];
1244                  pEngineChannel->GlobalPanLeft  = 1.0f - float(RTMath::Max(pan, 0)) /  63.0f;                  pEngineChannel->GlobalPanRight = PanCurve[itControlChangeEvent->Param.CC.Value];
                 pEngineChannel->GlobalPanRight = 1.0f - float(RTMath::Min(pan, 0)) / -64.0f;  
1245                  break;                  break;
1246              }              }
1247              case 64: { // sustain              case 64: { // sustain
# Line 1558  namespace LinuxSampler { namespace gig { Line 1557  namespace LinuxSampler { namespace gig {
1557      }      }
1558    
1559      String Engine::Version() {      String Engine::Version() {
1560          String s = "$Revision: 1.57 $";          String s = "$Revision: 1.58 $";
1561          return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword          return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword
1562      }      }
1563    
1564        // static constant initializers
1565        const float* Engine::VolumeCurve(InitVolumeCurve());
1566        const float* Engine::PanCurve(InitPanCurve());
1567    
1568        float* Engine::InitVolumeCurve() {
1569            // line-segment approximation
1570            const float segments[] = {
1571                0, 0, 2, 0.0046, 16, 0.016, 31, 0.051, 45, 0.115, 54.5, 0.2,
1572                64.5, 0.39, 74, 0.74, 92, 1.03, 114, 1.94, 119.2, 2.2, 127, 2.2
1573            };
1574            return InitCurve(segments);
1575        }
1576    
1577        float* Engine::InitPanCurve() {
1578            // line-segment approximation
1579            const float segments[] = {
1580                0, 0, 1, 0,
1581                2, 0.05, 31.5, 0.7, 51, 0.851, 74.5, 1.12,
1582                127, 1.41, 128, 1.41
1583            };
1584            return InitCurve(segments, 129);
1585        }
1586    
1587        float* Engine::InitCurve(const float* segments, int size) {
1588            float* y = new float[size];
1589            for (int x = 0 ; x < size ; x++) {
1590                if (x > segments[2]) segments += 2;
1591                y[x] = segments[1] + (x - segments[0]) *
1592                    (segments[3] - segments[1]) / (segments[2] - segments[0]);
1593            }
1594            return y;
1595        }
1596    
1597  }} // namespace LinuxSampler::gig  }} // namespace LinuxSampler::gig

Legend:
Removed from v.829  
changed lines
  Added in v.831

  ViewVC Help
Powered by ViewVC