An HTML5 online audio editor (BUGGY and not in development)
Wavey is a simple web-based digital audio workstation (DAW), currently in pre-alpha.
*Audio recording quality may or may not match native applications in a given browser.
Record redundantly with another application if it matters to you.
⁂There’s a bug right now where chunks are lost when recording!
Dropped chunks will become skips (as opposed to gaps, which would be more visible).
When this happens, the data written to the timeline starts to fall further and further behind the position indicator.
If you try to record something in time with something already recorded,
the skips will cause it to be shifted earlier in time and get out of sync.
(In addition to just messing up your recording itself.)
Note how the bar with beat markings is a track. It would become a metronome when unmuted.
It’s a simplification of the concepts over DAWs which traditionally have a separate metronome.
There will still need to be a way to specify the BPM, and
it would also be good to have BPM detection and
variable BPM support (hopefully tying into a general automation system).
By the way, what if you could keep the beat with a foot pedal (or other input),
and record that along with whatever track or tracks you’re recording?
That could be an alternative to beat detection, which might require less manual refinement.
Tracks can be pinned to the top,
which should ease the pain when you have many tracks with audio clips
you want to line up with some main audio track(s).
(This partially implemented, but currently pinned tracks don’t actually stay at the top when scrolling down.)
You will be able to “precord” up to five minutes as long as precording has been enabled.
Choose whether to record something after the fact,
with the caveat(s) that you have to have this feature enabled and your mic(s) set up beforehand.
(Sadly it’s not actually time travel.)
Projects should be able to contain separate, distinct timelines;
some DAWs have “takes”, maybe something like that is what I want.
Ableton Live does something fairly reasonable from what I remember.
(Although it was difficult to get it to actually record anything.)
Nonlinear undo history.
If you hit undo a bunch, then do something, normally the data is instantly lost.
If you try to redo, it doesn’t do anything.
Instead, it should pop up with a tree view of the history.
Soloing tracks? I wonder if something better could be done in this area.
Some more general system for configuring the set of tracks to play?
I don’t know, but it’s something to think about.
MIDI: I’m thinking of having a collapsed overview of a MIDI clip,
and an expanded view to edit the notes, but still inline in the track.
(I’ve made a basic collapsed notes view component but haven’t made a way to actually create it in the editor,
i.e. no way to record/import/create MIDI data.)
Effects!
Adding gain and panning would be easy,
but I don’t want to immitate the status quo UI
and end up with something that’s “good enough” but not as good as it could be.
I think if the effects UI is good enough, they should be able to be treated the same as any other effects.
Gain and panning may warrant special treatment
such as being added by default to the effects chain (or graph?),
but they probably shouldn’t be separate from it.
You’ll at least want to be able to automate them just the same.
Plugins
Desktop app
Interoperability with other audio editors? (project file import/export)
Whatever replaces Web Intents, probably the Web Share API and Web Share Target API
Contributions and criticism welcome.
Open up an issue to discuss features, problems, or improvements!
Or email me if you prefer.
This project is built with CoffeeScript, React, and (currently) ReactScript.
(I plan on ditching ReactScript, and I’m also open to switching the source to ES6+ or TypeScript)
The main app code is in the root component, src/components/AudioEditor.coffee
.
(src/app.coffee
‘s main job is just to render AudioEditor
to the DOM.)
npm i
to install.npm run dev
python -m SimpleHTTPServer
npm i live-server -g
live-server
in a separate command line tab/window/instance.Deployed to Firebase Hosting.
npm run dev
so I can’t easily add a script that does a one-off build and deploys.firebase deploy
The MIT License (MIT)
Copyright (c) 2015 Isaiah Odhner
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.