forked from yuxshao/ptcollab
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtodo
644 lines (533 loc) · 21.3 KB
/
todo
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
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
Log
---
- dynamic height and width
- stopping and starting via space
- seeking
- background
- edit different units
- update last measure is recognized by moo
- configurable quantization
- toggle on / off
- drop down for speccing it
- play / stop buttons
- Saving file
- middle click drag
- have it look decent on scroll limits
5/31
- hear note on play (HARD) - had to factor out the logic independent of the current unit play position
- fix the offset
- zoom according to where cursor is right now
- tried the linear smoothing thing. it was way out of wack. not convergent.
- undo
6/04
- Implement the undo system drawpile uses
- Fix a few things like broken redo (no more chnaging of length 0)
6/6
1. Hook up the network. didn't get working b/c I was distracted but things are
sending and I think they're generally connected!
2. Status bar, saving with network, reconnecting / starting new server etc.
3. Send view changes / edit state changes.
4. Redo in the right order
5. Demo it in a video, test with friends
6/7
1. Fix issue where other ppl's cursors show up in the wrong position
2. Hook up show-all checkbox properly
3. Users can specify names, show up next to cursor
4. Cursor disappears if user leaves / disconnect from server
5. Show list of connected users on left
6. fixed random bug where startup would loop forever if the file was too big
6/8
1. fix crash when you hold down a non-looping sample for too long
2. realize it's hard to fix the blip
3. I think fixed crash on server restart
6/9
1. alt scroll to change quant
2. ... read a bit about wav formats, turns out there's 8&16 bit linear PCM,
then 32-bit float and 8-bit mu/a-law. pxtone only supports linear pcm but
apparently that's usually enough?
pxtnPulses are the wav / ogg / pt{voice,noise} loaders. pxtnwoice is like a
variant over them that is the actual voice. then unit is unit.
use pxtnService::Woice_read pxtnWoice::read to create a new instrument
the io mate fns are for reading from an existing project.
what's an assist woice / unit? they're names.
pxtnUnit is largely - moo state (current woice, pan buffers), names, porta
state. We could probably just make an extra pxtnUnit for note previews??
Or still, just make pxtnWoice get stuff for you. Prob better b/c you can
just directly set the woice. The only thing the unit sampl provides is vel,
vol, and vol panning. Increment sample doesn't depend on the unit at all
outside of woice.
6/11
1. Read about qlistview
6/12
1. ability to add units
6/13
1. this std::variant thing worked?!?
2. removing units
- confirm box for delete
- autofill name, double click to add
- switch to unit directly
6/14
1. more generic binary serialization
2. hopefully unicode?
3. fix crash when you rejoin. it was a deserial transaction mistake!
4. Add instruments! - lots of fumbling around with descriptor
5. remove instruments
6. sticky vel
7. host empty
6/15
1. Build windows version
6/16
1. Fix double voice issue with release rclick
2. Don't use shared ptr array, hopefully better fix now?
3. Exit menu item
6/17
1. fix Save As in windows (save to original file is still broken)
2. fix save to original file in windows. I think?
3. tested 'cross platform' by running in wine simultaneously with linux lol
6/19
1. Discovered that there's a problem with soft disconnects.
6/20
1. headless server sort of
6/21
1. Added logging, I think the thing causing the disconnects was the fact that
transactions were being added up. So a rollback must've caused like a
cascade of events written and made the write state weird. (Thanks to tests
with steedfarmer)
2. Tested with steedfarmer again with the soft disconnect fix. Indeed, no more
soft disconnects. But still the program sometimes hangs + memory explodes.
Discoveries:
- Sometimes a message is not sent if an instrument is simultaneously being added.
- Hanging seems to be during repeated application of event undos/redos.
- Hanging happens (in one case at least) after an edit message is dropped
in roundtrip, prob. because that leads to a ton of local undo/redos.
- I did see in my debugger like, 200k actions trying to be applied. I
have no idea how it got to that number.
- Turns out a message is dropped because QDataStream is not writable if we
are simultaneously reading from it and hit ReadPastEnd. Dammit. Need
separate read / write stream
- But still, why does the action list grow to be so large? that's crazy.
why does that cause things to hang? And was it really large? Or just
that things sort of piled up with every additional message?
6/22
1. Figure out bug that causes hanging when an edit action is dropped. When
having to undo and redo a lot, empty commands get added exponentially.
2. Find and fix a separate bug regarding using the wrong pxtone state to
compute an undo. Didn't cause any problems this time but could bite in the
future (e.g., two identical delete would be 'undone' as 2 identical adds
instead of the second doing nothing)
3. Address QTBUG-63113 by having separate read / write streams. Now messages
aren't dropped. Or they shouldn't be.
As a general note it's increasingly scary to touch the networking code...
worried about making further breaking changes. Don't have tests, also testing
localhost is just not the right environment.
This kind of thing where msgs get dropped is interesting - seems like a gap
fill architecture could work well.
4. Robust if you see an unexpected message (postel) from yourself.
- if see later remote id, than what expected, just drop things presumably missed.
- if earlier, just slot it in b/c everyone sees it in that order.
5. Ability to make server delay / drop msgs artificially
6/23 & 6/26
1. Some playtesting!
6/27
1. Add some slack in vertical momement before adjusting velocity
2. Cleaner note params on new note
3. See existing note velocity
4. Render just the window, less expensive note velocity (no more sqrt / exps)
5. Factor out moo state.
- Accurate note preview: proper state at time of note w/ params of note.
- Can still factor out more depending on what kind of preview to isolate.
Current setup just makes it easy to configure a unit and then just play.
6. A tricky thing to get smooth playhead. Also renders better when there's a
bigger buffer I think.
6/28
1. Note previews
2. Small editor QoLs:
- append .ptcop to save.
- update add unit dialog to just use the selected voice.
- fix small bug in smooth playhead
- escape focuses the keyboard editor (is this really an improvement?)
3. Replace woice. (Was pretty painless, thanks to the variant setup earlier!)
4. Package for windows, add icon
5. Fix overlapping note previews if you had a trackpad and mouse.
6. Click+scroll can also adjust velocity
6/30
1. Selection
7/1
1. Transpose with selection. But at what cost? Undos are a bit jank with the
mechanism for existing undos. (Perhaps undoing a tranpose should always
cause the transpose op to go at the end? Though I don't think it'd play well
with the sync setup. Another option: vertical shifts are tracked in separate
d/s (interval tree of offsets representing offset over time) and modify set
values as postprocessing. This might be a good solution for hshifts too.)
2. Shift+u/d to transpose, else shift vel. Ctrl for wide shift.
7/2
1. Select all
7/3
1. Copy and paste for one unit
2. Clear / cut for one unit
3. Not doing hshifting -- too hard with collab, if you undo others' notes will
be displaced. If it is done, will prob. have to be separate prim action from
paste to avoid desync.
4. Unit list table - current unit depends on selection; mute / visible depend
on checked
7/4
1. Make it easier to check / uncheck
2. Don't highlight / grey muted things out
3. Transpose, copy / paste multiple units
4. Reinstate the add unit dialog.
5. Tempo, time signature controls. Hopefully not too jank.
7/9
1. Fix an undo bug hopefully (undone were not invalidated by a new write)
7/10
1. Fix selection rendering weird if zooms differ
2. Forbid selecting below time 0
3. Change a thing that could've caused crash on server connect.
4. Changed 'muted' column to 'played' since the checked = muted was a bit unintuitive
5. Outline selected notes on chosen units and show their vel.
6. Ctrl+D to deselect
7. Preview at different pitches / velocities based off last note input
8. Smaller audio blip after a seek.
7/11
1. Factor out moo state... but at what cost?
7/14
1. Undo this smaller blip thing because it causes windows to be incredibly slow.
7/16
1. Refactor a ton of stuff to get signals and state centralized.
7/17
1. Display vel, vol, pan params
2. fix scrolling not lining up with mouse
7/18
1. Param edit
2. Fix side menu dropdown not affecting quantization
7/22
1. Playhead, repeat meas in param bar too
2. Mouse / wheel shortcuts in param bar
3. Set loop points from selection
4. follow playhead
7/23
1. Fine tune param - like a volume param
2. portamento param - drag like in ptcollage
3. show effect but no edit
7/25
1. Hopefully fix bug where setting beat up after repeat causes weird jump
2. Set group using same param view as others but w/ 6 notches.
3. Shortcuts for cycling param
4. Edit unit names
5. Modify effects
6. Draw params for other units in lower alpha
7. Ongoing edits for other units in lower alpha
8. experimental thing to draw adjacent portas
9. Seek in param bar
7/26
1. Change woices of unit
2. Copy option for params, display selection in param view
3. Transpose param
4. Note previews on param input
5. Sane velocity setting (you can only modify existing velocity events)
8/8
1. Clear last meas / repeat meas if selection is not there
8/10
1. Fix scroll wheel jumping if at end and zooming in
2. Some jank stuff so that adding / changing instr doesn't reset selection or
cause spurious note preview
3. Add and change voice dialogs use the same starting dirs now
8/11
1. Velocity is set based off what the existing velocity is
2. Adjust jump when too far left or right
8/17
1. Woice properties
8/18
1. Rearrange units
2. Slider for volume, buffer size
8/22
1. Previewing a bad file does not crash the editor
2. Moving units up and down doesn't cause transpose to break any more
8/23
1. Moving units up and down doesn't cause velocity setting to affect the wrong
unit
9/14
1. Add icons
2. Slightly better buffer settings. Still bad on windows though
9/19
1. Split help menu, tooltips for icons
2. Save confirmation
3. Save username, connection destination, port
4. Note preview is affected by volume now
5. Easier voice selection via menu
6. Subtle highlight on root note
9/20
1. A few more keyboard shortcuts (pgup/dn, fn keys, 1..9)
2. Preview with changing voice is now at the right pitch
3. Fix tiny bug that let you delete velocity events
4. Set repeat and last flags
5. I think note previews are fast on windows now
9/25
1. Highlight row on play or on input
2. Remove blip after play
3. Dark mode icons
10/4
1. ptcollage-like palette by default. thanks gkpotter for extensive ui feedback!
10/5
1. Watching other users
2. Recording sessions that you can jump into live (bit janky)
10/7
1. Prepare video (thanks gkpotter, arcofdream for feedback!)
10/8
1. new session dialog
2. scroll to start on song load, reset some other state
3. connect dialog
4. Show ping
5. Watch other users includes getting updates for their play states.
6. Don't show 'hosting on' and 'connected to' simultaneously
10/9
1. cleaner fps
2. save session recording to 1 file
3. test + make watch a bit more robust
10/10
1. appimage, standardize enum sizes
2. cleaner user list
3. Some fixes with watching another user randomly stopping
4. If the playhead passes over the last event, new events added to the song
will still be played.
10/11
1. Build on mac
2. Better help
3. Update pages
4. mac icons
5. Record again
10/17
1. Use shift-JIS
2. escape once brings you back to previous position, escape twice to beginning
3. Draw playhead / last seek more consistently among 3 views
11/07
1. mute/solo shortcuts
2. when inputting a note, preview everything else with it
3. drag near the sides of the keyboard window to have it scroll for you
11/08
1. better command line arg, hopefully can dbl click
2. drag and drop projects and instruments
3. tiny bug where new project doesn't reset the project workspace
4. Don't show server restart confirm if you're the only one connected
5. Copy / paste across multiple projects
11/09
1. wav export
2. verify files can be opened in windows via file association.
- make sure old file doesn't exist, or else association is cached
11/10
1. change note length (unit edit under ribbon)
2. quantize note preview time in param / measure view
3. fix being able to set parameter above max
11/11
1. update guide
1/15/21
1. ui options:
- spacebar is stop instead of pause
- no velocity adjustment with vertical
- invert scrolling / zoom options
1/16/21
1. ui remember menu / bottom bar size
2. rename a few menu options
3. chord preview respects mute
1/18/21
1. PLayhead jitter in real time
2. note preview in top bar too
2/24/21
1. multi select in add woice
2. some debug checkboxes for ptcollab
2/28/21
1. don't save dialog dir except at start
3/2
1. auto add unit with each woice
2. woice preview in add unit window
3. Woice preview in unit tab for current time
4. ijkl for midi input
5. alt Q to quantize
3/3
1. finickiness with input at boundary
2. bug with auto adding unit when woice name is too long
3. fix seek not catching upf or a long time if you seek past end
4. don't show other people's ongoing midi inputs, it was too hard to sync
playback
5. auto step forward on note input
6. copy options and default
3/4
1. fix preview with all units brekaing with unit click preview
2. polyphonic midi note preview
3/7
1. hopefully fix the 'hosting but not connected' error by using local session
3/21
1. don't crash if selecting port that is already in use (thanks ewan for the report!)
5/12
1. Draw the current instrument above everything else
2. Don't preview notes when clicking in the sidebar if the song is playing
5/28
1. fix clicking on certain projects with echo
5/30
1. (internal) make remove/changevoice take id instead of no + name
2. menu item to 'remove unused units' and 'remove unused voices'
3. render volume option
4. dialog for copy options
5/31
1. fix silent cxn fail if you connect after a connection failure
8/17
1. ctrl+shift+(a/d) select and deselect all units
2. title bar shows current project filename
3. ctrl+p to toggle preview with all units
9/18
1. merge opna2608's pr for detecting if various libraries are available (and if
so, via pkgconfig or sth else)
2. add some preprocessor checks to disable midi component if rtmidi not found
9/19
1. merge ewan's PR for style switching + ptcollage style
2. urls relative to qss file. real multiple style dirs (executable dir, ../share, standard local path)
3. fix bug where pasted woice changes were wrong if certain woices were deleted since program load
4. put stylesheets in qrc so that bundles aren't annoying
5. cycle solo for selected units only
6. disallow out-of-range values in the effects tab (e.g. negative group #s)
7. shift + W/S for navigating up selected units only
9/25
1. fix oob access when removing last unit causing crash in certain builds. thanks ewan for report + help!
10/3
1. autosave
2. tooltip about copy box
3. vibrato on key drag
10/7
1. find instruments dialog w/ note + midi preview
10/8
1. N & Shift+N as add voice / unit shortcuts
2. import wav files with loop points (in particular, try to read first loop
point metadata and repeat sample until 3s. loopforward only)
10/10
1. peak meter
2. fix crash on select last unit when there are fewer voices than units
3. octave markers, with halberstadt keyboard on left
10/13
1. sorta janky shift left and right
2. adjust copy / paste so that it's less janky
3. fix bug at end of selection when you snap to x
4. mirotone stuff
- fix draw offset when you draw notes in snap under semitone
- transpose by quanty, add snap shortcut for quanty
- toggle for showing all the tuning options
10/18
1. fix last search not showing up in line edit
2. project file dialog has its own history
11/07
1. fix pass wrong voice id map
12/13
1. if vel isnt selected for copy show visual indicator. also change copy option label to include (Note)
2022/1/13
1. bug: other ppls preview quant shows up properly in param view
1/15
1. remove selection column, instead ctrl+click does it
2. ctrl+shift+V to paste at end of selection
1/16
1. unit view, individuals
1/17
unit view:
1. highlight unit bullets that are selected
2. draw text labels for unit bullets
3. highlight pinned row on left unit hover
4. highlight left unit on pinned row hover
5. update icon to pin icon
1/19
1. don't startup qapplication if headless
1/25
1. left piano
2. left piano midi highlight
3. option to make pinned unit click also switch to the unit
Todo by priority
----------------
- update gh-pages
- update beat-fit meaning
- page w all keybindings
- update how to copy / paste
- update legend on unit tab
- move voices
- drag voices / units
- test to see if the midi noodling is causing the lag. delete voice previews if so
- way to elongate notes (ctrl click in unit row)
- show other's midi inputs if you're either following the or they're not playing
- midi input: mute the unit regularly if you're recording, also record silence? Maybe idk
- extend upper limit piano roll
- when following and someone does midi it can mess you up
- save dialog state instead of just last dir <- not that easy since you gotta save the state at diff places and the ptrec key is useful for the host dialog prefill
Misc todo by categories
-----------------------
Aesthetics:
- qwerty midi input
- arcofdream's icon designs for the connect / disconnect menus
- some note taking functionality?
Technical stuff:
- server keeps its own state (e.g., active users) + running history (currently
it plays back -everything-)
- probably goes hand-in-hand with undo stack, which drawpile limits to
globally 30. probably a good idea so we don't keep on growing in memory
- cheap to have large stack
- seqnums on the server messages.
- robust if you see an unexpected message from elsewhere (unexpected server
seqnum?)
- note: without seqnums, clients do not have a chance if server drops msgs
to some clients but not others, without seqnums
- place to see errors like missed writes or unexpected IDs.
- log on server side history of actions too (maybe exclude editstate).
- log if a message hasn't roundtripped in a while (consider if there's
any expected situation where we don't expect roundtrip. prob. not if like
drawpile)
- also if a pxtone action returns false
Editor functionality:
- moving voices up and down
Editor QoL:
- ctrl+shift+click is a bit much to do a selection. but ctrl click is note
tool. Maybe it shouldn't be a modifier but a mode? tools seem reasonable.
- see other user's playhead optionally
- involves: messages for seeking, starting, stopping with clock at X
- would be real nice to click on a user and jump to their view
- client would match the seeks and play controls, slightly delaying
depending on clock desync.
- client view would also just centre on the other's cursor. prob. with
matching zoom; or, (harder, not much gain) match window bboxes
- Play audio while paused but seeking!
- Scroll if clicking and on edge of pane
- Not too big a deal - if you need a big interval, zoom out
- Speed things up.
- Separate audio thread with locking.
- Bounding boxes for the undos/redos
- At least on remote action rollback. You have to undo a prefix from the tip.
- Also possibly useful for actual undos.
- actually probably not useful for actual undos because there are cases
where you'd have to roll everything back anyway.
- Indexes for searching through list fast
- according to botb event limit is 500k in the regular editor; here the
limit is 1M. could probably handle 1000 events with little lag (1000
events * 1000 actions = 1M iterations, not too much)
- Pastes are slow for big songs b/c have to traverse whole evelist for each
action. Maybe give a hint?
- don't blip when seeking and playing again (hard due to QAudioOutput behavior)
- Edit while playing soundness (low priority, unlikely to hit)
- Add things between last event and next (before / after now?)
- Delete things. Don't strand the pointer
- Adjust the length of ON
Low priority:
- Editor UI: Piano on the left
- Misc UI: Recent connections dropdown
- Custom icon for people's names?
- scale selections by time (with no quantize), then quantize
- Undo transpose make less jank
- A chat
Just general format? improvements:
- A kind of meta instrument that changes depending on parameter or pitch
Running thank-you list:
- Pixel for making such an awesome music software!
- Everyone involved in ptweb!
- Friends and family for supporting this!
- jaxcheese, neozoid, steedfarmer, ewangreen for testing out with me, making
tunes together, and giving great feedback!
- steedfarmer for helping me hunt down this nasty networking bug!
- arcofdream for helping conceptualize the UI, giving feedback, and testing it
out!
- arcofdream, nanoplink, easynam for general programming, UX discussion and
consulting!
- jade for testing, finding UI bugs, and providing valuable suggestions!
- gkpotter and arcofdream for helping with publicizing this!
- everyone in the pxtone discord servers!