blob: 07cbcff9b3201b8f74113bbe0f089e5e32a81a01 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
Sinnlose Optimierungen
o if(foo.fm_strength!=0) ...: kein effekt, höchstens leichter anstieg!
Mögliche Optimierungen
o 10% filter ganz auf fixed_t umstellen?
o 5% envelope::get_level nur alle n frames arbeiten lassen, sonst cachen?
o 2% bei LFOs: bei jedem LFO-update die werte für env-max, freqfactor
und filter-offset aus orig berechnen
o 2% beim filter: evtl nur mit floats statt mit doubles rechnen?
o <2% in note::get_sample u.a.: pitch-bending effizienter lösen?
o ??? Note's ctor kopiert viel unnötiges. besser:
channels bekommen je. eine kopie aller programme
noten bekommen nur noch pointer auf channeleigene kopie
note->set_param wird unnötig
pfactor-zeuch läuft extra: wird kopiert, und bei jeder
pfactor-änderung mit dem pfactor verrechnet
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
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
|