diff --git a/index.html b/index.html index fe71449..c425b9a 100644 --- a/index.html +++ b/index.html @@ -9,7 +9,7 @@
-

+

diff --git a/src/wavearea.js b/src/wavearea.js index c931963..d4f19f2 100644 --- a/src/wavearea.js +++ b/src/wavearea.js @@ -393,7 +393,6 @@ const selection = { if (end == null) end = start // find start/end nodes - console.log(start) let [startNode, startNodeOffset] = relOffset(start) let [endNode, endNodeOffset] = relOffset(end) diff --git a/todo.md b/todo.md index 074aca8..3ba1700 100644 --- a/todo.md +++ b/todo.md @@ -1,12 +1,217 @@ * [x] Finish sprae 10 -* [ ] no-caret (0 focus) play bug +* [x] no-caret (0 focus) play bug +* [ ] space repeat * [ ] discrepancy of caret with sound * [ ] head of audio is boosted for some reason +* [ ] caret is super buggy -* [ ] Transfer sources to waved/wae/waev/wavr - -* [ ] Display waveform in textarea * [ ] Customize block size * [ ] player backends * [ ] Audio * [ ] WAA + +## Reiterating + +* [ ] display audio +* [ ] play audio +* [ ] caret indication + * [ ] Don't update caret in raf: update only on playback and time change + * [ ] Don't track caret on every focus: only when user selects by mouse + * [ ] Make playback within the selection +* [ ] Fix safari +* [ ] loses caret on play, like insert silence, press play etc +* [ ] serialize file in url: ?src=path/to/url/file/to/fetch +* [ ] sprae :onfile-attachment-accepted +* [ ] add preloader (sprae mount-unmount) +* [ ] delete fragments -> updates audio +* [ ] create silence by space +* [ ] download +* [ ] caret must be able to be reoriented during the playback +* [ ] Safari: wrong current time positioning +* [ ] BUG: stopping drops focus +* [ ] Make 'Enter' create segments +* [ ] time codes next to lines +* [ ] br +* [ ] del + * [ ] fix deleting tail properly +* [ ] normalize +* [ ] BUG: setting caret to the beginning of segment (a bit from the left of segment) doesn't start playback properly +* [ ] faster encoder by just copying changed subbuffer data, opposed to full rerender +* [ ] fix playback multiple segments +* [ ] Add vertical shift of average +* [ ] Shift + select +* [ ] ~~interleaved buffers pointing to chunks of wav file, rather than audiobuffers~~ same as below +* [ ] ~~immediate audio ops via copy~~ - saves 15ms, takes a lot in terms of losing AudioBuffer primitive +* [ ] worker processor +* [ ] actions via beforeinput inputType + +## [ ] MVP: basic dubs editor + +* [ ] Reconstruct non-existent history entry from history path +* [ ] Make delete: `from-to` signature instead of `from-count` +* [ ] Debounce delete better +* [ ] "Open audio" + * [ ] ~~"Generate speech" or "Pick random audio" intro screen. (+ button at the right)~~ -> use more complete sources config +* [ ] Reflect operations in URL +* [ ] Backspace-deleting from the beginning of segment doesn't remove break but deletes tail of prev segment instead + * [ ] join operation that serializes as removing break +* [ ] mute +* [ ] take source from URL. + * [ ] if there's none - take random source +* [ ] support dropping files + * [ ] save dropped files to storage +* [ ] Make history of changes with undo/redo +* [ ] Time-codes of following segments are messed up: make them href-able +* [ ] Bug: insert silence at the beginning of new segment -> feature +* [ ] ~~Save local file edits to kv-storage~~ - saved in history +* [ ] BUG: 0:60 in timing +* [ ] OPTIMIZATION: use onbeforeinput/oninput for handling operations +* [ ] BUG: deleting from left & then from right of caret is different +* [ ] BUG: fix playback from caret +* [ ] Alt-Space for start/stop +* [ ] Loop play selection + +## [ ] V1 (Move to waveplay/etc) + +* [ ] FIXME: make MVP work with sprae10 +* [ ] FIXME: rethink if we need build step, ideally not +* [ ] Create UI tester - playwright vs puppeteer vs cypress vs nightwatch +* [ ] Componentize + * [ ] Waveform + editarea attr + * [ ] Playback bar + * [ ] Timecodes +* [ ] FIXME: make selectable time (now click doesn't work) +* [ ] Move play a bit to the left from time (like debug button) +* [ ] FIXME: It displays some false signal at the beginning. Must be precice waveform +* [ ] FIXME: Selection sometimes doesn't happen +* [ ] FIXME: Proper deleting +* [ ] Fragments by Enter +* [ ] Current time under cursor +* [ ] History - separate from URLs + * [ ] Ctrl-z/y + * [ ] Collapse last operation, eg. delete + +* [ ] Outsource audio-decode, add missing codecs +* [ ] Outsource media loopStart / loopEnd +* [ ] Better selection logic: must be immediate +* [ ] Display open/loading status +* [ ] Display + for newlines +* [ ] . for silence +* [ ] Empty URL shows "Open file" +* [ ] Loads source from url on init +* [?] ~~Display loading status in playback~~ not sure still if we need playback +* [ ] ~~Show average line in samples~~ use dots instead +* [ ] Deleting, changing caret, deleting again causes UI waveform assertion fail +* [ ] Small screens wrongly wrap waveform timing +* [ ] Deleting part of audio screws up play button position +* [ ] End of file caret positioning is wrong +* [ ] Delete-all case doesn't get saved +* [ ] Big file editing generates tons of error logs : must be good +* [ ] Big files break caret line at the end (see bvg) +* [ ] Loaded file misses offset +* [ ] Played waveform update on big files is very slow. Use overlap technique or virtual list via intersection observer +* [ ] Safari: smooth audio currentTime (opposed to glitchy now) +* [ ] A way to download / reverse / etc selected fragment (... at the right) +* [ ] Stopping playback causes glitch +* [ ] Bug with assets/1s.wav playback - end line caret shifts down +* [ ] Problematic mobile rendering +* [ ] Mobile playback doesn't start from selection +* [ ] Bug: renavigating during play +* [ ] Bug: mobile safari play button sticks glitchly (alternative to intersection observer?) +* [ ] Bug: multiline selection is damaged +* [ ] Bug: empty head starts playing something non-silence +* [ ] Bug: needs enhanced lines calculation, ideally chars-per-line +* [ ] Bug: playback with space is glitchy (resets caret) +* [ ] Bug: deleting is broken +* [ ] Bug: doesn't renavigate by click +* [ ] Bug: doesn't scroll on caret offset +* [ ] Bug: loop playback selection is broken +* [ ] Make play always cover the time, then it leaves space for "record" button +* [ ] Zoom +* [ ] Render only visible part (virtual) - must reduce rendering load significantly +* [ ] Resize throttle +* [ ] `` +* [ ] `` +* [ ] `` +* [ ] Autoplay, loop, current line - can be navigatable from URL +* [ ] Add info icon: support, github, brahman + * tips, generate theme + * adjust settings: audio loudness metric, block size +* [ ] support paste fragment of itself +* [ ] Mark loop selection +* [ ] Mark fragments +* [ ] Detect characters per line via ranges method: https://www.bennadel.com/blog/4310-detecting-rendered-line-breaks-in-a-text-node-in-javascript.htm +* [ ] Separate audio-decode module with all codecs... +* [ ] Make play button clickable area _big_ +* [ ] Recent files +* [ ] use media-offset for looping -> own function play-loop +* [ ] detect cmd/ctrl key depending on platform +* [ ] make player responsive in mobile as bottom play button with overlay +* [ ] make playback sticky to avoid hiding playback (intersection observer + position change) +* [ ] ~~use plain (interleaved?) arrays instead of audio buffers - faster decoding, faster transfering to worker~~ - limited maintainability, no need to transfer to worker +* [ ] use decodeAudioData main thread "worker" for faster decode, detect supported native codecs & video +* [ ] Loudness weighting + * https://github.com/MTG/essentia/blob/master/src/algorithms/temporal/loudnessebur128.cpp + * https://github.com/domchristie/needles +* [ ] Better loudness display: it is inadequate now +* [ ] Display left/right channels with half-transparent blacks, and black is their intersection +* [ ] time codes as # hrefs + * [ ] make navigatable +* [ ] Faster updates: maybe no point rerendering/encoding full waveform, or parallelize, or faster wav encoder (wasm?) + * ? should we work straight on wav buffer maybe instead of audio buffers? +* [ ] Highlight of playable/playing region via diff color +* [ ] ~~use audio-buffer-list for faster ops?~~ -> use own implementation +* [ ] theme selector: color gradientish, inverse, cool, hot, dynamic, bw, font style +* [ ] move loading/decoding/encoding to worker +* [ ] random phrase player (from URL - like thetamath) via free speech api +* [ ] broken sprae condition of `:if :ref` +* [ ] convert ops units to h/s/ms +* [ ] replace file selector with + under caret? +* [ ] open file +* [ ] ~~Make nicer playback UI (bottom of page player)~~ -> not proved to be the best + * [ ] Errors and loading state must be indicated there + * [ ] Precise current playback time +* [ ] delete file fully -> displays open file again +* [ ] save file in storage? -> can be done via browser caching +* [ ] ~~Safari: initial audio loading state displays Error (show silent buffer)~~ +* [ ] scroll must follow the current caret position +* [ ] save edits in URL, so that any audio URL can be opened, edited, played. +* [ ] More audio transforms +* [ ] Make reusable (web-) component + * [ ] Textarea mode: no-line-breaks simple renderer on any textarea, no autosizer + * [ ] Adjustable timecodes + * [ ] Adjustable menu + * [ ] Adjustable theme + * [ ] Adjustable line breaks / ops +* [ ] Think of embeddable links +* [ ] Recording capability +* [ ] Add tests (playwright?) +* [ ] Measure via LUFS and other methods +* [ ] Process audio with lino? +* [ ] Vary color based on spectrum +* [ ] ~~?Use timing object https://github.com/chrisguttandin/timing-object~~ -> nah +* [ ] Editable labeling / phrases + +## Wavey (editor / play) + +* [ ] Stable, reliable, simple audio editor + * [ ] Drop/open any audio: movie speech track + * [ ] Separate by fragments (scenes) via enter + * [ ] Reliably playback, no glitches + * [ ] Playback bar with current time, play/stop, more + * [ ] Position: bottom floating/appearing, bottom fixed, balloon next to cursor, no (melded into UI) + * [ ] Delete / space out pieces + * [ ] Ctrl+C/Ctrl+V + * [ ] Normalize audio (from playback bar?) + * [ ] Revolume selected fragments + * [ ] Noise-gate plugin + * [ ] Speedup silences (plugin?) + * [ ] Change number of channels + * [ ] Save / download +* [ ] Customizable view (3-5 themes) + * [ ] Bar size (zoom) + * [ ] Inline vs multiline + * [ ] Freq weighting + * [ ] Paletter +* [ ] 11labs integration: generate speech of length +* [ ] Switchable main-thread / worker / GPU processing