summaryrefslogtreecommitdiff
path: root/synth
diff options
context:
space:
mode:
authorFlorian Jung <flo@thinkpad.(none)>2011-02-04 16:20:12 +0100
committerFlorian Jung <flo@thinkpad.(none)>2011-02-04 16:20:12 +0100
commit6ea25018546ebc099845158de7fef29c1c4fb28d (patch)
tree8e99e35949f462b5fea95411a77757e46117f096 /synth
parent12f20783b7ec8804825282fd04d9333ec83e31eb (diff)
Tiny bugfix in in-synth-cli, updated TODO and stuff
Diffstat (limited to 'synth')
-rw-r--r--synth/Makefile2
-rw-r--r--synth/OPTIMIZATIONS13
-rw-r--r--synth/in_synth_cli.cpp12
-rw-r--r--synth/jack.cpp2
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