summaryrefslogtreecommitdiff
path: root/bundle.js
diff options
context:
space:
mode:
Diffstat (limited to 'bundle.js')
-rw-r--r--bundle.js120
1 files changed, 98 insertions, 22 deletions
diff --git a/bundle.js b/bundle.js
index 2629540..9d1835c 100644
--- a/bundle.js
+++ b/bundle.js
@@ -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);