summaryrefslogtreecommitdiff
path: root/client/lib/spectrum.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/lib/spectrum.js')
-rw-r--r--client/lib/spectrum.js34
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,