3 ms·
> In fact, according to behavioral neuroscientist Stephen Porges, because recordings played at higher speeds are at a higher pitch, they are actually easier to
by jldugger 9y ago
> In fact, according to behavioral neuroscientist Stephen Porges, because recordings played at higher speeds are at a higher pitch, they are actually easier to hear.
Uh... that's not how modern speedup works. Here's a brief rundown:
1. break the audio up into very small windows
2. FFT audio in a window from time domain to frequency domain
3. FFT the audio back from frequency to time domain, with an even smaller window (or larger, if you want to slow playback down).
The frequencies resulting are the same, but shorter in duration. Obviously there's some sampling bias that can creep in, but these algorithms are generally pitch-stable.
- gleenn 9y agoFor anyone interested in a simple implementation of FFT, I found this neat little example which was very grokkable if you speak Java: https://introcs.cs.princeton.edu/java/97data/FFT.java.html https://introcs.cs.princeton.edu/java/97data/FFT.java.html
- tzs 9y agoFor those who just want to play around with Fourier transforms, it is worth noting that computers are fast enough nowadays that you can often get away with a slow Fourier transform instead of a fast Fourier transform. The former is O(N^2) as opposed to O(N log N), but is also much easier to understand. To wit, in C, here is a function that takes a pointer to an input array of complex numbers, and output array of complex numbers, and a count of how many numbers are in the input, and does a discrete slow Fourier transform from the input array to the output array: #include <math.h> typedef struct { double r; double i; } complex; void fourier(complex * x, complex * y, int np) { int n, k; for (k = 0; k < np; ++k) { y[k].r = y[k].i = 0; for (n = 0; n < np; ++n) { double c = cos(2*M_PI*k*n/np); double s = sin(2*M_PI*k*n/np); y[k].r += x[n].r * c + x[n].i * s; y[k].i += -x[n].r * s + x[n].i * c; } } } This is a pretty direct implementation of the definition of a discrete Fourier transform as given in equation 1 from the Wikipedia article on DFT [1]. On my iMac (3.4 GHz Intel Core i5), compiled with "cc -Ofast", here are timings: size time/FT FTs/sec ---- --------- ------- 128 0.24 ms 4167 256 0.93 ms 1074 512 3.8 ms 263 1024 15.5 ms 65 2048 65.6 ms 15 4096 243 ms 4 That would plenty fast for many interesting learning projects, like a real time guitar tuner for example. [1] https://en.wikipedia.org/w/index.php?title=Discrete_Fourier_transform&oldid=809829098 https://en.wikipedia.org/w/index.php?title=Discrete_Fourier_...
- shmerl 9y agompv has --scaletempo=speed=pitch enabled by default. So increasing speed corrects pitch.