-
Notifications
You must be signed in to change notification settings - Fork 0
/
notes.txt
277 lines (239 loc) · 10.6 KB
/
notes.txt
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
Wanted Feature List / Change List
---------------------------------
Algorithms on Other Systems (to consider)
1 -> 2 & 3 -> 4 (Bleass, Dirtywave M8, Ableton) diamond shape
1 -> 2 -> 3 & 4 (Bleass, Dirtywave M8, Ableton)
1 & 2 & 3 -> 4 (DX7, Bleass, Dirtywave M8, Ableton)
1 -> 2 & 3, 4 (DX7, Dirtywave M8, Ableton)
1->2&4, 3->2&4 Algorithm 4 + more (Digitone)
1->2&3, 2->3->4 (Digitone)
1 -> 2 -> 4, 3 -> 4 (Ableton)
Then renumber Operator 2 and Operator 3 (switch around)?
Affects ym2612.js
Distortion (symmetry) modulation?
Timbre frames
Replace the basic wave shapes with a weighted sum (or difference) of saws, pulse waves and triangles at different frequency multiples? (+ one custom wave or sine with only 0 & 180 degree phases)
E.g. Saw at 1f sets the overall shape, saw at 2f modifies the even numbered harmonics
i.e. layered timbre frames:
Sawtooth wave: frequencies: n * m, amplitudes: 1/n, alternating phases
Square wave: frequencies: (2n-1) * m, amplitudes: 1/(2n-1), equal phases
Triangle wave: frequencies: (2n-1) * m, amplitudes: 1/(2n-1)^2, alternating phases
n is a positive integer
Optionally AM or ring mod a basic shape with a sine wave
Pass the wave (or combined sum?) though a LP filter (with resonance?) (HP filter available too?)
Take account of operator ratio / fixed frequency when calculating timings
Reuse all oscillators when adjacent frames only vary in amplitude (or pitch ratio if fading between pitches) (eliminates the need to adjust timing to align the waveforms)
Change sampling interval to approximately every 4 semitones (see spreadsheet)
Option to set start time
particularly useful for skipping hold time of first frame on first loop iteration
round to zero crossing point (specify as frame number + offset?)
Option to have a bidirectional loop
Option to set pitch ratio using transpose + detune
Option to cross fade using cosine shape
Option to set fade time as a musical interval when timingPitch = 1
Option to fade out harmonics one by one using a filter
Filter sweep then volume fade? Or simultaneous? Or overlapping? Or sweep filter down to (near?) 0Hz?
General case (when combined with FM): arbitrary filter sweep?
Or only available when not using FM?
Integrated FM modulator (sine) with DADSR envelope and ratio or fixed (and semi-fixed?)
Option to only apply it to some of the oscillators
Option to glide between frequencies
Release (post loop) frames
Single cycle waveform samples as frames
Different sets of timbre frames for different note ranges?
Different sets of timbre frames for different velocities?
Option to randomize (or key track?) sample start position (by a specified amount?) and direction (with a specified probability)? (Padshop Pro 2)
Think of it like a free running LFO? (if not truly random but based on time mod something with offset)
Resynthesis
Phase distortion?
Fix intersecting blend vectors
Resonant waves: Don't use absolute value (except for sawtooth where both should be offered)
Finish implementing playback modes
Sample starting offsets
Option to advance wavetable position by changing loop end and start positions using setTimeout
Option to mix in some fundamental
Fundamental or source wave if the source is not sinusoidal?
Fade this signal in gradually to remedy a final zero phase offset
Option to invert frequency gain
Too similar to feedback? Instead of feedback?
Transfer functions
Half slow, Half fast (a, 0.5), (1, 1)
cos(x) -> sawtooth(x)
Not an exact recipe to emulate feedback
e.g. when feedback = 5 then more like (0.91, 0.4) ?
...
Impulse x ^ a (or with asymmetry reversed)
Waveshaper asin(f(gain * sin(2PI * x))) / 2PI
In general: apply the virtual input waveform, then the inverse of the actual input
Wavefolder n * sin(2PI * x) = FM synthesis with 0Hz carrier
Additive waveforms that replicate feedback?
Would we still be able to have a feedback envelope?
Option to not reset phase
Let filter go down to 0Hz
Filter key tracking and glide?
Only respond to MIDI when visible/active?
Bug: Reading .value is broken in chrome
Bug: mixPCM doesn't support 2-op channels
Changing channel volume while PCM is in use doesn't work (problem?)
Make envelope diagram dynamic
Add "Key On" and "Key Off" annotations to envelope diagram
tremolo & auto pan phase offset
Bug: feedback strength (when n=7)?
Bug: inconsistent tone (less frequent when soloed)
Option to glide by a fixed number of semitones (better for poly)
See Pre-Glide on Novation Peak
Dampening phase should only apply when attenuation is < 0x200
When envelope reset is on then keep the beginning of the attack (& hence the phase) synchronized by waiting until all operators have been dampened
by applying the longest dampening time to all operators?
delay stage should happen after dampening (but not have rate scaling applied?)
add initial phase parameter
Sustain on/off envelope option (one shot)
Add second release stage to envelopes (applied from when Operator 1 reaches -18db and then takes effect across operators, see "reverb" in DX11 manual)
AM envelopes
Operator ratio bend
Separate ratio node (so it works with pitch bend and glide)
Fixed operator with partial key tracking ("frequency key scaling") (as -200..200 with specified centre key) (FM-X & FS1R)
Fixed operator level linked to velocity (FM-X)
Pitch envelope amount linked to velocity
compressor doesn't support soft knee
compressor doesn't work with pre-gain higher than 4
only run lfo when tremolo, vibrato, panbrello, etc. depth is non-zero
linearValueAtTime - check values saved appropriately
Ability to make parameters velocity sensitive (e.g. distortion, filter envelope amount, resonance (FS1R))
ability to add small amount of noise to operators for character?
E.g. +-1/2048
envelopes synced to tempo?
attenuation bend and velocity?
Noise/S&H/sample as LFO source?
Level scaling (per operator)
Breakpoint
Left and right depths (change in output level)
Left and right curves (+linear, -linear, +exponential, -exponential, +stepped? (OPL style), -stepped)
Can be applied to filter resonance too
Oscillator phase should reset on each SSG loop for modes 0 and 4
Non-looping shapes can be looped (via rapid retriggering)
Oscillator should stay paused until attenuation is < 0x200
Hard sync effect.
SSG loop should include attack phase (modes 0 and 4) (but it isn't 4x faster)
SSG should only run at 4x speed while attenuation is < 0x200
envelope shift
allow cutting SSG sample short (sync)
allow custom SSG shapes (max 255 levels, otherwise like PSG)
on screen keyboard
http://www.quadibloc.com/other/cnv05.htm
147mm and 100mm lengths
LFO centering (only up / only down / bipolar)?
High pass filter?
Option to have two low pass filters instead?
Wet/Dry control on filter?
PSG
Write reciprocal worklet.
Filter for PSG
separate into multiple files
overall volume control for patch
panning (but no modulation)
glide (no stepping)
pitch bend
discrete pitch movements
bends (sometimes looping) simulating vibrato or envelope
based on frequency numbers
looping envelope
filter envelope
LFO delay & fade, LFOs per voice, optional key sync (like FM LFO)
see AY8930 (only use envelope per voice from the enhanced features), Super PSG, maxYMiser & inSIDious for more ideas
No separate tremolo
Generalize envelope to support custom shapes
Use 1: custom envelope shape
Use 2 (audio rate): custom waveform (oscillator output constant)
Use 3 (audio rate): AM
Up to 255 steps
Each step lasts between 1 frame (1/60 second) and 255 frames
Up to 31 levels (or 16 when playing at the fastest speed)
Looping or not
Rate linked to pitch or not
Quick options to create tremolo
new oscillator on each key on? Need to prevent frequency going too low
noise channel
option to configure LFSR polynomial and noise bit depth and starting value and repetitions of each sample
tidy up code
per channel tunings
generalize getMIDINote to handle different interval and divisions values
replace calcKeyCode with less jumpy version
OPL2/3-like features
Compatibility
Fast envelope setting (matching OPL clock rate)
Separate LFOs for pitch and volume?
One operator channels
Setting to let LFO track note frequency at low-ish speeds (pseudo 5th operator)? Why only low?
Settings: octave(?) and detune
Montage OS v3 goes up to 1356.59Hz
Amplitude Bend
How will it work with 2-op channels?
Repeating via SSG
Filter envelope
Can be inverted
Velocity can affect attack rate
Looping bends?
Delay/Chorus unit
WAV output
Combine sample with synth
50ms limit for a transient?
Roland Linear Arithmetic Synthesis
Korg Advanced Integrated synthesis (M1)
Casio ZPI & Advanced and High Quality Large Waveform
Ensoniq Cross Wave Synthesis (SQ-80)
Kawai Digital Multi Spectrum (K4)
Yamaha SY77, etc.
Samples as operator waveforms
Only available for an operator that is not modulated by another operator or itself
Noise?
Custom waveforms?
makeBasicWaveform
alternating / invert every x repetitions (see also SY-77 waveforms)
trapezoid option (as fraction that is flat, increase sine/tri frequency as needed)
Microtuning
step offsets for PSG
getMIDINote for PSG
MIDI messages
sustain
mod wheel
assignable to volume, vibrato depth or tremolo depth (any combination, 3 sensitivity controls)
foot controller (CC4)
assignable to volume, vibrato depth or tremolo depth
expression (alters volume) (CC11)
program change
Volume Slider
Pitch Bend
Mod Wheel Aftertouch Foot Breath
Volume X X
Vibrato X X X X
Tremolo X X X X
Pitch X X X
EG Bias X X
"Performance Play" (from DX11)?
A performance:
alternates through instruments in sequence (+detune, transpose, volume, "pan", microtuning on/off) OR
splits the keyboard by note number (lower bound, upper bound, modulo arithmetic)
Chord playing "chord set"? (DX11)
Panning based on LFO, velocity or note number
Round robin panning
Series: Yamaha DX11, TX81Z, TQ5, YS200, V50
More Ideas
Velocity sensitive detuning
Customizable damping time?
UI
Quick edit (DX11 manual p.13), including "tone" (all modulator levels, Ableton) and balance (between outputs, Digitone)
Ability to map LFO to balance
Tabindexes in the custom algorithm section
Warn user when attempting to apply an LFO effect and the LFO's frequency is zero.
2 op / 4 op selector UI
Use slider to control coarse and fine (detune2) ratios together
Pad LED display with trailing zeros after decimal point
More intense red LEDs
initial phase offsets (DX7)("Understanding FM Implementations: A Call for Common Standards")
carrier:modulator modulator carrier
1:1 PI 0
1:2 0 0
1:3 PI 0
2:3 PI PI
2:1 0 PI