From 684216bf8cd138d2e1a1c31fc7e95ca2ed776749 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Tue, 19 Jul 2022 23:42:33 +0200 Subject: [PATCH] strudel cli poc --- server/.gitignore | 1 + server/headline.js | 24 + server/package-lock.json | 677 +++++++++++++++++++++++++ server/package.json | 17 + server/repl.js | 76 +++ server/sampler.js | 41 ++ server/samples/bd/president_bd.mp3 | Bin 0 -> 7313 bytes server/samples/hh/president_hh.mp3 | Bin 0 -> 12537 bytes server/samples/oh/president_oh.mp3 | Bin 0 -> 12537 bytes server/samples/sd/president_sd.mp3 | Bin 0 -> 7313 bytes server/samples/sd/president_sd2.mp3 | Bin 0 -> 13582 bytes server/samples/snap/president_snap.mp3 | Bin 0 -> 10448 bytes 12 files changed, 836 insertions(+) create mode 100644 server/.gitignore create mode 100644 server/headline.js create mode 100644 server/package-lock.json create mode 100644 server/package.json create mode 100644 server/repl.js create mode 100644 server/sampler.js create mode 100644 server/samples/bd/president_bd.mp3 create mode 100644 server/samples/hh/president_hh.mp3 create mode 100644 server/samples/oh/president_oh.mp3 create mode 100644 server/samples/sd/president_sd.mp3 create mode 100644 server/samples/sd/president_sd2.mp3 create mode 100644 server/samples/snap/president_snap.mp3 diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 000000000..259748a14 --- /dev/null +++ b/server/.gitignore @@ -0,0 +1 @@ +samples/old \ No newline at end of file diff --git a/server/headline.js b/server/headline.js new file mode 100644 index 000000000..ae50f8ee4 --- /dev/null +++ b/server/headline.js @@ -0,0 +1,24 @@ +const headlines = [ + ` + ██████ ▄▄▄█████▓ ██▀███ █ ██ ▓█████▄ ▓█████ ██▓ +▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒ ██ ▓██▒▒██▀ ██▌▓█ ▀ ▓██▒ +░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▓██ ▒██░░██ █▌▒███ ▒██░ + ▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▓▓█ ░██░░▓█▄ ▌▒▓█ ▄ ▒██░ +▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒▒▒█████▓ ░▒████▓ ░▒████▒░██████▒ +▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░▒▓▒ ▒ ▒ ▒▒▓ ▒ ░░ ▒░ ░░ ▒░▓ ░ +░ ░▒ ░ ░ ░ ░▒ ░ ▒░░░▒░ ░ ░ ░ ▒ ▒ ░ ░ ░░ ░ ▒ ░ +░ ░ ░ ░ ░░ ░ ░░░ ░ ░ ░ ░ ░ ░ ░ ░ + ░ ░ ░ ░ ░ ░ ░ ░ + ░ `, + ` + + ███████╗████████╗██████╗ ██╗ ██╗██████╗ ███████╗██╗ + ██╔════╝╚══██╔══╝██╔══██╗██║ ██║██╔══██╗██╔════╝██║ + ███████╗ ██║ ██████╔╝██║ ██║██║ ██║█████╗ ██║ + ╚════██║ ██║ ██╔══██╗██║ ██║██║ ██║██╔══╝ ██║ + ███████║ ██║ ██║ ██║╚██████╔╝██████╔╝███████╗███████╗ + ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝ +`, +]; + +export const randomHeadline = () => headlines[Math.floor(Math.random() * headlines.length)]; diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 000000000..3e069342b --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,677 @@ +{ + "name": "@strudel.cycles/server", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@strudel.cycles/server", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "speaker": "^0.5.4", + "web-audio-api": "^0.2.2" + } + }, + "node_modules/aac": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/aac/-/aac-0.1.3.tgz", + "integrity": "sha512-mhkqrzCOMndmoQovW43ry8tkMttuvKcpU0u9/K7zI+lF5NtCY2NE+HwAPiEgd3rHK7IuBT1ZsGL+LKeCPW9btQ==", + "peerDependencies": { + "av": "~0.4.0" + } + }, + "node_modules/abc": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/abc/-/abc-0.5.1.tgz", + "integrity": "sha512-WRBP9wjuEdmzw1yFHCVf7Qp/PXSmfuUSX3FSs+5+uLG4qGKmhOPKl8LtZaG0p6xxuB6hX1tIzH4VaHL23+bU5A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/alac": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/alac/-/alac-0.1.0.tgz", + "integrity": "sha512-+NBR/Nj/5zndHO7Oz4EOE7Qj+v+hk/0edJerBhjMQRznyjfaYV6/W+tUOOlLTZ0BWWD4p6eb11KKDHoPW5LsCw==", + "peerDependencies": { + "av": "~0.4.0" + } + }, + "node_modules/assertion-error": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", + "integrity": "sha512-g/gZV+G476cnmtYI+Ko9d5khxSoCSoom/EaNmmCfwpOvBXEJ18qwFrxfP1/CsIqk2no1sAKKwxndV0tP7ROOFQ==", + "engines": { + "node": "*" + } + }, + "node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==" + }, + "node_modules/audiobuffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/audiobuffer/-/audiobuffer-0.2.0.tgz", + "integrity": "sha512-wEZ3iAOK1yNCy1PNcSe2V1pzzCV5rezYg0r/TRwojZBIVupQF56ioI0x5PGgatmWxJ4t8sWXymg8AFfopPXfrg==", + "dependencies": { + "underscore": "1.4.x" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/audiobuffer/node_modules/underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha512-ZqGrAgaqqZM7LGRzNjLnw5elevWb5M8LEoDMadxIW3OWbcv72wMMgKdwOKpd5Fqxe8choLD8HN3iSj3TUh/giQ==" + }, + "node_modules/av": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/av/-/av-0.4.9.tgz", + "integrity": "sha512-MvkT0k+co6o+zLMrBFFeVhYcG/S/jzy+2p00c/VwA71q6g90J28qUNh93NabKrcN06bkwFK0OeiEpFsQd7TS7g==", + "dependencies": { + "coffeeify": "^0.6.0" + }, + "optionalDependencies": { + "speaker": "^0.3.0" + } + }, + "node_modules/av/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/av/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "optional": true + }, + "node_modules/av/node_modules/speaker": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/speaker/-/speaker-0.3.1.tgz", + "integrity": "sha512-LEqSy+FHYHPZj4kX8NHylzaOmy+VIqj57enm2GS4B568hj0SdKDYa9jALCGQy43LZa/JmQk1iF0nlMVbS1PfPg==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "bindings": "^1.2.1", + "debug": "^2.2.0", + "nan": "^2.2.0", + "readable-stream": "^2.0.5" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + }, + "node_modules/chai": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-1.7.2.tgz", + "integrity": "sha512-iTItmoMR+S+g8g0xU7db2mrr2LeLMJ6Y+YJwJEOUSaVTzm6qyTBfj5r+5x+XQhlXUfVn6WfFS4sXpEtMg6Qwaw==", + "dependencies": { + "assertion-error": "1.0.0" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/coffee-script": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz", + "integrity": "sha512-W3s+SROY73OmrSGtPTTW/2wp2rmW5vuh0/tUuCK1NvTuyzLOVPccIP9whmhZ4cYWcr2NJPNENZIFaAMkTD5G3w==", + "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "dependencies": { + "mkdirp": "~0.3.5" + }, + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coffeeify": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/coffeeify/-/coffeeify-0.6.0.tgz", + "integrity": "sha512-nt2rZwyeqLnzdbC15ZUBnQtokHLqNnbgfpUMYzAk1Pa33hObdtXnDV0SmTj2DWbzp47MpR87ix3uKHyutnzjsg==", + "dependencies": { + "coffee-script": "~1.7.0", + "convert-source-map": "~0.3.3", + "through": "~2.3.4" + } + }, + "node_modules/convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "optional": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/flac": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/flac/-/flac-0.3.0.tgz", + "integrity": "sha512-52oFJru3F/aELcnDwHtqDNXxruIZH7bE3vK6xQF4ALCelCZBXFggqPsPXPilVs9L242Iz1ROrbVX0UYXJMMinw==", + "dependencies": { + "abc": "0.5.x", + "fsa": "0.5.x" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/fsa": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/fsa/-/fsa-0.5.1.tgz", + "integrity": "sha512-HMdf0zJNXwP5dxROQb/ncUv+9BxuO4NM5R6/pSbUdfu5CUzMOg7+iP4tQUtBIv18PaScukzfxGIqLyJ3d9wg3Q==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "optional": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "optional": true + }, + "node_modules/mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)" + }, + "node_modules/mp3": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mp3/-/mp3-0.1.0.tgz", + "integrity": "sha512-W9SQWAS8Gn7VvBHBSYnCIz2KAEzZccY+OAKJvO9JRRFBc0MfQ0icb7K4O9Sst/3SW1wcScC+zLNPYoiU6sSXww==", + "peerDependencies": { + "av": "~0.4.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "optional": true + }, + "node_modules/pcm-boilerplate": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pcm-boilerplate/-/pcm-boilerplate-0.1.1.tgz", + "integrity": "sha512-2mU5wENQGQoiuYUiRbLJtI8cH7H+1yvjR400XfGH6JONyzERbSbAIFCJnfRUSfbGJi2WJdo1gbTjiTsDyFSY4Q==", + "dependencies": { + "async": "0.2.x", + "chai": "1.7.x", + "underscore": "1.4.x" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pcm-boilerplate/node_modules/async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" + }, + "node_modules/pcm-boilerplate/node_modules/underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha512-ZqGrAgaqqZM7LGRzNjLnw5elevWb5M8LEoDMadxIW3OWbcv72wMMgKdwOKpd5Fqxe8choLD8HN3iSj3TUh/giQ==" + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "optional": true + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "node_modules/speaker": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/speaker/-/speaker-0.5.4.tgz", + "integrity": "sha512-0I35CJGgqU1rd/a3qVysR5gLlG+8QlzJcPAEnYvT0BLfuLdJ7JNdlQHwbh7ETNcXDXbzm2O148GEAoAER54Dvw==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.3.0", + "buffer-alloc": "^1.1.0", + "debug": "^4.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "optional": true + }, + "node_modules/web-audio-api": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/web-audio-api/-/web-audio-api-0.2.2.tgz", + "integrity": "sha512-XidLn3tEz8V9jwuV4OOVTOgNHp3WT6SQwv28Ad3lNXU4R9aPxWDYnocfVBh/OIna96jYPpiuP74KvSrTIF0OTg==", + "dependencies": { + "aac": "0.1.x", + "alac": "0.1.x", + "async": "0.9.x", + "audiobuffer": "0.2.x", + "av": "0.4.x", + "flac": "0.3.x", + "mp3": "0.1.x", + "pcm-boilerplate": "0.1.x", + "underscore": "1.8.x" + }, + "engines": { + "node": ">=0.10" + } + } + }, + "dependencies": { + "aac": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/aac/-/aac-0.1.3.tgz", + "integrity": "sha512-mhkqrzCOMndmoQovW43ry8tkMttuvKcpU0u9/K7zI+lF5NtCY2NE+HwAPiEgd3rHK7IuBT1ZsGL+LKeCPW9btQ==", + "requires": {} + }, + "abc": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/abc/-/abc-0.5.1.tgz", + "integrity": "sha512-WRBP9wjuEdmzw1yFHCVf7Qp/PXSmfuUSX3FSs+5+uLG4qGKmhOPKl8LtZaG0p6xxuB6hX1tIzH4VaHL23+bU5A==" + }, + "alac": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/alac/-/alac-0.1.0.tgz", + "integrity": "sha512-+NBR/Nj/5zndHO7Oz4EOE7Qj+v+hk/0edJerBhjMQRznyjfaYV6/W+tUOOlLTZ0BWWD4p6eb11KKDHoPW5LsCw==", + "requires": {} + }, + "assertion-error": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", + "integrity": "sha512-g/gZV+G476cnmtYI+Ko9d5khxSoCSoom/EaNmmCfwpOvBXEJ18qwFrxfP1/CsIqk2no1sAKKwxndV0tP7ROOFQ==" + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==" + }, + "audiobuffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/audiobuffer/-/audiobuffer-0.2.0.tgz", + "integrity": "sha512-wEZ3iAOK1yNCy1PNcSe2V1pzzCV5rezYg0r/TRwojZBIVupQF56ioI0x5PGgatmWxJ4t8sWXymg8AFfopPXfrg==", + "requires": { + "underscore": "1.4.x" + }, + "dependencies": { + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha512-ZqGrAgaqqZM7LGRzNjLnw5elevWb5M8LEoDMadxIW3OWbcv72wMMgKdwOKpd5Fqxe8choLD8HN3iSj3TUh/giQ==" + } + } + }, + "av": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/av/-/av-0.4.9.tgz", + "integrity": "sha512-MvkT0k+co6o+zLMrBFFeVhYcG/S/jzy+2p00c/VwA71q6g90J28qUNh93NabKrcN06bkwFK0OeiEpFsQd7TS7g==", + "requires": { + "coffeeify": "^0.6.0", + "speaker": "^0.3.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "optional": true + }, + "speaker": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/speaker/-/speaker-0.3.1.tgz", + "integrity": "sha512-LEqSy+FHYHPZj4kX8NHylzaOmy+VIqj57enm2GS4B568hj0SdKDYa9jALCGQy43LZa/JmQk1iF0nlMVbS1PfPg==", + "optional": true, + "requires": { + "bindings": "^1.2.1", + "debug": "^2.2.0", + "nan": "^2.2.0", + "readable-stream": "^2.0.5" + } + } + } + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + }, + "chai": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-1.7.2.tgz", + "integrity": "sha512-iTItmoMR+S+g8g0xU7db2mrr2LeLMJ6Y+YJwJEOUSaVTzm6qyTBfj5r+5x+XQhlXUfVn6WfFS4sXpEtMg6Qwaw==", + "requires": { + "assertion-error": "1.0.0" + } + }, + "coffee-script": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz", + "integrity": "sha512-W3s+SROY73OmrSGtPTTW/2wp2rmW5vuh0/tUuCK1NvTuyzLOVPccIP9whmhZ4cYWcr2NJPNENZIFaAMkTD5G3w==", + "requires": { + "mkdirp": "~0.3.5" + } + }, + "coffeeify": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/coffeeify/-/coffeeify-0.6.0.tgz", + "integrity": "sha512-nt2rZwyeqLnzdbC15ZUBnQtokHLqNnbgfpUMYzAk1Pa33hObdtXnDV0SmTj2DWbzp47MpR87ix3uKHyutnzjsg==", + "requires": { + "coffee-script": "~1.7.0", + "convert-source-map": "~0.3.3", + "through": "~2.3.4" + } + }, + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "optional": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "flac": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/flac/-/flac-0.3.0.tgz", + "integrity": "sha512-52oFJru3F/aELcnDwHtqDNXxruIZH7bE3vK6xQF4ALCelCZBXFggqPsPXPilVs9L242Iz1ROrbVX0UYXJMMinw==", + "requires": { + "abc": "0.5.x", + "fsa": "0.5.x" + } + }, + "fsa": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/fsa/-/fsa-0.5.1.tgz", + "integrity": "sha512-HMdf0zJNXwP5dxROQb/ncUv+9BxuO4NM5R6/pSbUdfu5CUzMOg7+iP4tQUtBIv18PaScukzfxGIqLyJ3d9wg3Q==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "optional": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "optional": true + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==" + }, + "mp3": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mp3/-/mp3-0.1.0.tgz", + "integrity": "sha512-W9SQWAS8Gn7VvBHBSYnCIz2KAEzZccY+OAKJvO9JRRFBc0MfQ0icb7K4O9Sst/3SW1wcScC+zLNPYoiU6sSXww==", + "requires": {} + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "optional": true + }, + "pcm-boilerplate": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pcm-boilerplate/-/pcm-boilerplate-0.1.1.tgz", + "integrity": "sha512-2mU5wENQGQoiuYUiRbLJtI8cH7H+1yvjR400XfGH6JONyzERbSbAIFCJnfRUSfbGJi2WJdo1gbTjiTsDyFSY4Q==", + "requires": { + "async": "0.2.x", + "chai": "1.7.x", + "underscore": "1.4.x" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" + }, + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha512-ZqGrAgaqqZM7LGRzNjLnw5elevWb5M8LEoDMadxIW3OWbcv72wMMgKdwOKpd5Fqxe8choLD8HN3iSj3TUh/giQ==" + } + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "optional": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "speaker": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/speaker/-/speaker-0.5.4.tgz", + "integrity": "sha512-0I35CJGgqU1rd/a3qVysR5gLlG+8QlzJcPAEnYvT0BLfuLdJ7JNdlQHwbh7ETNcXDXbzm2O148GEAoAER54Dvw==", + "requires": { + "bindings": "^1.3.0", + "buffer-alloc": "^1.1.0", + "debug": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "optional": true + }, + "web-audio-api": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/web-audio-api/-/web-audio-api-0.2.2.tgz", + "integrity": "sha512-XidLn3tEz8V9jwuV4OOVTOgNHp3WT6SQwv28Ad3lNXU4R9aPxWDYnocfVBh/OIna96jYPpiuP74KvSrTIF0OTg==", + "requires": { + "aac": "0.1.x", + "alac": "0.1.x", + "async": "0.9.x", + "audiobuffer": "0.2.x", + "av": "0.4.x", + "flac": "0.3.x", + "mp3": "0.1.x", + "pcm-boilerplate": "0.1.x", + "underscore": "1.8.x" + } + } + } +} diff --git a/server/package.json b/server/package.json new file mode 100644 index 000000000..02b30a41a --- /dev/null +++ b/server/package.json @@ -0,0 +1,17 @@ +{ + "name": "@strudel.cycles/server", + "version": "0.0.1", + "description": "Experimental Strudel node server", + "main": "server.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "speaker": "^0.5.4", + "web-audio-api": "^0.2.2" + } +} diff --git a/server/repl.js b/server/repl.js new file mode 100644 index 000000000..17fb759d2 --- /dev/null +++ b/server/repl.js @@ -0,0 +1,76 @@ +import repl from 'repl'; +import { evalScope, evaluate } from '@strudel.cycles/eval'; +import { AudioContext } from 'web-audio-api'; +import Speaker from 'speaker'; +import controls from '@strudel.cycles/core/controls.mjs'; +import { prepareSamples, playBuffer } from './sampler.js'; +import { randomHeadline } from './headline.js'; + +/* + This is just a POC of how a strudel cli / repl could look like +*/ + +// setup audio +const context = new AudioContext(); +context.outStream = new Speaker({ + channels: context.format.numberOfChannels, + bitDepth: context.format.bitDepth, + sampleRate: context.sampleRate, +}); +console.log('now loading samples..'); +const buffers = await prepareSamples(context, './samples/'); +console.log(''); + +// scheduler +let tick = 0; +const slice = 0.5; +const latency = 1; +/* console.log('latency', latency); +console.log('querying every', slice, 's'); */ +const offset = context.currentTime + latency; +let pattern; +setInterval(() => { + if (pattern) { + try { + pattern + .queryArc(tick * slice, ++tick * slice) + .filter((hap) => hap.hasOnset()) + .forEach((hap) => { + const t = hap.whole.begin.valueOf() + offset; + const { s, n } = hap.value; + const bank = buffers[s]; + if (bank?.length) { + const index = (n ?? 0) % bank.length; + playBuffer(context, bank[index], t); + } + }); + } catch (err) { + console.error('query error', err); + } + } +}, slice * 1000); + +await evalScope(controls, import('@strudel.cycles/core'), import('@strudel.cycles/mini')); +console.log(`${randomHeadline()} + +welcome to the experimental strudel cli <3 + +available samples: ${Object.entries(buffers) + .map(([key, samples]) => `${key} (${samples.length})`) + .join(', ')} +you can add samples to the samples folder (.wav, .ogg, .mp3) + +please enter a pattern, e.g. s("bd(3,8),~ sd,hh(3,8,1)") +`); +// repl +repl.start({ + prompt: '>>>', + eval: async function myEval(cmd, context, filename, callback) { + try { + pattern = (await evaluate(cmd)).pattern; + } catch (err) { + console.error('query error', err.message); + } + callback(null); + }, +}); diff --git a/server/sampler.js b/server/sampler.js new file mode 100644 index 000000000..5413fa28f --- /dev/null +++ b/server/sampler.js @@ -0,0 +1,41 @@ +import fs from 'fs'; + +export const loadSample = (context, path) => { + console.log(`load sample: ${path}`); + return new Promise((resolve, reject) => { + fs.readFile(new URL(path, import.meta.url), function (err, buffer) { + if (err) reject(err); + context.decodeAudioData(buffer, resolve); + }); + }); +}; + +export async function prepareSamples(context, path, ignore = ['.DS_Store', 'Thumbs.db']) { + const ignored = (filename) => !ignore.includes(filename); + const folders = fs.readdirSync(path).filter(ignored); + return Object.fromEntries( + await Promise.all( + folders.map(async (folder) => { + return [ + folder, + await Promise.all( + fs + .readdirSync(path + folder) + .filter(ignored) + .map((filename) => path + folder + '/' + filename) + .map((filepath) => loadSample(context, filepath)), + ), + ]; + }, []), + ), + ); +} + +export const playBuffer = (context, audioBuffer, start = 0) => { + const bufferNode = context.createBufferSource(); + bufferNode.connect(context.destination); + bufferNode.buffer = audioBuffer; + bufferNode.loop = false; + bufferNode.start(start); + bufferNode.stop(start + audioBuffer.length / audioBuffer.sampleRate); +}; diff --git a/server/samples/bd/president_bd.mp3 b/server/samples/bd/president_bd.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d83d5dc094361265884c89a67261e4a7a5c1c851 GIT binary patch literal 7313 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 literal 0 HcmV?d00001 diff --git a/server/samples/hh/president_hh.mp3 b/server/samples/hh/president_hh.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9ce7d396647f7f33b5fca73da121462c5937b8bd GIT binary patch literal 12537 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 literal 0 HcmV?d00001 diff --git a/server/samples/oh/president_oh.mp3 b/server/samples/oh/president_oh.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9e03bf49d45e2a3f0d68be14e561d65a8d117565 GIT binary patch literal 12537 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 literal 0 HcmV?d00001 diff --git a/server/samples/sd/president_sd.mp3 b/server/samples/sd/president_sd.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2af81031d1be5ec7542e54335d843b378b1fbba3 GIT binary patch literal 7313 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 literal 0 HcmV?d00001 diff --git a/server/samples/sd/president_sd2.mp3 b/server/samples/sd/president_sd2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ac244a41dade5339896f449758de11a3bbb48a96 GIT binary patch literal 13582 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 literal 0 HcmV?d00001 diff --git a/server/samples/snap/president_snap.mp3 b/server/samples/snap/president_snap.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..938ff333ad3f735b2ed8379b3147ed1539600b62 GIT binary patch literal 10448 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 z