summaryrefslogtreecommitdiff
path: root/TODO.done
blob: f0e95523e12e48351a4ae4521c2586a5b03658f1 (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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
TODO für den synth
   x knistern bei aktivem frameskip
   x tremolo und vibrato: phase nurnoch ++
   x rettack im monomode abschalten (sondern einfach nur freq ändern)
   x bei freqänderung: aufpassen, ob nicht das programm auch geändert
                       wurde. wenn ja: delete && new
   x note-limit
   x stereo: pan/balance
   x envelopes on-the-fly ändern
   x programs laden
   x beim note-limit: statt abzuschneiden ausblenden
   x einstellmöglichkeiten via MIDI-controller
   x grund-controller bearbeiten
   x ein port pro channel
   x controllern einen defaultwert pro programm mitgeben
   x monophoner modus
   x reattack
   x alwaysreattack setzen können
   x portamento testen
   x memcheck-clean!
   x memcpy durch copy() plus operator= ersetzen?
   x pitch-bend
   x controller-reset
   x key scale level, key scale rate
   x akkurates note-on
   x frameskip
   x globale config-datei, oder alle programs in einem verz. einlesen etc.
   x auf dateifehler reagieren!
   x sampler-"oscs", d.h. laden von wav-dateien, die sich sonst
     wie oscs verhalten (fm möglich usw.)
   x analoge synthese auf den output jeder note anwenden
   x tiefpass via def.datei setzen: trem, env, res
   x tiefpass via controller setzen
   x osc-sync
   x bei genügend xruns noten töten
   x filter knackst
   x bei self-mod mit faktor 1 (auch ohne filter): segfault
   x bei starken vibratos: segfault, weil fm zu extrem wird
   x bei bug.prog: auch ohne filter: knacksen bei den meisten noten (z.B. C)
   x per velocity statt lautstärke andere params steuern
   x frameskip so implementieren, dass bufsize irrelevant ist
   x lfo_update_frames einstellbar machen
     sollte durch frameskip dividiert werden
   x tremolo- und vibrato-arrays sind mit mehreren MB zu groß!
     ein wert pro sample ist unnötig. könnte auch rechenzeit in
     calc_foo sparen, da seltener aufgerufen
   x sample-and-hold -> fm_strength, -> freq, -> VCF
   * bei osc-envelopes ggf. auch nur alle n frames neu setzen? [verschoben]
   * filter optimieren? (arbeiten momentan mit floats) [verschoben]
     verstehen, optimieren und dann profilen
   x stimmt die stereo-implementierung?  [ja]
   x BUG: bei Note::set_param sollte statt dem eigentlichen param
          der orig gesetzt werden und dann neu berechnet werden!
   x BUG: bei release und reattack: BEIDE male die filter-envelope beachten!
   x wave auf int*[] mit wave[i]=new int[] umbauen
   x oscval-nullen kann in get_sample() weggelassen werden
   x in get_sample(), beim aufaddieren zum out (und vmtl auch fm-)wert:
     erst nach dem addieren scalen, statt für jeden faktor einzeln
   x filter_envelope könnte mit anderem ctor geinitet werden (weniger schreibarbeit)
   x notes compilieren und als .so-datei laden
   x parser-klasse durch parse-funktion ersetzen
   x sostenuto-, halte-, legato-, soft-pedal
   x programme on-the-fly (um)laden


TODO fürs CLI
   x filter_update_frames, lfo_update_frames in config, in sec (auch im CLI)
   x max_port_time einstellen
   x manuelle program -> datei - mappings
   x automatische mappings ( xxxIGNORIERT.prg, xxx ist die programmnummer),
     alle dateien eines verzeichnisses einlesen. bei nichtexistenz
     auf normalen sinus zurückfallen
   x konfigdateien lesen (inhalt wie CLI-optionen)
   x vibrato- und tremolo-frequenzen einstellen
   x cleanup-intervall setzen
   x space-sicher machen
   x fehlerbehandlung:
     syntaxfehler sollten übergangen werden, sofern möglich
     in parser: throw!, sonst: meckern und nächste zeile parsen
   x automatisch an alle midi-outs hängen
   x interface div-by-zero-sicher machen
   x envelope_update_frames per CLI setzen
   x .so unloaden!
   * lfo-maxima getrennt regeln. [abgelehnt]


TODO für den compiler
   x wenn vel_influence für foo, aber foo ist konstant null, bleibt
     foo trotzdem konstant.
   x vel_influence ist IMMER gegeben für output, außer wenn anders
     angegeben
   x *1 bzw /2 optimierungen klappen nicht?
   x pfactor nicht wegoptimieren, sondern immer verwenden
   x wenn sync global aus ist, kann auch osc.sync genullt werden