diff options
Diffstat (limited to 'drumgizmo')
| -rw-r--r-- | drumgizmo/enginefactory.cc | 6 | ||||
| -rw-r--r-- | drumgizmo/input/midifile.cc | 30 | ||||
| -rw-r--r-- | drumgizmo/output/alsa.cc | 31 | ||||
| -rw-r--r-- | drumgizmo/output/wavfile.cc | 22 | 
4 files changed, 70 insertions, 19 deletions
| diff --git a/drumgizmo/enginefactory.cc b/drumgizmo/enginefactory.cc index 5fa230b..c9f2ef3 100644 --- a/drumgizmo/enginefactory.cc +++ b/drumgizmo/enginefactory.cc @@ -24,6 +24,8 @@   *  along with DrumGizmo; if not, write to the Free Software   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ +#include <iostream> +  #include "enginefactory.h"  #include "jackclient.h" @@ -61,7 +63,7 @@ InputEnginePtr createInputEngine(std::string const & name) {  	// todo: add more engines -	printf("Unsupported input engine: %s\n", name.c_str()); +	std::cerr << "Unsupported input engine '" << name << "'\n";  	return nullptr;  } @@ -84,6 +86,6 @@ OutputEnginePtr createOutputEngine(std::string const & name) {  	// todo: add more engines -	printf("Unsupported output engine: %s\n", name.c_str()); +	std::cerr << "Unsupported output engine '" << name << "'\n";  	return nullptr;  } diff --git a/drumgizmo/input/midifile.cc b/drumgizmo/input/midifile.cc index d1748dc..323a198 100644 --- a/drumgizmo/input/midifile.cc +++ b/drumgizmo/input/midifile.cc @@ -24,6 +24,8 @@   *  along with DrumGizmo; if not, write to the Free Software   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ +#include <iostream> +  #include "midifile.h"  int const NOTE_ON = 0x90; @@ -51,27 +53,28 @@ bool MidifileInputEngine::isMidiEngine() {  bool MidifileInputEngine::init(Instruments& instruments) {  	if (file == "") { -		fprintf(stderr, "Missing midifile argument 'file'\n"); +		std::cerr << "[MidifileInputEngine] Missing midi filename\n";  		return false;  	}  	if (midimap == "") { -		fprintf(stderr, "Missing midimapfile argument 'midimap'.\n"); +		std::cerr << "[MidifileInputEngine] Missing midimap filename\n";  		return false;  	}  	smf = smf_load(file.c_str());  	if (smf == nullptr) { -		fprintf(stderr, "Could not open midifile '%s'.\n", file.c_str()); +		std::cerr << "[MidifileInputEngine] Failed to load midifile '" +			<< file << "'\n";  		return false;  	}  	MidiMapParser p{midimap};  	if (p.parse()) { -		fprintf(stderr, "Could not parse midimapfile '%s'.\n", midimap.c_str()); +		std::cerr << "[MidifileInputEngine] Failed to parse midimap '" +			<< midimap << "'\n";  		return false;  	}  	midi_mapper.midimap = p.midimap;  	for (auto i = 0u; i < instruments.size(); ++i) {  		auto name = instruments[i]->name(); -		printf("%d : %s\n", i, name.c_str());  		midi_mapper.instrmap[name] = i;  	}  	return true; @@ -79,15 +82,28 @@ bool MidifileInputEngine::init(Instruments& instruments) {  void MidifileInputEngine::setParm(std::string parm, std::string value) {  	if(parm == "file") { +		// apply midi input filename  		file = value; +		  	} else if(parm == "speed") { -		speed = std::stof(value); +		// try to apply speed +		 try { +			speed = std::stof(value); +		} catch (...) { +			std::cerr << "[MidifileInputEngine] Invalid speed " +				<< value << "\n"; +		}  	} else if (parm == "midimap") { +		// apply midimap filename  		midimap = value; +		  	} else if (parm == "loop") { +		// apply looping  		loop = true; +		  	} else { -		printf("Unsupported midifile parameter '%s'\n", parm.c_str()); +		std::cerr << "[MidifileInputEngine] Unsupported parameter '" +			<< parm << "'\n";  	}  } diff --git a/drumgizmo/output/alsa.cc b/drumgizmo/output/alsa.cc index f1a6806..14a9c6d 100644 --- a/drumgizmo/output/alsa.cc +++ b/drumgizmo/output/alsa.cc @@ -24,6 +24,8 @@   *  along with DrumGizmo; if not, write to the Free Software   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ +#include <iostream> +  #include "alsa.h"  int const BUFFER_SIZE = 40960; @@ -55,7 +57,7 @@ AlsaOutputEngine::AlsaOutputEngine()  }  AlsaOutputEngine::~AlsaOutputEngine() { -	// note: cannot release `params` (seg fault but why?) +	// note: do NOT release `params`, it was allocated by `alloca()`  	if (handle != nullptr) {  		snd_pcm_close(handle); @@ -69,7 +71,8 @@ bool AlsaOutputEngine::init(Channels channels) {  		AlsaInitError::test(value, "snd_pcm_open");  		num_channels = channels.size();  		if (handle == nullptr) { -			printf("No handle!\n"); +			std::cerr << "[AlsaOutputEngine] Failed to acquire " +				<< "hardware handle\n";  			return false;  		}  		// Allocate and init a hardware parameters object @@ -91,8 +94,8 @@ bool AlsaOutputEngine::init(Channels channels) {  		AlsaInitError::test(value, "snd_pcm_hw_params");  	} catch (AlsaInitError const & error) { -		printf("%s failed: %s\n", error.msg.c_str(), snd_strerror(error.code)); -		fflush(stdout); +		std::cerr << "[AlsaOutputEngine] " << error.msg << " failed: " +			<< snd_strerror(error.code) << std::endl;  		return false;  	} @@ -104,11 +107,27 @@ bool AlsaOutputEngine::init(Channels channels) {  void AlsaOutputEngine::setParm(std::string parm, std::string value) {  	if (parm == "dev") { +		// apply hardware device name  		dev = value; +		  	} else if (parm == "frames") { -		frames = std::stoi(value); +		// try to apply hardware buffer size +		try { +			frames = std::stoi(value); +		} catch (...) { +			std::cerr << "[AlsaOutputEngine] Invalid buffer size " +				<< value << "\n"; +		}  	} else if (parm == "srate") { -		srate = std::stoi(value); +		try { +			srate = std::stoi(value); +		} catch (...) { +			std::cerr << "[AlsaOutputEngine] Invalid samplerate " +				<< value << "\n"; +		} +	} else { +		std::cerr << "[AlsaOutputEngine] Unsupported parameter '" +			<< parm << "'\n";  	}  } diff --git a/drumgizmo/output/wavfile.cc b/drumgizmo/output/wavfile.cc index ae8b3f1..d8b8d99 100644 --- a/drumgizmo/output/wavfile.cc +++ b/drumgizmo/output/wavfile.cc @@ -24,6 +24,8 @@   *  along with DrumGizmo; if not, write to the Free Software   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ +#include <iostream> +  #include "wavfile.h"  WavfileOutputEngine::WavfileOutputEngine() @@ -54,7 +56,8 @@ bool WavfileOutputEngine::init(Channels data) {  		auto fname = file + data[i].name + "-" + std::to_string(i) + ".wav";  		channels[i] = sf_open(fname.c_str(), SFM_WRITE, &info);  		if (channels[i] == nullptr) { -			printf("Write error...\n"); +			std::cerr << "[WaffileOutputEngine] Failed to initialize " +				<< "channel #" << i << "\n";  			return false;  		}  	} @@ -63,11 +66,21 @@ bool WavfileOutputEngine::init(Channels data) {  void WavfileOutputEngine::setParm(std::string parm, std::string value) {  	if (parm == "file") { +		// apply output filename prefix  		file = value; +		  	} else if (parm == "srate") { -		info.samplerate = std::stoi(value); +		// try to apply samplerate +		try { +			info.samplerate = std::stoi(value); +		} catch (...) { +			std::cerr << "[WavfileOutputEngine] Invalid samplerate " +				<< value << "\n"; +		} +		  	} else { -		printf("Unsupported wavfile parameter '%s'\n", parm.c_str()); +		std::cerr << "[WavfileOutputEngine] Unsupported parameter '" +			<< parm << "'\n";  	}  } @@ -83,7 +96,8 @@ void WavfileOutputEngine::pre(size_t nsamples) {  void WavfileOutputEngine::run(int ch, sample_t* samples, size_t nsamples) {  	if (static_cast<unsigned int>(ch) >= channels.size()) { -		printf("Invalid channel %d (%d channels available)", ch, static_cast<int>(channels.size())); +		std::cerr << "[WavfileOutputEngine] cannot access channel #" +			<< ch << " (" << channels.size() << " channels available)\n";  		return;  	} | 
