diff options
| -rw-r--r-- | src/drumkitparser.cc | 65 | ||||
| -rw-r--r-- | src/drumkitparser.h | 4 | 
2 files changed, 37 insertions, 32 deletions
| diff --git a/src/drumkitparser.cc b/src/drumkitparser.cc index 1c16574..53b0a6d 100644 --- a/src/drumkitparser.cc +++ b/src/drumkitparser.cc @@ -85,8 +85,31 @@ void DrumKitParser::startTag(std::string name,        printf("Missing file in instrument tag.\n");        return;      } + +    instr_name = attr["name"]; +    instr_file = attr["file"]; +  } + +  if(name == "channelmap") { +    if(attr.find("in") == attr.end()) { +      printf("Missing 'in' in channelmap tag.\n"); +      return; +    } + +    if(attr.find("out") == attr.end()) { +      printf("Missing 'out' in channelmap tag.\n"); +      return; +    } + +    channelmap[attr["in"]] = attr["out"]; +  } +} + +void DrumKitParser::endTag(std::string name) +{ +  if(name == "instrument") {      Instrument i; -    InstrumentParser parser(path + "/" + attr["file"], i); +    InstrumentParser parser(path + "/" + instr_file, i);      parser.parse();      kit.instruments.push_back(i);//[attr["name"]] = i; @@ -95,49 +118,27 @@ void DrumKitParser::startTag(std::string name,      while(ic != parser.channellist.end()) {        InstrumentChannel *c = *ic; +      std::string cname = c->name; +      if(channelmap.find(cname) != channelmap.end()) cname = channelmap[cname]; +        for(size_t cnt = 0; cnt < kit.channels.size(); cnt++) { -        if(kit.channels[cnt].name == c->name) c->num = kit.channels[cnt].num; +        if(kit.channels[cnt].name == cname) c->num = kit.channels[cnt].num;        }        if(c->num == NO_CHANNEL) {          printf("Missing channel '%s' in instrument '%s'\n",                 c->name.c_str(), i.name().c_str());        } else { -        printf("Assigned channel '%s' to number %d in instrument '%s'\n", -               c->name.c_str(), c->num, i.name().c_str()); +        /* +          printf("Assigned channel '%s' to number %d in instrument '%s'\n", +             c->name.c_str(), c->num, i.name().c_str()); +        */        }        ic++;      } -    //instr = &kit.instruments[attr["name"]]; -  } -  /* -  if(name == "channelmap") { -    if(instr == NULL) { -      printf("Missing instrument.\n"); -      return; -    } - -    if(attr.find("in") == attr.end()) { -      printf("Missing 'in' in channelmap tag.\n"); -      return; -    } - -    if(attr.find("out") == attr.end()) { -      printf("Missing 'out' in channelmap tag.\n"); -      return; -    } -    instr->channelmap[attr["in"]] = attr["out"]; -  } -  */ -} +    channelmap.clear(); -void DrumKitParser::endTag(std::string name) -{ -  /* -  if(name == "instrument") { -    instr = NULL;    } -  */  }  int DrumKitParser::readData(char *data, size_t size) diff --git a/src/drumkitparser.h b/src/drumkitparser.h index f585043..f02eece 100644 --- a/src/drumkitparser.h +++ b/src/drumkitparser.h @@ -47,6 +47,10 @@ private:    DrumKit &kit;    //  Instrument *instr;    std::string path; + +  std::map<std::string, std::string> channelmap; +  std::string instr_file; +  std::string instr_name;  };  #endif/*__DRUMGIZMO_DRUMKITPARSER_H__*/ | 
