Sinnlose Optimierungen o if(foo.fm_strength!=0) ...: kein effekt, höchstens leichter anstieg! o dauerndes nutzen von oscillator[i] durch einen curr_osc pointer ersetzen (um etwa eine standardabweichung schneller -> kein wirklicher effekt) Mögliche Optimierungen o ??? if (out>0) und was mit lfo: vlt das if weglassen? o 1% noten kriegen direkten pointer auf ihre waves; (custom_wave-check entfällt) x 15% fm-liste (die nur die oscs mit fm[i]!=0 enthält) statt in O(n²) alle durchzutesten: bei 2 oszillatoren kein effekt, bei 9 oscs der form 1->2->3...->9 (also 9 mod-beziehungen) 17% verbesserung o ??? Channel::get_sample() soll mehrere frames berechnen. soll außerdem das /ONE*VOL_FACTOR gleich mit einrechnen (kann einmalig gleich mit Channel::volume verrechnet werden) o 10% BOTTLENECKs in note.cpp fixen. actual_freq und abhängigkeiten nur dann berechnen, wenn sie sich auch ändert (set_freq, porta, pitchbend, freq-envelope) o ??? log_verbose sollte ggf. garnicht interpretiert werden? 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 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 Kein negativer Einfluss auf die Performance: o _virtual_ void Note::get_samples (mit time nicht erkennbar)