5 ms·
Hi, I am the author of the article. I would appreciate any comments/questions/suggestions. Update: I switched the audio files to Soundcloud now so everything s
by umutisik 9y ago
Hi, I am the author of the article. I would appreciate any comments/questions/suggestions.
Update: I switched the audio files to Soundcloud now so everything should work again.
Eigencrisis! It looks like the UCI servers are having trouble. I uploaded the audio files to the following Soundcloud playlist and I am working on embedding the soundcloud player in place of the files.
https://soundcloud.com/umutisik/sets/eigentechno-1 https://soundcloud.com/umutisik/sets/eigentechno-1
Sorry for the inconvenience.
- corysama 9y agoThis is great. I could totally see "21 Transition 1420 Twm" appearing on an album as a self-deprecating joke. Mathematically generic techno and it still sound good :)
- chestervonwinch 9y agoFun project. FYI, on my machine: In [1]: X = randn(10000,100) In [2]: timeit apply_along_axis(np.mean, 0, X) 100 loops, best of 3: 7.91 ms per loop In [3]: timeit X.mean(axis=0) 1000 loops, best of 3: 1.21 ms per loop
- umutisik 9y agoInteresting. Thanks!
- svantana 9y agoThis is impressive, did you actually hand-prepare loops from 10k tracks? Even at 1 track per minute, which is pretty fast, that's 166 hours, a whole month of working full time!
- mooneater 9y agoIts interesting. But honestly, there are so many components that sound similar, so I dont feel we've truly gotten to something fundamental here. My first thought is to start with a Fourier, and then look at dimension reduction from there.
- Steuard 9y agoFirst and foremost: This is really cool, and thank you for sharing! (It's also the first explanation of the terms in the matrix equation for SVD that I've happened across that has really clocked for me: much appreciated.) Here's my worry, speaking as someone who knows physics but not all that much audio processing. I feel like this approach will inevitably put a whole lot of (unhelpful!) emphasis on the detailed phase information of the various sounds. The near-perfect cancellation of the average track illustrates this: two loops of the exact same bass drum beat offset by a fraction of a second will be treated as orthogonal or even opposite by this algorithm, but they're essentially identical as perceived by the listener. Conceptually, I imagine what you'd want is some way of encoding the various loops whose average came out sounding like a real average, rather than as nearly silent due to phase cancellation. My first instinct is to say "take the FFT of each loop first, and then run your PCA on that". Maybe that's not the right answer: like I said, I'm not an audio processing expert. But I suspect that right now your analysis is spending a huge fraction of its effort effectively trying to get the first drum beat to happen at precisely the right fraction of a second, and separately to get the second drum beat to happen at precisely the right fraction of a second, and separately the third, and the fourth, and so on. And heaven help you if the different loops' bass drums are tuned to marginally different notes. Edit: Only after writing this did it sink in that the top overall comment's remarks (by "highd") about earlier dimensional reduction were getting at the same issue. I'll leave this here, just in case the different framing is useful.
- umutisik 9y agoThat's my thinking too. PCA completely ignores the phase shift symmetry and treats a phase-shifted sine wave as a different thing. One could definitely get something better if they took the audio-loops as translation-invariant. I thought about trying to do a symmetry-invariant (or 'group-action-invariant') PCA but I could not find a good way of doing that. More advanced methods, e.g. 1-d convolutional networks, WaveNet etc. do have this translation-invariance built into them. Interestingly, the second eigenvector is not just a phase-shifted version of the first eigenvector but contains slightly higher frequency information as well, but I agree totally with what you said.
- 9y ago