Skip to content

Commit a21c434

Browse files
committed
Update README
And code comments
1 parent 1c97b85 commit a21c434

File tree

2 files changed

+60
-29
lines changed

2 files changed

+60
-29
lines changed

README.md

+39-23
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11

22
# [![Wavey](images/wavey-logotype.png)][app]
33

4-
[Wavey][app] is a simple web-based digital audio workstation (DAW), **currently in alpha**.
4+
[Wavey][app] is a simple web-based digital audio workstation (DAW), **currently in pre-alpha**.
55

66
### Features
77

88
* Drag and drop audio files or record from a microphone.\* \*\*
99
* Always saved locally, including persistent undo/redo with the selection state; saves *while* you're recording\*\*
10-
* Plays while recording so you can record along with previous tracks
10+
* Plays while recording so you can record along with previous tracks\*\*
1111
* Lets you edit while playing or recording; you can even delete the recording while recording and undo to keep recording
1212
* Several themes, including light and dark [elementary OS][] themes via [elementary.css][], and some retro themes
1313
* Fully scalable graphics, from the icons to the waveforms
@@ -50,7 +50,8 @@ with the caveat(s) that you have to have it enabled and your mic(s) set up befor
5050

5151
* Projects should be able to contain separate, distinct timelines;
5252
some DAWs have "takes", maybe something like that is what I want.
53-
Ableton Live does something fairly reasonable.
53+
Ableton Live does something fairly reasonable from what I remember.
54+
(Although it was difficult to get it to actually record anything.)
5455

5556
* Nonlinear undo.
5657
If you hit undo a bunch, then do something, normally the data is instantly lost.
@@ -66,12 +67,15 @@ and an expanded view to edit the notes, but still inline in the track.
6667
(I've made a basic collapsed notes view component but haven't made a way to actually create it in the editor,
6768
i.e. no way to record/import/create MIDI data.)
6869

69-
* Effects! I'm holding off on adding gain and panning because
70-
I think if the effects UI is good enough, they should be able to simply be effects,
71-
and I don't want to just immitate the status quo UI and end up with something that's "good enough" but not as good as it could be.
72-
Gain/panning may warrant special treatment such as being added by default to the effects chain,
70+
* Effects!
71+
Adding gain and panning would be easy,
72+
but I don't want to immitate the status quo UI
73+
and end up with something that's "good enough" but not as good as it could be.
74+
I think if the effects UI is good enough, they should be able to be treated the same as any other effects.
75+
Gain and panning may warrant special treatment
76+
such as being added by default to the effects chain (or graph?),
7377
but they probably shouldn't be separate from it.
74-
After all you'll want to be able to automate them just the same.
78+
You'll at least want to be able to automate them just the same.
7579

7680
* Plugins
7781
(e.g. instrument interfaces like
@@ -80,30 +84,32 @@ After all you'll want to be able to automate them just the same.
8084
effects,
8185
synthesizers (voices),
8286
algorithmic synthesis like [HTML5 Bytebeat](http://greggman.com/downloads/examples/html5bytebeat/html5bytebeat.html),
83-
themes,
84-
extra file formats)
87+
extra file formats,
88+
and themes)
8589

86-
* Desktop app, *ideally native* rather than web-based (but web-based for starters)
90+
* Desktop app
8791

88-
* Interoperability with Audacity? (exporting/importing project files)
92+
* Interoperability with other audio editors? (project file import/export)
8993

