5 ms·
Very possible with Flash, Java, etc. in the past. In JavaScript, in particular if you're not using Chrome? Apparently just about impossible (I haven't seen re
by jtheory 12y ago
Very possible with Flash, Java, etc. in the past.
In JavaScript, in particular if you're not using Chrome? Apparently just about impossible (I haven't seen reliable timing yet).
There are a lot of downsides to embedded Flash, applets, etc., but it's going to be a long time until the things that were possible with plugins a decade ago (including decent timing, and even plugging your MIDI keyboard in as an input for a application like this) are possible without plugins.
I have some faith we'll get there eventually; but it's a frustrating time during the gap.
- catshirt 12y agoyou have sample level control- why impossible? i've implemented naive quantization and MIDI control in my own web apps, without plugins...
- socceroos 12y agolinks or it didn't happen. ;)
- catshirt 12y agounfortunately i don't have the code for the step sequencer that used both implementations. but i can share some of the libraries i've released that stemmed from it: MIDI file parsing/writing/manipulation for js: https://github.com/kn0ll/midi.js https://github.com/kn0ll/midi.js MIDI control for js (requires a server component, wrote this prior to the web MIDI API): https://github.com/kn0ll/midi.io https://github.com/kn0ll/midi.io experimental 3d step sequencer (quantized, naturally): https://github.com/kn0ll/phon2 https://github.com/kn0ll/phon2 the issue i had with quantizing captured input is the latency between the device input and the time it's read into the program. this is why i said "naive" quantization. but it works fine for 1/8 steps, and 1/16 steps at most tempos.
- jtheory 12y agoHa, I post a cynical complaint like this once every few months, hoping someone will prove me wrong one of these days. MIDI IO where the keyboard is connected to the server is nifty; not what I meant, though. :) But I can do without that (or only offer MIDI-in support for people who can run a bridge Java applet); still, the thing I keep looking for is reliable timing for on-the-fly audio (constructed MIDI works for me, I can do that!), and responsive changes based on user input. Put another way; if you had the spare time, could you fix Vexflow playback[1] so it would actually play on tempo, the first time, in more than just Chrome? (Even in Chrome, it's not reliably solid...) Next, what kind of response time can I get when someone clicks on the UI (a keyboard, or whatever)? Is there a way I can play a MIDI note fast enough that it reliably sounds immediate? I implemented this stuff in Java 11 years ago, mixing audio samples on the fly, not using MIDI, but I'd be happy to use MIDI if it can mean playing multi-voice audio cleanly and w/o loading a library of audio samples; I've spent enough time working with MIDI as well (as part of handling MIDI input). I didn't try your phon2 yet (should I?), though I notice the latest checkin comment is about battling with audio choppiness. ;) [1] http://my.vexflow.com/articles/53?source=enabled http://my.vexflow.com/articles/53?source=enabled find "playback"
- catshirt 12y agothis is my point though. i recognize there are latency and timing issues but they seem related to playback. but at any given point, you know what sample is being output. you also know if MIDI is being captured. isn't quantization just an exercise of mapping the input to a quantized sample? which is just a matter of rounding assuming you know your samplerate. ie. if there are 1000 samples in a measure (entertain me), and you quantized to 1/4, and you capture MIDI while sample 700 is being output, you just map the note to the 750th sample. what am I missing? just want to be clear my curiosity is genuine, I don't have a deep understanding in dsp or signal analysis or anything. my only knowledge of this stuff is just barely making it work for me. so I'm wondering what I'm missing :) phon2 is definitely worth a try but I just realized the demo link wasn't working. if you're familiar with grunt it should be a quick setup though :) I also realize a server component for midi is not what anyone had in mind; but the web midi api wasn't implemented at the time I needed a solution.