cochlear
I've made a couple things along these lines over the past year. One is a fun, Halloween-themed toy:
https://blog.cochlea.xyz/theremin.html
The other is a (slightly) more serious exploration of multivariate time signals as a control signal for an instrument. In the latter case, the instrument is learned/inferred from a segment of input audio:
https://blog.cochlea.xyz/resonancemodel.html
This is a really neat idea! Like others here, I'm not a huge fan of the hyper-dense and dripping-with-ai UI, though.
Show HN: Theremin with MediaPipe and WebAudio
https://blog.cochlea.xyz/theremin.html
As a fun, Halloween-y exercise, I've taken a break from some of the other hand-tracking-based WebAudio instruments I'm working on to make something simple and easy: A MediaPipe + WebAudio theremin-like instrument you can play with in your browser.What's a Theremin?https://en.wikipedia.org/wiki/ThereminMediaPipe Hand-Tracking...
Show HN: RNN Musical Instrument
https://blog.cochlea.xyz/rnn-instrument.html
In this small demo, I first overfit a single-layer RNN, decomposing a short segment of classical music into two "factors":- a sparse "control signal", something like a score, representing the injection of energy into the system or instrument(s) - an RNN which models the resonances of the instrument(s) being playedFinally, hand-tracking landmarks (thanks to MediaPipe) are mapped onto the RNN's...
Toward a Sparse and Interpretable Audio Codec
Wayverb: In-Depth Exploration of Acoustic Simulation Techniques
I've written one other AudioWorklet at this point, which just runs "inference" on a single-layer RNN given a pre-trained set of weights: https://blog.cochlea.xyz/rnn.html. It has similarly mediocre performance.
Thanks for all the great tips, and for your work on Glicol!
Now that I understand the basics of how this works, I'd like to use a (much) more efficient version of the simulation as an infinite-dataset generator and try to learn a neural operator, or NERF like model that, given a spring mesh configuration, a sparse control signal, and a time, can produce an approximation of the simulation in a parallel and sample-rate-independent manner. This also (maybe) opens the door to spatial audio, such that you could approximate sound-pressure levels at a particular point in time _and_ space. At this point, I'm just dreaming out-loud a bit.
Working with AudioWorklets (https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkle...) has been really cool, and I've been surprised at what's possible, but I _haven't_ yet figured out how to get good feedback about when the custom processor node is "falling behind" in terms of not delivering the next buffer quickly enough.
My assumption has been that any physics engine that does soft-body physics would work in this regard, just at a much higher sampling rate than one would normally use in a gaming scenario. This simulation is actually only running at 22050hz, rather than today's standard 44100hz sampling rate.
Show HN: Web Audio Spring-Mass Synthesis
https://blog.cochlea.xyz/string.html
Hi, I'm the author of this little Web Audio toy which does physical modeling synthesis using a simple spring-mass system.My current area of research is in sparse, event-based encodings of musical audio (https://blog.cochlea.xyz/sparse-interpretable-audio-codec-pa...). I'm very interested in decomposing audio signals into a description of the "system" (e.g., room, instrument, vocal tract, etc.)...
Apologies if it isn't clear, but the animated gifs are meant as an illustration of the iterative encoding process, where the encoder decomposes the signal step-by-step, as in matching pursuit. I'll be sure to clarify that point.
I'll add a paragraph on compression rates/ratios, although that isn't necessarily the main focus here; codecs may compress a signal, but they might also transform it into a more useful, easy-to-understand and easy-to-manipulate representation.
Toward a Sparse Interpretable Audio Codec
I'm working on a sparse audio codec that's mostly focused on "natural" sounds at the moment, and uses some (very roughly) physics-based assumptions to promote a sparse representation.
https://blog.cochlea.xyz/sparse-interpretable-audio-codec-pa...
Show HN: Musical Events Scatterplot
https://blog.cochlea.xyz/scatter.html
In the process of working on models that decompose audio into sparse representations, I've found that it can be fun to explore the space of possible musical events that the learned decoders can produce. Most modern "neural" codecs encode fixed-size "frames" of audio. This work models sound as a sparse set of events and physical resonances, which could yield benefits for compression,...
I'm curious if there are other methods for approximating long convolutions that are well-known or widely-used, outside of overlap-add and overlap-save? I'm in the audio field and interested in learning long _FIR_ filters to describe the resonances of physical objects, like instruments, or rooms. Block-coding, or fixed-frame size approaches reign supreme, of course, but have their own issues in terms of windowing artifacts, etc.
I'm definitely aware that multiplication in the (complex) frequency domain is equivalent to convolution in the time domain and that, because of the fast-fourier transform, this can yield increased efficiency. However, this still results in storing a lot of gradient information that my intuition tells me (possibly incorrectly) is full of redundancy and waste.
Stateful, IIR, or auto-regressive approaches are _one_ obvious answer, but this changes the game in terms of training and inference parallelization.
A couple ideas I've considered, but have not yet tried, or looked too deeply into:
- First performing PCA in the complex frequency domain, reducing the point-wise multiplication that must occur. Without some additional normalization up-front, it's likely this would be equivalent to downsampling/low-pass filtering and performing the convolution there. The learnable filter bank would live in the PCA space, reducing the overall number of learned parameters.
- A Compressed Sensing inspired approach, where we perform a sparse, sub-sampled random set of points from both signals and recover the full result based on the assumption that both convolver and convolvee? are sparse in the fourier domain. This one is pretty half-baked.
I'd love to hear about papers you've read, or thoughts you've had about this problem.