diff options
Diffstat (limited to 'client/lib/spectrum.js')
| -rw-r--r-- | client/lib/spectrum.js | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/client/lib/spectrum.js b/client/lib/spectrum.js index c4e8c1e..59869c7 100644 --- a/client/lib/spectrum.js +++ b/client/lib/spectrum.js @@ -5,7 +5,7 @@ import { shuffle, quantize, mod } from './util' import { windows as signalWindows } from 'signal-windows' import FFTJS from 'fft.js' -const fft_size = 2048 +const fft_size = 512 const fft_overlap = fft_size / 4 const fft = new FFTJS(fft_size) @@ -55,6 +55,7 @@ function fromSpectrum(spec){ // for (j = fft_size; j < fft_size << 1; j++) { // col[j] = 0 // } + // if (i == 0) console.log(col) fft.inverseTransform(out, col) u = i * (fft_overlap) for (j = 0; j < fft_size; j++) { @@ -63,10 +64,37 @@ function fromSpectrum(spec){ } fadeInOut(pcm, fft_size) - + // console.log(pcm) return audioBuffer } +function fromImageData(imageData, sr, _r, _i) { + const pixels = imageData.data + const w = imageData.width + const h = imageData.height + let data = new Array(w) + let x, y, u, v, v2 + for (y = 0; y < h; y++) { + let col = data[y] = new Float32Array(h * 4) + for (x = 0; x < w; x++) { + u = (x * (w) + y) * 4 + v = x * 2 + col[v] = (pixels[u] / 255 - 0.5) * _r + col[v+1] = (pixels[u+1] / 255 - 0.5) * _i + v2 = (h-y + h) * 2 + col[v2] = col[v] + col[v2+1] = 0 // col[v+1] + } + col[h*2] = col[h*2+1] = col[h*2-1] = col[h*2-2] = 0 + } + const spec = { + data, + sr, + fft_size, fft_overlap + } + return spec +} + function binToHz(spec, i){ return (i / spec.fft_size) * spec.sr } @@ -238,7 +266,7 @@ function reorderBins(spec, order){ } export default { - toSpectrum, fromSpectrum, binToHz, + toSpectrum, fromSpectrum, fromImageData, binToHz, fadeInOut, cloneSpectrum, reverseSpectrum, shuffleSpectrum, invertSpectrum, rotateSpectrum, |