9094
* Whatever replaces Web Intents, probably the [Web Share API](https://github.com/WICG/web-share) and [Web Share Target API](https://github.com/WICG/web-share-target)
9195

92-
* Internationalization
93-
9496

95-
### TODO
97+
### The Less Exciting To-Do List
9698

9799
* Document loading indicator
98100
* Fix losing chunks when recording
99101
* Decouple the rendering rate of recorded audio from the size of chunks saved
100102
(maybe even have a tiered saving system where chunks are merged to improve load times)
101103
* Fix pasting across non-consecutive tracks
102-
* Maybe make the mute buttons clearer by making the iconography (not not) not negative;
103-
would it be awkward to still call them mute buttons or have the hover text say mute/unmute?
104-
* Mouse-relative zooming (preferably performant and smoothly animated)
104+
(or just pasting in general? <kbd>^A^X^V</kbd> doesn't work at all when there's one track;
105+
and it appears to clear the cursor, but pasting still doesn't work (at that point it should create a new track))
106+
* Maybe make the mute buttons clearer by making the iconography *not negative*;
107+
(would it be awkward to still call them mute buttons or have the hover text say mute/unmute?)
108+
* Mouse-relative zooming (preferably performant and smoothly animated; currently zooming is slow)
109+
* Lossless compression for audio storage
105110
* Storage management (handle running out of storage, handle multiple editors loaded for the same document, allow data purging, estimate max recording time)
106111
* Improve accessibility
112+
* Internationalization
107113

108114

109115
### Contributing
@@ -112,11 +118,21 @@ Contributions and criticism welcome.
112118
[Open up an issue][new issue] to discuss features, problems, or improvements!
113119

114120
This project is built with [CoffeeScript][], [React][], and [ReactScript][].
115-
116-
[Fork and clone the repository](https://guides.github.com/activities/forking/) and then
117-
with [Node.js](https://nodejs.org/en/),
118-
open up a command line and enter
119-
`npm install` and `npm run dev`
121+
(I'm eating my own dogfood with ReactScript,
122+
but I'd prefer [JSX with CoffeeScript 2](http://coffeescript.org/v2/#jsx),
123+
or to switch to ES6+ in the future)
124+
125+
* [Fork and clone the repository](https://guides.github.com/activities/forking/).
126+
* Install [Node.js](https://nodejs.org/en/) if you don't have it.
127+
* Open up a command line.
128+
* Enter `npm i` to install.
129+
* Enter `npm run dev`
130+
to start up a task that watches the source and builds the project.
131+
It also generates a service worker.
132+
* You'll also need a dev server.
133+
You could use a plain HTTP server such as `python -m SimpleHTTPServer`
134+
but I prefer [Live Server](https://github.com/tapio/live-server) which you can insall with `npm i live-server -g`
135+
and then use by running `live-server` in a separate command line tab/window/instance.
120136

121137

122138
### License

src/components/AudioEditor.coffee

+21-6
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,8 @@ class exports.AudioEditor extends Component
4242
# its currently limited to data to be serialized
4343
# so like an array of objects like {audio_stream?, midi_input?, recording?, clip}
4444
# not sure how to make it clear recording is to be serialized
45-
# I suppose I could have a serializable Recording class or something :/
46-
# or call it recording_metadata
47-
# maybe call the thing replacing active_recordings 'active_track_recordings'
45+
# wait, maybe that doesn't matter? when it's serialized only specific properties are used
46+
# so I could just add {audio_stream?, midi_input?, clip} as properties of recording?
4847
# also: see further below TODO about active_recordings
4948
audio_stream: null
5049
midi_inputs: []
@@ -202,6 +201,7 @@ class exports.AudioEditor extends Component
202201
is_loaded = @check_if_document_loaded_and_warn_otherwise()
203202
if is_loaded
204203
InfoBar.error "The document length is unknown. This is a bug."
204+
# TODO: report issue button!
205205
console?.error? "_get_max_length_or_do_default is doing the default
206206
even though check_if_document_loaded_and_warn_otherwise says its loaded"
207207
undefined
@@ -231,7 +231,9 @@ class exports.AudioEditor extends Component
231231
container.scrollLeft = x - margin
232232

233233
scroll_selection_into_view: ->
234-
# TODO: scroll selection added in direction go that do
234+
# TODO: scroll to show the side(s) of the selection changed
235+
# or since this is only used in select_vertically,
236+
# maybe just define a vertically_scroll_track_into_view thing instead
235237
for el in ReactDOM.findDOMNode(@).querySelectorAll(".selection")
236238
el.scrollIntoViewIfNeeded?()
237239

@@ -305,9 +307,22 @@ class exports.AudioEditor extends Component
305307
unless @state.loaded_document_data
306308
InfoBar.warn "The document hasn't loaded yet."
307309
return no
310+
308311
# TODO: share code with remove_broken_clips, which should be pretty easy
309-
# XXX: ignoring muted tracks here seems.. fishy?
310-
# should also probably check non-audio (i.e. midi) tracks too in the future
312+
313+
# XXX: ignoring muted tracks here
314+
# kinda makes sense when checking the document length for playback
315+
# the idea being, if only muted tracks haven't loaded, you should still be able to play
316+
# but it's sort of subtly special-casing a thing
317+
# it seems like premature optimization of an edge case
318+
# but then again if you've recorded a bunch of takes, muting the previous ones each time,
319+
# and you go to load the doc and hear the last recording,
320+
# suddenly it might not "feel so edge-casey"
321+
# maybe you have several tracks where you basically have multiple takes just strung together (muted)
322+
# and one short and sweet "keeper" take (the one you would want to hear)
323+
324+
# NOTE: should also check midi tracks too in the future (etc.)
325+
311326
for track in @state.tracks when track.type is "audio" and not track.muted
312327
for clip in track.clips
313328
if clip.recording_id

0 commit comments

Comments
 (0)