-
Notifications
You must be signed in to change notification settings - Fork 1
/
tasks.txt
370 lines (370 loc) · 24 KB
/
tasks.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
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
√ create tone
√ delete tone
√ adjust start/end of new tone
√ adjust pitch of new note
√ adjust start/end of existing tone
√ add note to tone for arpeggio
√ set scale constraint
√ allow deleting existing notes off the scale
√ set key
√ 3 channels
√ detect when the song stops and restart it. force stop the old SoundChannel for sanity.
√ separate song editing from Main.mxml, put in SongEditor.mxml
√ create Track.mxml, which shows the pattern number of each bar, the playhead
√ 8 patterns for lead, 4 for harmony and bass, assign with number keys
√ 16 bars
√ select channel with up and down arrows
√ select bar with left and right arrows
√ custom looping
√ pausing with space, skipping bars with []
√ tempo dropdown: fast, med, slow
√ save, load
√ beat count, part count
√ show the pitch letters: C, C#, D, etc
√ show ghosts of the notes in the other channels
√ waveform choices
√ bitcrushing the triangle wave
√ noise channel
√ Export to WAV
√ rearrange and hide panels to emphasize important features for beginners. flags for showing fifth, other channels, note names
√ illustrate loop area better
√ allow up to 8 patterns in all channels?
√ when you hover over a selected pattern/channel, instead of the box preview, show a triangle up or down depending on where your mouse is. the other triangle is hollowed out.
√ fix wrap around clipping bug on export
√ fix focus bug: spacebar reexports song!
√ The start of a tone can always snap to an existing tone end.
√ Be more lenient about starting at beats 2 and 3.
√ when bending pitch, multiply over each sample instead of adding.
√ copy length to default when editing length of notes.
√ sawtooth!
√ piano along left side to preview notes? replace "show letters"
√ instead of conditionally reseting the period, try period -= int(period). benchmark!
√ pressing [] shouldn't escape the loop
√ button for export, clean slate, undo/redo, pause
√ replace ChangeFragment with ChangeSong, preserve pattern objects for undo history
√ compress bar data: 2 bars per character.
√ compress tone shapes
√ compress/decompress notes. confirm drums work. empirically optimize prev note count.
√ decompress tone shapes
√ get a domain name!
√ put song in url fragment
√ to save on file size, get rid of that flex text field at the top.
√ put on website!
√ set up some basic html
√ new waves
√ source control
√ filter + decay
√ separate main file for offline.
√ take focus from "save as wav" button after clicking it!
√ changing preferences doesn't need to be undoable but should update display.
√ save "preferences" to localSharedObject
√ pausing should actually stop SampleDataEvents
√ as3 lib usage example
√ fix wave drop down menu
√ create README
√ create public version number
√ reenable filter in one drop down menu
√ tremelo/vibrato choices
√ for chorus, have two periods at multiples of the main freq. jitter on arpeggio slices?
√ volume options per channel
√ add license to code
√ link to source in html
√ link to offline version
√ add copyright disclaimer to page
√ link to twitter
√ donation button
√ rename checkmark wave
√ fix piano initialize after mouse event error
√ tweak vibrato depth and speed
√ when tone ends reset period, fixes harp pops and union chorus phase
√ slow down decay soft
√ whole tone scale
√ increment format number, port settings from old version
√ center waves on average amplitude to avoid pops after lowpass
√ move the playhead graphic gradually toward the next position.
√ always fade out volume over last arpeggio
√ attack: hard, soft, slide. don't reset period when sliding!
√ octave scroll bar, with preference option to disable it
√ load old songs with octave offset, default pitch...
√ bring back the old constant volume option, and make it the default for songs loaded with the old format.
√ widen the window to allow the "envelope" label
√ copy paste patterns
√ put the edit buttons in one menu. undo, copy/paste, clean slate, etc
√ copy and paste keyboard commands
√ perform dynamic range compression, increase base volume
√ global volume control
√ drum volume drop down menu
√ clip rect on pattern editor
√ indicate recommended beats/bar 8 somehow
√ fifths chorus option
√ create pitch bend, triggered by vertical dragging.
√ when adding arpeggio to a pitch bend, offset the arpeggio note by the current interval.
√ don't create new arpeggios overlapping old arpeggios on pitch bends.
√ tweak hit detection on pitch bends so that it's a little tighter than a box
√ When the pitch bend changes the initial pitch, recalibrate all notes of the tone.
√ don't let pitch bends escape the normal pitch range, especially with arpeggios. check both new arpeggios and new pitch bends.
√ tweak rendering of pitch bends so that they don't become tiny threads.
√ volume pins
√ volume dragging doesn't seem to be relative to previous volume
√ dragging pitch bend off the side of the editor causes instability
√ copy the volume pin structure for future tones, on a per channel basis.
√ disable volume control when creating new tones with horizontal dragging.
√ reset default tone shape when cleaning slate
√ dragging horizontally should drag the pins, not just the tone endpoints.
√ correctly move pins when swingifying, etc.
√ convert pattern editor from mxml to a sprite
√ modal dialog for customizing song duration
√ able to access patterns over 9 with multiple keystrokes
√ deserialize grouped channel settings
√ make sure keyboard input is disabled in modal dialog
√ serialize pattern id, using as many bits as needed.
√ make sure that all possible pattern bitstrings fit within 4096 characters, or increase the limit.
√ make sure you can't copy patterns between drums and tonal instruments
√ when shrinking bar count, make sure to bound loop, barScrollPos, playhead, etc
√ use customized bar count, create GUI for scrolling bars somehow.
√ empty patterns get special 1-bit treatment
√ serialize pattern instruments
√ Benchmark synthesized vs precomputed noise. Precomputed would allow you to select non chip tune style noise.
√ rebalance drum volume range. bass is too quiet, cymbal too loud.
√ each drum wave gets volume scale
√ don't autoplay until URL fragment has been passed through
√ drums get custom lowpass based on change rate
√ can drums use the other envelope/slide options?
√ tones that fade out volume completely shouldn't slide to next tone
√ attack transitions that slide should let the decay filter smoothly rise again to better approximate strings/violin. also repeated notes shouldn't fade out automatically.
√ volume scaling from chorus effect: Synchronized waves are louder than waves that are almost but not quite the same frequency. Ratio: square root of two!
√ medium sustain filter, slower sharp filter...
√ make a non-editing embeddable player, in an iframe.
√ server RSA authentication
√ figure out song/playlist distinction in embedded players
√ figure out data format for published songs.
√ mouse is attracted to active note half a note above cursor, but not below cursor, even overrides active note at cursor to highlight note above.
√ upper boundary isn't working with drum portamento
√ retro drums really need more sharpness in upper range
√ oops, could press tab a few times to get keyboard focus away from prompt
√ generalize prompt functionality
√ preliminary publish prompt
√ fix piano pitch. still horribly broken!
√ twitter stream on the side
√ color-blind friendly colors
√ buttons to transpose up and down to the next valid note
√ dedicated silent 0 pattern
√ take focus away from master volume after clicking it
√ wav export intro, loop count, outro
√ disable intro and outro checkboxes when the loop encompasses the entire song
√ javascript mobile support!
√ fix those flex dropdowns so they stop throwing errors
√ Reverb
√ optimize those Math functions in Synth
√ make play and volume controls prettier
√ MIDI export
√ I broke safari export? (Did it work before? Apparently so? Either fix it or add warning)
√ Put beepbox in focus on page load.
√ Make the standalone version use js.
√ minify
√ Update the mobile instructions, "vibrate switch" isn't a thing anymore.
√ use the viewBox size thing to make the svg volume icon scalable.
√ update flash version to include bowed chorus and reverb.
√ embed: display notes scaled down to fill timeline. Only need to render it when hash changed.
√ draw lines at bars and octaves
√ when you click the link to the full editor, pause the embed player and open in new window.
√ volume control
√ make maximum size of volume slider and play button proportional to iframe size.
√ allow dragging embedded playhead.
√ make sure there's only one beep box player playing simultaneously. make a random guid on startup. When clicked play, set it to a variable in sessionStorage or localStorage. periodically check to make sure that it's still set to that, otherwise pause.
√ loop control
√ rename note to pitch, tone to note.
√ octave scroll dragging should just be one History change, and it would be nice if dragging sliders didn't generate a bunch of undo history events. Ooh, let's do it for transpose too.
√ merge undo history with browser history.
√ Use hashchanged instead of animation frame to compare hash values.
√ Use pushstate to set hash in url, and include a "state" object indicating whether you can undo.
√ On page load, replace state saying "this is the start of history".
√ If the hash was entered manually, there will be no state. Replace state to indicate undo is possible.
√ When using undo, check if state says we can undo, and if so, use history.back().
√ Remove undo() and redo() methods in ChangeHistory.
√ Stop tracking Changes in ChangeHistory.
√ Reuse the same Song object.
√ For "prospective" changes, if recentChange is different, remember start state and push new state.
√ For "prospective" changes, if recentChange is the same, replace state or undo if reverted.
√ Mark undoable changes in the type system.
√ How much of ChangeHistory and individual Changes can I delete?
√ Delay setting hash until animation frame
√ Use charCodes instead of new strings in base64 stuff.
√ optimize song.toString using charCodes. rename song.toString to song.toBase64String.
√ rename "_on" to "_when". rename attack to envelope.
√ when undoing changes selected bar, track editor should scroll to display it.
√ If there's a drum note at the second-to-top slot, I can't add on to the top slot. Also, the whole snap-to-nearby-note-pitch thing makes less sense for drums anyway.
√ octave scroll bar shouldn't show white highlight when mouseover if current channel is drums.
√ Let "back" and "escape" closed modal dialogs/prompts.
√ copy and paste across tabs? (local storage?)
√ drum noise waves should be static, and generated on demand. (when play() is called, and at start of synth callback, check all drum instruments.) ensureDrumWavesExist()
√ "custom/harmonize" chorus setting. lock first chorus voice to first pitch, the second voice arpeggios remaining pitches.
√ move waves into Music structure.
√ the "period" variables are the wrong name for what they mean. In Song, rename "instruments" to "instrumentCount", and other similar properties.
√ add sixths and eighths rhythms.
√ custom number of channels, up to 6 melodic and 2 drums.
√ change song size prompt
√ import base64, export base64, import json, export json, export midi
√ check all those places where we check whether the channel is 3 to see if it is supposed to be drums.
√ in pattern editor, show all drum channels if appropriate preference is on.
√ track editor scaling
√ track colors based on channel type
√ _defaultPinChannels was broken.
√ move Music to top, rename to Config.
√ drumFilter shouldn't have hardcoded dependence on drum wave index.
√ adjust json import to be backwards compatible with old names: romani, binary
√ when exporting to midi with custom harmony, use correct simultaneous notes.
√ new drum waves! :D (Thanks modded beepbox!)
√ the play button should also have move playhead buttons next to it.
√ responsive design layout. Okay, put play/edit/options/export on a horizontal line under loop editor, song settings below on left, and instrument settings below on right.
√ max-height of pattern editor (and piano/scrollbar) should be less than 100vh.
√ the method for cycling patterns on a bar is inadequate on touchscreen... use select menu? also update instructions in index.html for changing patterns.
√ highlight note edge extensions on touch
√ midi channel export names should be in Config.
√ random infinite loops when opening new song?
√ when pattern is 0, show other channels anyway over black pattern editor.
√ faster tempos
√ layout was messed up if browser default font size is set to large.
√ add a "clean slate"/"new song" button with a little dog-eared page icon.
√ while I'm at it, the edit menu should have a pencil icon and the prefs should have a gear or wrench.
√ rename barpattern to pattern, bareditor to patterneditor, attack to envelope...
√ tempo slider could use tooltip for BPM
√ add auto-follow and auto-play preferences. (I guess autoplay is only on computers? but defaults to true?)
√ restructured song/channel/pattern/instrument js representation.
√ when you click the wave menu then use arrow keys to select drums the editor shouldn't lose focus.
√ phase modulation:
√ interface to select type of channel.
√ modulation sliders, ratio selectors, envelop selectors.
√ make the piano share most of the instrument code with the notes, including arpeggio and operator frequencies... not that you can test that yet.
√ use custom pitches for each modulator if available
√ use "filterTime" for modulator decays
√ determine start and end operator envelopes.
√ rename old envelope to transition
√ separate phase for each operator, allow overriding fundamental frequency for each oscillator with notes.
√ algorithms, feedback!
√ when there are multiple carriers, use a little chorus offset
√ adjust the total volume based on number of carriers
√ forward/backward compatible instrument url
√ operator envelope shapes
√ put a little number in front of every operator row.
√ JSON
√ update midi instrument export too.
√ dragging sliders back and forth rapidly caused spurious undoing!
√ geeze, I really don't like how undoing affects scrolling. is there anything I can do about that? Yes! (except on IE.)
√ more flare speeds?
√ wave filter with a higher cutoff, maybe none. "sustain full" or "none" depending on where I insert it in the list, may need new url version. can probably drop the word "sustain"? (if so, don't forget to remember it for json parsing!)
√ rename sustain to steady, or just leave it off and say "medium" etc. Maybe rename "sharp" to "bright" or something.
√ for chip chorus, save a multiplication for one of the deltas, use ratio for other.
√ scale channel#ChorusSign appropriately so that both wave signals have the correct volume for their pitch. Also the negative sign shouldn't be hardcoded, should be in Config.
√ When increasing number of instruments, copy last existing instrument.
√ reuse song channel objects beyond the first four when re-parsing a song url. Maybe don't reset instruments when reloading songs, to temporarily preserve settings for other instrument types. (but when loading older songs, newer instrument properties should have default values... okay here's the deal: reset the instruments when you get to the instrument type command, resetting only settings relevant to the instrument. However, for song data formats before six, reset all instruments immediately, because they don't have type commands... also drums? ugh this is a mess!)
√ add a little "?" next to "Type" when in FM mode, brings up a popup explaining how to use it, link to a song showcasing some ideas to get you started.
√ while we're at it, custom harmony could use a "?" hint. Anything else?
√ the instructions in index.html need some work.
√ seamless transitions sound poppy. maybe seamless transitions should always fade out if the next note is null AND the note ends before the end of the bar. (Since we don't know yet whether the next bar continues the note.)
√ pitch bends mixed with arpeggios don’t properly check min/max bounds
√ put little numbers on the notes in the pattern editor when in FM mode and there's more than one pitch.
√ dim oscillator envelope when volume/modulation is zero.
√ loop could be dragged past ends of song, goes negative...
√ couldn't sandwich note between two existing adjacent notes.
√ Impasaurus said I made the retro drum sound more "periodic", whoops! Seems like the playhead keeps resetting to zero if there are gaps between drums... fixed!
√ Restructured synthesizer, now each tone is computed in separate passes and reverb is applied after all tones. Much cleaner, and surprisingly still fast. If not all channels are in use, even faster!
√ chorus
√ resonant filter with envelope
√ Added resonance filters to fm/drums.
√ get rid of Config.volumeNames
√ Optimized wave phase and lookup table math slightly. Gave drum tones a random phase on reset, and reset drum tones during rests like the rest of the instruments, so that filters are also reset.
√ copy/paste instruments! (Pasting either patterns or instruments should be grayed out if not compatible?)
√ channel color lookups should wrap around.
√ In mobile layout, the new/edit/prefs/export menus can fit into the left column above song settings.
√ Bake the LFO effects into the pitch bend and volume envelope, like operator envelope.
√ Divide each beat into a standard 24 note stops and 48 arpeggio/volume/vibrato stops.
√ Allow mixing rhythms.
√ Dragging notes while autofollow switches bars could cause notes to overlap.
√ vibrato shaky
√ Target ES6 and use uglify-es.
√ Optionally force scale changes to apply to existing notes.
√ 0.1% of all songs use effect tremolo. Replace it with filter tremolo, which is more useful.
√ fadeout transition: crossfade, fadeout, pad.
√ Add more fractional pulse waves, 1/3 and 1/6, and also moved and renamed plateau to rounded.
√ menu select title option should have "hidden" attribute, along with selected and disabled.
√ Attack/onset time should be measured in seconds. Fadeout can stay relative to tempo though. Removed constraint that transition cannot be longer than half of note duration, and allowed released tones to continue fading in.
√ Added another transition and more pulse widths, renamed transitions.
√ live input tones should track time since note started for delayed vibrato, envelopes, etc, and release active tones if pitch changes.
√ If held & released tones exceeds 8 tones per channel, the oldest ones should fade out fast.
√ Polyphony, as a new option in a new menu called "chords". Other options: "arpeggio" and "custom interval".
√ Use a single midi channel per beepbox channel. Stack notes unless using arpeggio. Don't try to apply "chip interval".
√ Import midi files! (except not drums yet)
√ Import midi non-melodic instruments as noise channels (but still no drumsets).
√ Use interfaces for structured Config data.
√ Empty bars at the end of a song were discarded in the midi export/import process. Fixed!
√ Combine new, export, and import JSON into a File menu.
√ An edit option to autodetect scale and key from existing notes. Add up all notes, biased by pitch, downbeats, duration, and maybe even perceived volume, and find the highest root/fifth pair for key.
√ Made beats-per-bar management way more flexible. Can stretch notes to fit new bar size, or overflow notes across bars.
√ Pull out the bar count choice from the song limits prompt, allow splicing at the beginning or end of the song.
√ Import midi drumsets using a map from drum "pitch" to noise shape.
√ Polyphonic drums.
√ "strum" chords, polyphonic and tones are staggered in time.
√ Fixed chorus aliasing with linear interpolation.
√ Added polyBLEPs on the basic waves, add an extra sample on the end of waves for interpolation based on frequency. Whoops, nevermind, pre-integrating and then differentiating is way more effective at anti-aliasing waves that are higher resolution than the sampling rate.
√ Instrument preset menu. Hides instrument settings by default, but that can be disabled with preferences.
√ Midi instrument presets. Then I could plausibly import midi files! And maybe during export I could figure out which preset matches the instrument most closely and choose the corresponding midi instrument.
√ Renamed pluck to twang.
√ Added midi subharmonic octaves to some presets for better import/export.
√ Spectrum instruments! :D
√ Better compressor/limiter.
√ Better filter volume.
√ Fixed zero length note bug.
√ Fixed mobile-layout pattern number select off-by-one bug.
√ Drumsets! :D
√ Prompts: remembers last choice, enter key confirms choice, added icons to buttons, focuses input on open.
√ Harmonics instruments!
√ Midi import: include partial channels when possible.
√ Grouped presets by type.
√ Pulse width modulation! :D
√ Random instrument generator! :D
√ Cleaned up html/svg generating code slightly.
√ Added descriptions for each of the instrument settings.
√ Added edit option to move all notes sideways.
√ Added edit options to force/quantize notes to scale and rhythm.
√ Freehand rhythm.
√ New songs get random instruments and reset playhead to start.
√ The display name of the editor should be inside Config, so that it's easy to mod without having to dive into the pseudo html.
√ The "new", "import", and "random" options should reset the playhead, selected bar/channel, and track scroll bar.
√ Added fine tempo control.
√ PWA, web app manifest for home screen.
√ Share and Copy URL options added to File Menu.
√ Offsite song player with HTML embed code.
√ Added service worker to cache resources for offline use.
√ Replace 0 pattern with positive pattern number when attempting to draw on it.
√ Default patterns to 0 after first four bars.
√ Song player timeline zoom mode.
√ Rectangular box selection in track editor for copying and pasting patterns.
√ New commands to insert/delete bars.
√ New commands select all and duplicate pattern, changed several existing commands to apply to the current box selection.
√ Panning/stereo
√ Moved Snap to Scale, Snap to Rhythm, and Detect Key into submenus of scale, rhythm, and key.
√ Added channel muting to preferences.
√ Added light color theme to preferences.
√ Added full screen layout to preferences.
√ Added previews of the next and previous patterns to full screen mode.
√ Added Shift+Click and Shift+Arrows to extend track editor box selection.
√ Added "realName" to scales, hover over scale select menu to see it.
√ Allow playing piano while song is paused, added preference to preview added notes while paused.
√ Added preference to control whether to display song data in url.
√ Added song recovery feature to file menu.
√ Added .mp3 file export.
√ Added tinyurl shortcut to file menu.
√ BPM is now precise.
√ Hold shift (or long press on touch screen) and drag in pattern editor to select part of it. Pattern selection can be dragged, copied, and pasted.
√ Replaced lowpass cutoff/resonance system with a more flexible filter biquad stacking system.
√ Added electric guitar instrument type.
√ Allow any instrument to add the distortion effect. Make effects applied per-instrument.
√ Added Bitcrusher effect.
√ Added Echo effect.
√ Generalized envelopes.
√ Allow zooming pattern editor in fullscreen layouts.
√ Added another fullscreen layout option.
√ Added an option for layered instruments in a single channel.
√ Move the fade in/out duration into a separate setting from transition, fixed slide across patterns, and added a new transition to avoid restarting envelopes between adjacent notes.
√ Added feature to continue note from previous pattern, by dragging beginning of a note past the start of the pattern.