summaryrefslogtreecommitdiff
path: root/app/client/audio/wav2pix.js
blob: 089816d57f8c0757d161206ece899723e586eab3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import Tone from 'tone'
import JSZip from 'jszip'
import FileSaver from 'file-saver'

import 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()
}
function loadNext() {
  var file = files[file_index++]
  if (! file) return
  load(file)
}
function load(file) {
  buffer = new Tone.Buffer(
    URL.createObjectURL(file),
    loadBuffer,
    (err) => console.error('err', err)
  )
}
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);

  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)
  }

  // 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)
  })
  // play(0)
}

init()