diff options
Diffstat (limited to 'src/instrumentparser.cc')
| -rw-r--r-- | src/instrumentparser.cc | 274 | 
1 files changed, 0 insertions, 274 deletions
| diff --git a/src/instrumentparser.cc b/src/instrumentparser.cc deleted file mode 100644 index 9a5e36d..0000000 --- a/src/instrumentparser.cc +++ /dev/null @@ -1,274 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - *            instrumentparser.cc - * - *  Wed Mar  9 13:22:24 CET 2011 - *  Copyright 2011 Bent Bisballe Nyeng - *  deva@aasimon.org - ****************************************************************************/ - -/* - *  This file is part of DrumGizmo. - * - *  DrumGizmo is free software; you can redistribute it and/or modify - *  it under the terms of the GNU Lesser General Public License as published by - *  the Free Software Foundation; either version 3 of the License, or - *  (at your option) any later version. - * - *  DrumGizmo is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU Lesser General Public License for more details. - * - *  You should have received a copy of the GNU Lesser General Public License - *  along with DrumGizmo; if not, write to the Free Software - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. - */ -#include "instrumentparser.h" - -#include <string.h> -#include <stdio.h> - -#include <hugin.hpp> - -#include "settings.h" -#include "cpp11fix.h" -#include "path.h" - -#include "nolocale.h" - -InstrumentParser::InstrumentParser(Instrument& instrument, Settings& settings) -	: instrument(instrument) -	, settings(settings) -{ - -} - -int InstrumentParser::parseFile(const std::string& filename) -{ -	path = getPath(filename); - -	return SAXParser::parseFile(filename); -} - -void InstrumentParser::startTag(const std::string& name, const attr_t& attr) -{ -	if(name == "instrument") -	{ -		if(attr.find("name") != attr.end()) -		{ -			instrument._name = attr.at("name"); -		} - -		if(attr.find("description") != attr.end()) -		{ -			instrument._description = attr.at("description"); -		} - -		if(attr.find("version") != attr.end()) -		{ -			try -			{ -				instrument.version = VersionStr(attr.at("version")); -			} -			catch(const char* err) -			{ -				ERR(instrparser, "Error parsing version number: %s, using 1.0\n", err); -				instrument.version = VersionStr(1,0,0); -			} -		} -		else -		{ -			WARN(instrparser, "Missing version number, assuming 1.0\n"); -			instrument.version = VersionStr(1,0,0); -		} -	} - -	if(name == "channels") -	{ -	} - -	if(name == "channel") -	{ -		if(attr.find("name") == attr.end()) -		{ -			ERR(instrparser,"Missing channel required attribute 'name'.\n"); -			return; -		} - -		InstrumentChannel* channel = addOrGetChannel(attr.at("name")); -		channel->main = main_state_t::is_not_main; -		if(attr.find("main") != attr.end()) -		{ -			channel->main = (attr.at("main") == "true") ? -				main_state_t::is_main : main_state_t::is_not_main; -			if(channel->main == main_state_t::is_main) -			{ -				settings.has_bleed_control.store(true); -			} -		} -	} - -	if(name == "samples") -	{ -	} - -	if(name == "sample") -	{ -		if(attr.find("name") == attr.end()) -		{ -			ERR(instrparser,"Missing required attribute 'name'.\n"); -			return; -		} - -		float power; -		if(attr.find("power") == attr.end()) -		{ -			power = -1; -		} -		else -		{ -			power = atof_nol(attr.at("power").c_str()); -			DEBUG(instrparser, "Instrument power set to %f\n", power); -		} - -		// TODO get rid of new or delete it properly -		sample = new Sample(attr.at("name"), power); -	} - -	if(name == "audiofile") -	{ -		if(sample == nullptr) -		{ -			ERR(instrparser,"Missing Sample!\n"); -			return; -		} - -		if(attr.find("file") == attr.end()) -		{ -			ERR(instrparser,"Missing required attribute 'file'.\n"); -			return; -		} - -		if(attr.find("channel") == attr.end()) -		{ -			ERR(instrparser,"Missing required attribute 'channel'.\n"); -			return; -		} - -		std::size_t filechannel = 1; // default, override with optional attribute -		if(attr.find("filechannel") != attr.end()) -		{ -			filechannel = std::stoi(attr.at("filechannel")); -			if(filechannel < 1) -			{ -				ERR(instrparser,"Invalid value for attribute 'filechannel'.\n"); -				filechannel = 1; -			} -		} - -		filechannel = filechannel - 1; // 1-based in file but zero-based internally. - -		InstrumentChannel *instrument_channel = addOrGetChannel(attr.at("channel")); - -		auto audio_file = -			std::make_unique<AudioFile>(path + "/" + attr.at("file"), -			                            filechannel, -			                            instrument_channel); - -		sample->addAudioFile(instrument_channel, audio_file.get()); - -		// Transfer audio_file ownership to the instrument. -		instrument.audiofiles.push_back(std::move(audio_file)); -	} - -	if(name == "velocities") -	{ -	} - -	if(name == "velocity") -	{ -		if(attr.find("lower") == attr.end()) -		{ -			ERR(instrparser,"Missing required attribute 'lower'.\n"); -			return; -		} - -		if(attr.find("upper") == attr.end()) -		{ -			ERR(instrparser,"Missing required attribute 'upper'.\n"); -			return; -		} - -		lower = atof_nol(attr.at("lower").c_str()); -		upper = atof_nol(attr.at("upper").c_str()); -	} - -	if(name == "sampleref") -	{ -		if(attr.find("name") == attr.end()) -		{ -			ERR(instrparser,"Missing required attribute 'name'.\n"); -			return; -		} - -		Sample* sample_ref = nullptr; -		for(auto& sample : instrument.samplelist) -		{ -			if(sample->name == attr.at("name")) -			{ -				sample_ref = sample; -				break; -			} -		} - -		if(sample_ref == nullptr) -		{ -			ERR(instrparser,"Sampleref pointed at non-existing sample.\n"); -			return; -		} - -		if(instrument.version == VersionStr("1.0")) -		{ -			// Old "velocity group" algorithm needs this -			instrument.addSample(lower, upper, sample_ref); -		} -	} -} - -void InstrumentParser::endTag(const std::string& name) -{ -	if(name == "sample") -	{ -		if(sample == nullptr) -		{ -			ERR(instrparser,"Missing Sample.\n"); -			return; -		} - -		instrument.samplelist.push_back(sample); - -		sample = nullptr; -	} - -	if(name == "instrument") { -		instrument.finalise(); -	} -} - -InstrumentChannel* InstrumentParser::addOrGetChannel(const std::string& name) -{ -	for(auto& channel : instrument.instrument_channels) -	{ -		if(channel.name == name) -		{ -			return &channel; -		} -	} - -	instrument.instrument_channels.emplace_back(name); -	InstrumentChannel& channel = instrument.instrument_channels.back(); -	channel.main = main_state_t::unset; - -	return &channel; -} | 
