/[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 1524 by schoenebeck, Sun Nov 25 17:29:37 2007 UTC revision 1678 by persson, Sun Feb 10 16:07:22 2008 UTC
# Line 2923  namespace { Line 2923  namespace {
2923      }      }
2924    
2925    
2926    // *************** MidiRule ***************
2927    // *
2928    
2929    MidiRuleCtrlTrigger::MidiRuleCtrlTrigger(RIFF::Chunk* _3ewg) {
2930        _3ewg->SetPos(36);
2931        Triggers = _3ewg->ReadUint8();
2932        _3ewg->SetPos(40);
2933        ControllerNumber = _3ewg->ReadUint8();
2934        _3ewg->SetPos(46);
2935        for (int i = 0 ; i < Triggers ; i++) {
2936            pTriggers[i].TriggerPoint = _3ewg->ReadUint8();
2937            pTriggers[i].Descending = _3ewg->ReadUint8();
2938            pTriggers[i].VelSensitivity = _3ewg->ReadUint8();
2939            pTriggers[i].Key = _3ewg->ReadUint8();
2940            pTriggers[i].NoteOff = _3ewg->ReadUint8();
2941            pTriggers[i].Velocity = _3ewg->ReadUint8();
2942            pTriggers[i].OverridePedal = _3ewg->ReadUint8();
2943            _3ewg->ReadUint8();
2944        }
2945    }
2946    
2947    
2948  // *************** Instrument ***************  // *************** Instrument ***************
2949  // *  // *
# Line 2944  namespace { Line 2965  namespace {
2965          PianoReleaseMode = false;          PianoReleaseMode = false;
2966          DimensionKeyRange.low = 0;          DimensionKeyRange.low = 0;
2967          DimensionKeyRange.high = 0;          DimensionKeyRange.high = 0;
2968            pMidiRules = new MidiRule*[3];
2969            pMidiRules[0] = NULL;
2970    
2971          // Loading          // Loading
2972          RIFF::List* lart = insList->GetSubList(LIST_TYPE_LART);          RIFF::List* lart = insList->GetSubList(LIST_TYPE_LART);
# Line 2958  namespace { Line 2981  namespace {
2981                  PianoReleaseMode       = dimkeystart & 0x01;                  PianoReleaseMode       = dimkeystart & 0x01;
2982                  DimensionKeyRange.low  = dimkeystart >> 1;                  DimensionKeyRange.low  = dimkeystart >> 1;
2983                  DimensionKeyRange.high = _3ewg->ReadUint8();                  DimensionKeyRange.high = _3ewg->ReadUint8();
2984    
2985                    if (_3ewg->GetSize() > 32) {
2986                        // read MIDI rules
2987                        int i = 0;
2988                        _3ewg->SetPos(32);
2989                        uint8_t id1 = _3ewg->ReadUint8();
2990                        uint8_t id2 = _3ewg->ReadUint8();
2991    
2992                        if (id1 == 4 && id2 == 16) {
2993                            pMidiRules[i++] = new MidiRuleCtrlTrigger(_3ewg);
2994                        }
2995                        //TODO: all the other types of rules
2996    
2997                        pMidiRules[i] = NULL;
2998                    }
2999              }              }
3000          }          }
3001    
# Line 2994  namespace { Line 3032  namespace {
3032      }      }
3033    
3034      Instrument::~Instrument() {      Instrument::~Instrument() {
3035            delete[] pMidiRules;
3036      }      }
3037    
3038      /**      /**
# Line 3108  namespace { Line 3147  namespace {
3147          UpdateRegionKeyTable();          UpdateRegionKeyTable();
3148      }      }
3149    
3150        /**
3151         * Returns a MIDI rule of the instrument.
3152         *
3153         * The list of MIDI rules, at least in gig v3, always contains at
3154         * most two rules. The second rule can only be the DEF filter
3155         * (which currently isn't supported by libgig).
3156         *
3157         * @param i - MIDI rule number
3158         * @returns   pointer address to MIDI rule number i or NULL if there is none
3159         */
3160        MidiRule* Instrument::GetMidiRule(int i) {
3161            return pMidiRules[i];
3162        }
3163    
3164    
3165  // *************** Group ***************  // *************** Group ***************
# Line 3351  namespace { Line 3403  namespace {
3403          pSamples->erase(iter);          pSamples->erase(iter);
3404          delete pSample;          delete pSample;
3405    
3406            SampleList::iterator tmp = SamplesIterator;
3407          // remove all references to the sample          // remove all references to the sample
3408          for (Instrument* instrument = GetFirstInstrument() ; instrument ;          for (Instrument* instrument = GetFirstInstrument() ; instrument ;
3409               instrument = GetNextInstrument()) {               instrument = GetNextInstrument()) {
# Line 3365  namespace { Line 3418  namespace {
3418                  }                  }
3419              }              }
3420          }          }
3421            SamplesIterator = tmp; // restore iterator
3422      }      }
3423    
3424      void File::LoadSamples() {      void File::LoadSamples() {

Legend:
Removed from v.1524  
changed lines
  Added in v.1678

  ViewVC Help
Powered by ViewVC