diff options
Diffstat (limited to 'synth')
-rw-r--r-- | synth/Makefile | 2 | ||||
-rw-r--r-- | synth/OPTIMIZATIONS | 13 | ||||
-rw-r--r-- | synth/in_synth_cli.cpp | 12 | ||||
-rw-r--r-- | synth/jack.cpp | 2 |
4 files changed, 18 insertions, 11 deletions
diff --git a/synth/Makefile b/synth/Makefile index 6258697..a9ec0a1 100644 --- a/synth/Makefile +++ b/synth/Makefile @@ -1,5 +1,5 @@ CXX=g++ -CFLAGS=-Wall -O2 +CFLAGS=-Wall -O2 -g CXXFLAGS=$(CFLAGS) LDFLAGS=-lm `pkg-config --cflags --libs jack` diff --git a/synth/OPTIMIZATIONS b/synth/OPTIMIZATIONS index 07cbcff..14d5f4f 100644 --- a/synth/OPTIMIZATIONS +++ b/synth/OPTIMIZATIONS @@ -14,6 +14,13 @@ Mögliche Optimierungen note->set_param wird unnötig pfactor-zeuch läuft extra: wird kopiert, und bei jeder pfactor-änderung mit dem pfactor verrechnet + o ??? seltener cleanup rufen, stattdessen als inaktiv markieren + -> effekt: noten können wiederverwendet werden, seltenere ctor-aufrufe + o ??? KSL mit powf und floats statt mit double umschreiben + o ??? statt lfo-nummer direkten zugriff auf curr_lfo angeben? + o ??? bei tremolo (und vibrato?): eventuell nicht prüfen, obs aktiviert + ist, sondern zur not einfach *1 rechnen? + o ??? beim default_program vielleicht auch ein optimiertes objekt benutzen? x 0% beim channel::get_sample: pro note immer mehrere samples auf einmal holen (iterator braucht recht viel leistung) wird von g++ automatisch wegoptimiert -> ok @@ -21,9 +28,3 @@ Mögliche Optimierungen Kein negativer Einfluss auf die Performance: o _virtual_ void Note::get_samples (mit time nicht erkennbar) -Mögliche Bugs und ihre Lösung: - o frequenz wird nicht genau eingehalten: phase um - foo*WAVE_RES erhöhen, entsprechend wave[][bar] ändern. - ABER: im testfall um bis zu 15% langsamer - - diff --git a/synth/in_synth_cli.cpp b/synth/in_synth_cli.cpp index fd1570d..7ca9c7d 100644 --- a/synth/in_synth_cli.cpp +++ b/synth/in_synth_cli.cpp @@ -85,12 +85,12 @@ void do_in_synth_cli() int num; if (signal(2,signal_handler)==SIG_ERR) - output_warning("WARNING: failed to set signal handler in the in-synth-cli. pressing enter will\n" + output_warning("WARNING: failed to set signal handler in the in-synth-cli. pressing ctrl+c will\n" " kill the synth, so be careful. this is not fatal"); fatal_warnings=false; - while (true) + while (cin.good()) { cout << PROMPT << flush; getline(cin,input); @@ -516,7 +516,9 @@ void do_in_synth_cli() if (freq>=0) { snh_freq_hz=freq; - init_snh(); //no uninit neccessary, as this only calculates an integer + init_snh(); //no uninit necessary, as this only calculates an integer + //no lock necessary, as a race-condition would only cause + // the snh be calculated some times more } else cout << "error: sample-and-hold-frequency must be greater than zero"<<endl; @@ -529,4 +531,8 @@ void do_in_synth_cli() cout << "error: unrecognized command '"<<command<<"'"<<endl; } } + + if (signal(2,SIG_DFL)==SIG_ERR) + output_warning("WARNING: failed to reset signal handler in the in-synth-cli. you will not be\n" + " able to kill the synth with ctrl+c, try sending SIGTERM instead"); } diff --git a/synth/jack.cpp b/synth/jack.cpp index 79c7b4a..c86cbce 100644 --- a/synth/jack.cpp +++ b/synth/jack.cpp @@ -459,7 +459,7 @@ int process_callback(jack_nframes_t nframes, void *notused) #endif // if the above changes, (1) must also change #ifdef FRAMESKIP - for (size_t k=i+frameskip-1;k>i;k--) + for (size_t k=i+frameskip-1;k>i;--k) { outbuf[j][k]=outbuf[j][i]; #ifdef STEREO |