diff options
Diffstat (limited to 'bundle.js')
| -rw-r--r-- | bundle.js | 120 |
1 files changed, 98 insertions, 22 deletions
@@ -24368,7 +24368,35 @@ function color(t, add, mul, alpha) { return 'rgba(' + rgb + ',' + alpha + ')'; } -exports.default = color; +function hsl2rgb(H, S, L) { + var R, G, B; + var var_1, var_2; + if (S == 0) { + //HSL from 0 to 1 + R = L * 255; //RGB results from 0 to 255 + G = L * 255; + B = L * 255; + } else { + if (L < 0.5) var_2 = L * (1 + S);else var_2 = L + S - S * L; + + var_1 = 2 * L - var_2; + + R = 255 * hue2rgb(var_1, var_2, H + 1 / 3); + G = 255 * hue2rgb(var_1, var_2, H); + B = 255 * hue2rgb(var_1, var_2, H - 1 / 3); + } + return [R, G, B]; +} +function hue2rgb(v1, v2, vH) { + if (vH < 0) vH += 1; + if (vH > 1) vH -= 1; + if (6 * vH < 1) return v1 + (v2 - v1) * 6 * vH; + if (2 * vH < 1) return v2; + if (3 * vH < 2) return v1 + (v2 - v1) * (2 / 3 - vH) * 6; + return v1; +} + +exports.default = { color: color, hsl2rgb: hsl2rgb }; /***/ }), /* 3 */ @@ -24471,6 +24499,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); +var _tone = __webpack_require__(0); + +var _tone2 = _interopRequireDefault(_tone); + +var _output = __webpack_require__(9); + +var _output2 = _interopRequireDefault(_output); + var _util = __webpack_require__(1); var _mouse = __webpack_require__(3); @@ -24530,7 +24566,7 @@ function triangle(px, py, r) { function tri(px, py, r) { ctx.save(); ctx.globalCompositeOperation = 'multiply'; - ctx.fillStyle = (0, _color2.default)((px + py) / (w + h), 0, 1, 1); + ctx.fillStyle = _color2.default.color((px + py) / (w + h), 0, 1, 1); function p() { var theta = (0, _util.randrange)(0, Math.PI * 2); var x = px + Math.cos(theta) * r; @@ -24601,7 +24637,9 @@ function waveform(pcm, sr, pos, zoom) { var signalWindows = __webpack_require__(11).windows; var FFTJS = __webpack_require__(14); -var fft_size = 1024; +var fft_size = 2048; +var fft_overlap = fft_size / 4; +var half_fft_size = fft_size / 2; var fft = new FFTJS(fft_size); function toSpectrum(pcm) { @@ -24609,22 +24647,49 @@ function toSpectrum(pcm) { var pcm_in = new Array(fft_size); var pcm_length = pcm.length; var pcm_q_length = Math.ceil(pcm_length / fft_size) * fft_size; - var i = void 0, j = void 0, fft_out = void 0, spec = []; - for (i = 0; i < pcm_q_length; i += fft_size / 4) { + for (i = 0; i < pcm_q_length; i += fft_overlap) { for (j = 0; j < fft_size; j++) { pcm_in[j] = pcm[i + j] * ham[j] || 0; } fft_out = fft.createComplexArray(); fft.realTransform(fft_out, pcm_in); + fft.completeSpectrum(fft_out); spec.push(fft_out); } - return spec; } +function fromSpectrum(spec, sr) { + var spec_len = spec.length; + var ham = signalWindows.construct('ham', fft_size); + var out = fft.createComplexArray(); + var pcm_length = fft_overlap * spec_len; + var audioBuffer = _tone2.default.context.createBuffer(1, pcm_length, sr); + var pcm = audioBuffer.getChannelData(0); + var i = void 0, + j = void 0, + u = void 0, + v = void 0, + _r = void 0, + _i = void 0, + col = void 0; + for (i = 0; i < spec_len; i++) { + col = spec[i]; + fft.inverseTransform(out, col); + u = i * fft_overlap; + for (j = fft_size * 1 / 4; j < fft_size * 3 / 4; j++) { + pcm[u + j] = out[j * 2] / ham[j] || 0; + } + } + var player = new _tone2.default.Player(audioBuffer); + player.connect(_output2.default); + player.start(_tone2.default.now() + pcm_length / sr); + // console.log(Tone.now() + pcm_length / sr) + return audioBuffer; +} function spectrum(pcm, sr) { sr = sr || 44100; var spec = toSpectrum(pcm); @@ -24633,7 +24698,7 @@ function spectrum(pcm, sr) { var scratch = document.createElement('canvas'); scratch.width = spec.length; - scratch.height = fft_size; + scratch.height = half_fft_size; var scratchCtx = scratch.getContext('2d'); var imageData = ctx.createImageData(scratch.width, scratch.height); @@ -24646,23 +24711,27 @@ function spectrum(pcm, sr) { _r = void 0, _i = void 0, col = void 0, + hsl = void 0, spec_len = spec.length; for (i = 0; i < spec_len; i++) { col = spec[i]; - for (j = 0; j < fft_size; j++) { - u = (j * spec_len + i) * 4; + + for (j = 0; j < half_fft_size; j++) { + u = ((half_fft_size - j) * spec_len + i) * 4; v = j * 2; _r = col[v]; - _i = col[v + 1]; + _i = (0, _util.mod)(col[v + 1], Math.PI * 2) / (Math.PI * 2); + hsl = _color2.default.hsl2rgb((_i + 1) / 2, 1.0, 1 - Math.abs(_r / 10)); // red - real part - data[u] = _r * 127 + 127; - // green - imag part - data[u + 1] = _i * 127 + 127; - // blue - magnitude - data[u + 2] = Math.sqrt(Math.pow(_r, 2) + Math.pow(_i, 2)) * 128 + 127; - // data[u] = 128 - // data[u+1] = 128 - data[u + 2] = 128; + // data[u] = _r * 127 + 127 + // // green - imag part + // data[u+1] = _i * 127 + 127 + // // blue - magnitude + // data[u+2] = Math.sqrt(Math.pow(_r, 2) + Math.pow(_i, 2)) * 128 + 127 + // data[u+3] = 255 + data[u] = hsl[0]; + data[u + 1] = hsl[1]; + data[u + 2] = hsl[2]; data[u + 3] = 255; } } @@ -24673,7 +24742,7 @@ function spectrum(pcm, sr) { var pixels_per_second = 1024; var width = Math.round(pcm_length / sr * pixels_per_second); // ok not really this - var height = Math.floor(h * 3 / 4); + var height = Math.floor(h * 2 / 3); var x0 = 0; var y0 = Math.floor(h / 4) + 20; @@ -24681,6 +24750,9 @@ function spectrum(pcm, sr) { ctx.drawImage(scratch, x0, y0, width, height); ctx.restore(); + + var new_pcm = fromSpectrum(spec, sr); + console.log(new_pcm); } exports.default = { @@ -24986,6 +25058,10 @@ var _mouse = __webpack_require__(3); var _mouse2 = _interopRequireDefault(_mouse); +var _output = __webpack_require__(9); + +var _output2 = _interopRequireDefault(_output); + var _hall = __webpack_require__(5); var _util = __webpack_require__(1); @@ -25043,13 +25119,13 @@ function redraw() { _keys2.default.listen(function (index) { // trigger(Math.random(), ((index+7) % SPEAKER_COUNT) / SPEAKER_COUNT, 0, samplers.smash) - var sample = samplers.smash.choice(); - var buf = sample.players[0]._buffer.get(); + var sample = samplers.smash.play(100, _tone2.default.now(), _output2.default); + console.log(_tone2.default.now()); + var buf = sample._buffer.get(); if (!buf) return; var pcm = buf.getChannelData(0); var sr = buf.sampleRate; var duration = buf.duration; - console.log(buf); console.log(duration.toFixed(2) + " s."); _draw2.default.clear(); _draw2.default.waveform(pcm); |
