From 6ea25018546ebc099845158de7fef29c1c4fb28d Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Fri, 4 Feb 2011 16:20:12 +0100 Subject: Tiny bugfix in in-synth-cli, updated TODO and stuff --- TODO | 23 ++++++++--------------- TODO.done | 2 ++ synth/Makefile | 2 +- synth/OPTIMIZATIONS | 13 +++++++------ synth/in_synth_cli.cpp | 12 +++++++++--- synth/jack.cpp | 2 +- 6 files changed, 28 insertions(+), 26 deletions(-) diff --git a/TODO b/TODO index 6de4cb8..587f253 100644 --- a/TODO +++ b/TODO @@ -2,18 +2,17 @@ wenn man danach die noten spielen will. nicht reproduzierbar TODO für den synth + o im in-synth-cli: lfos- und snh-neusetzen ist falsch + es muss IMMER gelockt werden. + allerdings muss maybe_calc_lfos gelockt werden, die noten können + weiter bestehen o frameskip vlt nicht ++en? - o seltener cleanup rufen, stattdessen als inaktiv markieren - -> effekt: noten können wiederverwendet werden, seltenere ctor-aufrufe - + o chorus, reverb etc. + o max_pitchbend per controller setzen? + per RPN, NRPN + o nur auf bestimmte channels reagieren o RAM aufräumen? - 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? - o jedes programm eigene LFOs? o andere wellenformen bei LFOs? @@ -24,14 +23,8 @@ TODO für den synth o attack und release ggf. auf niedrigen wert (<=0.01) initen, um knackser zu vermeiden? - o chorus, reverb etc. - o konnte-nicht-verbinden-warnung weniger schlimm machen - o max_pitchbend per controller setzen? - per RPN, NRPN - o nur auf bestimmte channels reagieren - (o)bei program change vielleicht nicht _ALLE_ controller resetten? (o)fehlerklassen für fatale fehler (von string abgeleitet) diff --git a/TODO.done b/TODO.done index 26e7e06..e354909 100644 --- a/TODO.done +++ b/TODO.done @@ -74,6 +74,8 @@ TODO für den synth x optimierung: foo++ durch ++foo ersetzen x optimierung: den relevanten iterationen: foo.end() cachen! x mehr wellen für wave[] + x wenn aufgehängt, kann er mit ctrl+c nicht mehr abgebrochen werden! + x ctrl+d führt zu bug TODO fürs CLI 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"<i;k--) + for (size_t k=i+frameskip-1;k>i;--k) { outbuf[j][k]=outbuf[j][i]; #ifdef STEREO -- cgit v1.2.3