summaryrefslogtreecommitdiff
path: root/app/client/audio
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-06-06 03:38:41 +0200
committerJules Laplace <julescarbon@gmail.com>2018-06-06 03:38:41 +0200
commit24a47dfa9d25c943bf1b51a1daf87140f76b3fbb (patch)
tree38fe4ad6816e0958d5083fe16120a047c6ee94d3 /app/client/audio
parent2538fbd5471a61d51742281df0e019a2dd4ea24e (diff)
displaying these gray ass thumbnails
Diffstat (limited to 'app/client/audio')
-rw-r--r--app/client/audio/lib/draw.js9
-rw-r--r--app/client/audio/lib/index.js2
-rw-r--r--app/client/audio/lib/spectrum.js2
-rw-r--r--app/client/audio/pix2wav.js14
-rw-r--r--app/client/audio/wav2pix.js145
5 files changed, 98 insertions, 74 deletions
diff --git a/app/client/audio/lib/draw.js b/app/client/audio/lib/draw.js
index e523b6a..d4bb817 100644
--- a/app/client/audio/lib/draw.js
+++ b/app/client/audio/lib/draw.js
@@ -1,6 +1,11 @@
+import util from '../../util'
+
const scratch = document.createElement('canvas')
const scratchCtx = scratch.getContext('2d-lodpi')
+const w = 256
+const h = 256
+
export function spectrum(spec, x0, y0, ww, hh){
const data = spec.data
const fft_size = spec.fft_size
@@ -103,8 +108,8 @@ export function raw_spectrum(spec, x0, y0, ww, hh, def_min_r, def_min_i){
imag = col[v+1]
mean_r += real
mean_i += imag
- _r = clamp((real - min_r) / delta_r * 255, 0, 255)
- _i = clamp((imag - min_i) / delta_i * 255, 0, 255)
+ _r = util.clamp((real - min_r) / delta_r * 255, 0, 255)
+ _i = util.clamp((imag - min_i) / delta_i * 255, 0, 255)
// hsl = color.hsl2rgb((_i + 1) / 2, 1.0, 1 - Math.abs(_r / 10))
pixels[u+0] = _r
diff --git a/app/client/audio/lib/index.js b/app/client/audio/lib/index.js
index ba96112..2d89ff6 100644
--- a/app/client/audio/lib/index.js
+++ b/app/client/audio/lib/index.js
@@ -1,7 +1,7 @@
import Tone from 'tone'
import StartAudioContext from './startAudioContext'
-import { is_mobile } from '../util'
+import { is_mobile } from '../../util'
export function requestAudioContext (fn) {
if (is_mobile) {
diff --git a/app/client/audio/lib/spectrum.js b/app/client/audio/lib/spectrum.js
index f4a5444..c7252f1 100644
--- a/app/client/audio/lib/spectrum.js
+++ b/app/client/audio/lib/spectrum.js
@@ -1,6 +1,6 @@
import Tone from 'tone'
-import { shuffle, quantize, mod } from '../util'
+import { shuffle, quantize, mod } from '../../util'
import { windows as signalWindows } from 'signal-windows'
import FFTJS from 'fft.js'
diff --git a/app/client/audio/pix2wav.js b/app/client/audio/pix2wav.js
index ccd36be..1b103b4 100644
--- a/app/client/audio/pix2wav.js
+++ b/app/client/audio/pix2wav.js
@@ -1,17 +1,3 @@
-function render(pcm, count, zip){
- const fft = spectrum.toSpectrum(pcm, sr)
- // console.log('render', fft)
- // const pcm_rev = pcm.slice().reverse()
- // const spec_rev = spectrum.toSpectrum(pcm_rev, spec.sr)
- draw.clear()
- const { canvas, imageData } = draw.raw_spectrum(fft, 0, 256, 0, 256, _r, _i)
- const dataURL = canvas.toDataURL("image/png")
- if (zip) {
- const fn = sprintf('frame_%05d.png', count)
- zip.file(fn, dataURL.split(',')[1], {base64: true})
- }
- return { fft, canvas, imageData }
-}
function play(i) {
// console.log('play', i)
last_i = i
diff --git a/app/client/audio/wav2pix.js b/app/client/audio/wav2pix.js
index e0a10fd..e9233e5 100644
--- a/app/client/audio/wav2pix.js
+++ b/app/client/audio/wav2pix.js
@@ -1,3 +1,5 @@
+import types from '../types'
+
import Tone from 'tone'
import JSZip from 'jszip'
import FileSaver from 'file-saver'
@@ -6,73 +8,104 @@ import * as draw from './lib/draw'
import output from './lib/output'
import spectrum from './lib/spectrum'
-import {
- lerp, clamp, mod,
-} from '../util'
-
import { requestAudioContext } from './lib'
-let buffer
-let sr = 44100
-let last_i = 0
-let _r = 8, _i = 8
-
-let files, file_index = 0;
-
const FRAME_LENGTH = 126 * 255
const FRAME_OFFSET = FRAME_LENGTH / 4
-function init() {
- requestAudioContext(ready)
- draw.resize(256, 256)
-}
-function handleFileSelect(e) {
- files = e.dataTransfer ? e.dataTransfer.files : e.target.files
- loadNext()
+const _r = 8
+const _i = 8
+
+// requestAudioContext(() => {})
+
+export const loadBuffer = file => {
+ return new Promise((resolve, reject) => {
+ const url = URL.createObjectURL(file)
+ let buffer = new Tone.Buffer(
+ url,
+ loadBuffer,
+ err => {
+ console.error('err', err)
+ reject(err)
+ }
+ )
+ function loadBuffer() {
+ URL.revokeObjectURL(url)
+ resolve(buffer)
+ }
+ })
}
-function loadNext() {
- var file = files[file_index++]
- if (! file) return
- load(file)
+
+export const loadPCM = (file) => {
+ return new Promise((resolve, reject) => {
+ loadBuffer(file).then(buffer => {
+ const pcm = buffer._buffer.getChannelData(0)
+ const sr = buffer._buffer.sampleRate
+ if (! pcm) return reject()
+ console.log(buffer, pcm, sr)
+ resolve({ buffer, pcm, sr })
+ })
+ })
}
-function load(file) {
- buffer = new Tone.Buffer(
- URL.createObjectURL(file),
- loadBuffer,
- (err) => console.error('err', err)
- )
+
+export const renderFrames = (file, { frame_offset=FRAME_OFFSET, max=10 }) => dispatch => {
+ return new Promise((resolve, reject) => {
+ loadPCM(file).then(({ buffer, pcm, sr }) => {
+ dispatch({ type: types.wav2pix.loaded_buffer })
+ let canvases = []
+ for (let offset = 0, count = 0, _len = pcm.length - FRAME_LENGTH;
+ offset < _len && count < max;
+ offset += frame_offset, count += 1
+ ) {
+ canvases.push(render(pcm.slice(offset, offset+FRAME_LENGTH), sr, count))
+ }
+ dispatch({ type: types.wav2pix.draw_finish })
+ resolve(canvases)
+ })
+ })
}
-function loadBuffer() {
- // dispatch
- console.log('loaded buffer', buffer)
- const pcm = buffer._buffer.getChannelData(0)
- const sr = buffer._buffer.sampleRate
- if (! pcm) return
- const zip = new JSZip()
- const zip_folder = zip.folder("wav2pix_" + name);
+export const buildZip = (name, file, opt) => dispatch => {
+ return new Promise((resolve, reject) => {
+ const frame_offset = opt.frame_offset || FRAME_OFFSET
+ loadPCM(file).then(({ buffer, pcm, sr }) => {
+ dispatch({ type: types.wav2pix.loaded_buffer })
- const offset = 0
- for (offset = 0, count = 0, _len = pcm.length - FRAME_LENGTH;
- offset < _len;
- offset += FRAME_OFFSET, count += 1
- ) {
- if ((count % 100) === 0) {
- // dispatch event instead..
- console.log(count)
- }
- render(pcm.slice(offset, offset+FRAME_LENGTH), count, zip_folder)
- }
+ const zip = new JSZip()
+ const zip_folder = zip.folder("wav2pix_" + name);
- // dispatch event
- console.log('done exporting')
- zip.generateAsync({ type: "blob" }).then(content => {
- // dispatch
- console.log('saving zip')
- // FileSaver.saveAs(content, "wav2pix_" + name + ".zip")
- setTimeout(loadNext, 1000)
+ for (let offset = 0, count = 0, _len = pcm.length - FRAME_LENGTH;
+ offset < _len;
+ offset += frame_offset, count += 1
+ ) {
+ if ((count % 100) === 0) {
+ dispatch({ type: types.wav2pix.draw_progress, count })
+ }
+ render(pcm.slice(offset, offset+FRAME_LENGTH), sr, count, zip_folder)
+ }
+
+ // dispatch event
+ dispatch({ type: types.wav2pix.draw_finish })
+ zip.generateAsync({ type: "blob" }).then(content => {
+ dispatch({ type: types.wav2pix.load_zip })
+ // FileSaver.saveAs(content, "wav2pix_" + name + ".zip")
+ resolve(content)
+ })
+ })
})
- // play(0)
}
-init()
+function render(pcm, sr, count, zip){
+ const fft = spectrum.toSpectrum(pcm, sr)
+ // console.log('render', fft)
+ // const pcm_rev = pcm.slice().reverse()
+ // const spec_rev = spectrum.toSpectrum(pcm_rev, spec.sr)
+ const { canvas, imageData } = draw.raw_spectrum(fft, 0, 256, 0, 256, _r, _i)
+ if (zip) {
+ const name = sprintf('frame_%05d.png', count)
+ const dataURL = canvas.toDataURL("image/png")
+ zip.file(name, dataURL.split(',')[1], {base64: true})
+ }
+ return { fft, canvas, imageData }
+}
+