├── .editorconfig ├── .github ├── FUNDING.yml └── workflows │ └── build-plugin.yml ├── .gitignore ├── .gitmodules ├── .vscode ├── c_cpp_properties.json ├── launch.json ├── settings.json └── tasks.json ├── CHANGELOG.md ├── LICENSE ├── Makefile ├── README.md ├── doc ├── LICENSE_QuickJS.txt ├── LICENSE_TonalJs.txt ├── collection.jpg ├── design.md └── signature.png ├── plugin.json ├── res ├── Arcane │ ├── 0.svg │ ├── 1.svg │ ├── 10.svg │ ├── 11.svg │ ├── 12.svg │ ├── 13.svg │ ├── 14.svg │ ├── 15.svg │ ├── 16.svg │ ├── 17.svg │ ├── 18.svg │ ├── 19.svg │ ├── 2.svg │ ├── 20.svg │ ├── 21.svg │ ├── 3.svg │ ├── 4.svg │ ├── 5.svg │ ├── 6.svg │ ├── 7.svg │ ├── 8.svg │ ├── 9.svg │ ├── Aleister.svg │ ├── Arcane.svg │ ├── Atout.svg │ └── LICENSE.txt ├── components │ ├── LICENSE.txt │ ├── fortune-off.svg │ ├── fortune-on.svg │ ├── grabby-bg.svg │ ├── grabby-knob.svg │ ├── jack-transparent.svg │ ├── keyboard-off.svg │ ├── keyboard-on.svg │ ├── knob-820-arrow.svg │ ├── knob-820-transparent.svg │ ├── knob-820.svg │ ├── label-button-bottom-off.svg │ ├── label-button-bottom-on.svg │ ├── label-button-right-off.svg │ ├── label-button-right-on.svg │ ├── pb-bg.svg │ ├── pb-knob.svg │ ├── pmbutton-minus-off.svg │ ├── pmbutton-minus-on.svg │ ├── pmbutton-plus-off.svg │ ├── pmbutton-plus-on.svg │ ├── psychopump-ms12-reference.svg │ ├── psychopump-mute-off.svg │ ├── psychopump-mute-on.svg │ ├── psychopump-out1-off.svg │ ├── psychopump-out1-on.svg │ ├── psychopump-out2-off.svg │ ├── psychopump-out2-on.svg │ ├── psychopump-solo-off.svg │ ├── psychopump-solo-on.svg │ ├── pushbutton-500-off.svg │ ├── pushbutton-500-on.svg │ ├── pushbutton-500-pink.svg │ ├── pushbutton-700-off.svg │ ├── pushbutton-700-on.svg │ ├── pushbutton-700-pink.svg │ ├── pushbutton-820-light-only.svg │ ├── pushbutton-820-off.svg │ ├── pushbutton-820-on.svg │ ├── pushbutton-820-padlock-off.svg │ ├── pushbutton-820-padlock-on.svg │ ├── pushbutton-820-pink.svg │ ├── quantize-off.svg │ ├── quantize-on.svg │ ├── quantize-pink.svg │ ├── rocker-switch-800-d.svg │ ├── rocker-switch-800-l.svg │ ├── rocker-switch-800-r.svg │ ├── rocker-switch-800-u.svg │ ├── rocker-switch-ub-b.svg │ ├── rocker-switch-ub-u.svg │ ├── screw.svg │ ├── solomon-delay-lit.svg │ ├── solomon-next-lit.svg │ ├── solomon-play-lit.svg │ └── solomon-queue-lit.svg ├── dseg │ ├── DSEG14ClassicMini-Italic.ttf │ ├── LICENSE.txt │ └── README.md ├── faceplates │ ├── Bendlet-src.svg │ ├── Bendlet.svg │ ├── Blank.svg │ ├── Darius.svg │ ├── Grabby.svg │ ├── LICENSE.txt │ ├── Pokies.svg │ ├── Psychopump.svg │ ├── Q.svg │ ├── Qqqq.svg │ ├── Quack.svg │ ├── Quale.svg │ ├── Rotatoes.svg │ ├── Smerge.svg │ ├── Solomon16.svg │ ├── Solomon4.svg │ ├── Solomon8.svg │ ├── Spleet.svg │ ├── Splirge.svg │ ├── Splort.svg │ ├── Srot.svg │ ├── Swerge.svg │ ├── Test.svg │ └── Undular.svg ├── lcd │ ├── Fixed_v01 │ │ ├── 100.svg │ │ ├── 101.svg │ │ ├── 102.svg │ │ ├── 103.svg │ │ ├── 104.svg │ │ ├── 105.svg │ │ ├── 106.svg │ │ ├── 107.svg │ │ ├── 108.svg │ │ ├── 109.svg │ │ ├── 110.svg │ │ ├── 111.svg │ │ ├── 112.svg │ │ ├── 113.svg │ │ ├── 114.svg │ │ ├── 115.svg │ │ ├── 116.svg │ │ ├── 117.svg │ │ ├── 118.svg │ │ ├── 119.svg │ │ ├── 120.svg │ │ ├── 121.svg │ │ ├── 122.svg │ │ ├── 123.svg │ │ ├── 124.svg │ │ ├── 125.svg │ │ ├── 126.svg │ │ ├── 32.svg │ │ ├── 33.svg │ │ ├── 34.svg │ │ ├── 35.svg │ │ ├── 36.svg │ │ ├── 37.svg │ │ ├── 38.svg │ │ ├── 39.svg │ │ ├── 40.svg │ │ ├── 41.svg │ │ ├── 42.svg │ │ ├── 43.svg │ │ ├── 44.svg │ │ ├── 45.svg │ │ ├── 46.svg │ │ ├── 47.svg │ │ ├── 48.svg │ │ ├── 49.svg │ │ ├── 50.svg │ │ ├── 51.svg │ │ ├── 52.svg │ │ ├── 53.svg │ │ ├── 54.svg │ │ ├── 55.svg │ │ ├── 56.svg │ │ ├── 57.svg │ │ ├── 58.svg │ │ ├── 59.svg │ │ ├── 60.svg │ │ ├── 61.svg │ │ ├── 62.svg │ │ ├── 63.svg │ │ ├── 64.svg │ │ ├── 65.svg │ │ ├── 66.svg │ │ ├── 67.svg │ │ ├── 68.svg │ │ ├── 69.svg │ │ ├── 70.svg │ │ ├── 71.svg │ │ ├── 72.svg │ │ ├── 73.svg │ │ ├── 74.svg │ │ ├── 75.svg │ │ ├── 76.svg │ │ ├── 77.svg │ │ ├── 78.svg │ │ ├── 79.svg │ │ ├── 80.svg │ │ ├── 81.svg │ │ ├── 82.svg │ │ ├── 83.svg │ │ ├── 84.svg │ │ ├── 85.svg │ │ ├── 86.svg │ │ ├── 87.svg │ │ ├── 88.svg │ │ ├── 89.svg │ │ ├── 90.svg │ │ ├── 91.svg │ │ ├── 92.svg │ │ ├── 93.svg │ │ ├── 94.svg │ │ ├── 95.svg │ │ ├── 96.svg │ │ ├── 97.svg │ │ ├── 98.svg │ │ ├── 99.svg │ │ └── LICENSE.txt │ └── piano │ │ ├── LICENSE.txt │ │ ├── l0.svg │ │ ├── l1.svg │ │ ├── l10.svg │ │ ├── l11.svg │ │ ├── l2.svg │ │ ├── l3.svg │ │ ├── l4.svg │ │ ├── l5.svg │ │ ├── l6.svg │ │ ├── l7.svg │ │ ├── l8.svg │ │ ├── l9.svg │ │ ├── u0.svg │ │ ├── u1.svg │ │ ├── u10.svg │ │ ├── u11.svg │ │ ├── u2.svg │ │ ├── u3.svg │ │ ├── u4.svg │ │ ├── u5.svg │ │ ├── u6.svg │ │ ├── u7.svg │ │ ├── u8.svg │ │ └── u9.svg ├── numbered-buttons │ ├── 01-lit.svg │ ├── 01.svg │ ├── 02-lit.svg │ ├── 02.svg │ ├── 03-lit.svg │ ├── 03.svg │ ├── 04-lit.svg │ ├── 04.svg │ ├── 05-lit.svg │ ├── 05.svg │ ├── 06-lit.svg │ ├── 06.svg │ ├── 07-lit.svg │ ├── 07.svg │ ├── 08-lit.svg │ ├── 08.svg │ ├── 09-lit.svg │ ├── 09.svg │ ├── 10-lit.svg │ ├── 10.svg │ ├── 11-lit.svg │ ├── 11.svg │ ├── 12-lit.svg │ ├── 12.svg │ ├── 13-lit.svg │ ├── 13.svg │ ├── 14-lit.svg │ ├── 14.svg │ ├── 15-lit.svg │ ├── 15.svg │ ├── 16-lit.svg │ ├── 16.svg │ ├── LICENSE.txt │ └── tpl.svg ├── piano-buttons │ ├── LICENSE.txt │ ├── Piano-Reference.svg │ ├── pink-B.svg │ ├── pink-C.svg │ ├── pink-E.svg │ ├── pink-F.svg │ ├── pink-black.svg │ ├── pink-white.svg │ ├── unlit-B.svg │ ├── unlit-C.svg │ ├── unlit-E.svg │ ├── unlit-F.svg │ ├── unlit-black.svg │ ├── unlit-white.svg │ ├── yellow-B.svg │ ├── yellow-C.svg │ ├── yellow-E.svg │ ├── yellow-F.svg │ ├── yellow-black.svg │ └── yellow-white.svg └── signature │ ├── LICENSE.txt │ └── signature.svg └── src ├── Arcane.cpp ├── Blank.cpp ├── Darius.cpp ├── Pokies.cpp ├── Psychopump.cpp ├── Qqqq.cpp ├── Quale.cpp ├── Rotatoes.cpp ├── Smerge.cpp ├── Solomon.cpp ├── Spleet.cpp ├── Splirge.cpp ├── Splort.cpp ├── Srot.cpp ├── Swerge.cpp ├── Undular.cpp ├── javascript-libraries.hpp ├── javascript.hpp ├── lcd.hpp ├── plugin.cpp ├── plugin.hpp ├── polyexternalscale.hpp ├── portablesequence.hpp ├── prng.hpp ├── quantizer.hpp └── widgets.hpp /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | charset = utf-8 7 | trim_trailing_whitespace = false 8 | insert_final_newline = true 9 | end_of_line = lf 10 | 11 | [*.{json,yml}] 12 | indent_style = space 13 | indent_size = 2 14 | 15 | [Makefile] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ["https://aria.dog/modules/donations"] 2 | -------------------------------------------------------------------------------- /.github/workflows/build-plugin.yml: -------------------------------------------------------------------------------- 1 | name: Build VCV Rack Plugin 2 | on: [push, pull_request] 3 | 4 | env: 5 | rack-sdk-version: 1.1.6 6 | release-tag: AzureCI 7 | 8 | jobs: 9 | build: 10 | name: ${{ matrix.config.name }} 11 | runs-on: ${{ matrix.config.os }} 12 | strategy: 13 | matrix: 14 | config: 15 | - { 16 | name: Linux, 17 | os: ubuntu-latest, 18 | prepare-os: sudo apt install -y libglu-dev 19 | } 20 | - { 21 | name: MacOS, 22 | os: macos-latest, 23 | prepare-os: "" 24 | } 25 | - { 26 | name: Windows, 27 | os: windows-latest, 28 | prepare-os: export CC=gcc 29 | } 30 | steps: 31 | - uses: actions/checkout@v2 32 | with: 33 | submodules: recursive 34 | - name: Get Rack-SDK 35 | shell: bash 36 | run: | 37 | pushd $HOME 38 | curl -o Rack-SDK.zip https://vcvrack.com/downloads/Rack-SDK-${{ env.rack-sdk-version }}.zip 39 | unzip Rack-SDK.zip 40 | - name: Patch plugin.mk, use 7zip on Windows 41 | shell: bash 42 | if: runner.os == 'Windows' 43 | run: | 44 | sed -i 's/zip -q -9 -r/7z a -tzip -mx=9/' $HOME/Rack-SDK/plugin.mk 45 | - name: Modify plugin version 46 | shell: bash 47 | run: | 48 | gitrev=`git rev-parse --short HEAD` 49 | pluginversion=`jq -r '.version' plugin.json` 50 | echo "Set plugin version from $pluginversion to $pluginversion-$gitrev" 51 | cat <<< `jq --arg VERSION "$pluginversion-$gitrev" '.version=$VERSION' plugin.json` > plugin.json 52 | - name: Build plugin 53 | shell: bash 54 | run: | 55 | ${{ matrix.config.prepare-os }} 56 | export RACK_DIR=$HOME/Rack-SDK 57 | make -j dep 58 | make -j dist 59 | - name: Upload artifact 60 | uses: actions/upload-artifact@v2 61 | with: 62 | path: dist 63 | name: ${{ matrix.config.name }} 64 | 65 | publish: 66 | name: Publish 67 | runs-on: ubuntu-latest 68 | needs: build 69 | if: github.ref == 'refs/heads/development' 70 | steps: 71 | - uses: actions/download-artifact@v2 72 | - name: Tag asset names with date 73 | run: | 74 | mv **/*.zip . 75 | export EXTEND_TAG=`date "+%Y%m%d"` 76 | for file in ./*.zip; do mv "$file" "${file/.zip/-${EXTEND_TAG}.zip}"; done 77 | - name: Delete existing release assets 78 | uses: mknejp/delete-release-assets@v1 79 | with: 80 | token: ${{ secrets.GITHUB_TOKEN }} 81 | tag: ${{ env.release-tag }} 82 | assets: '*.zip' 83 | fail-if-no-assets: false 84 | - name: Upload release assets 85 | uses: svenstaro/upload-release-action@v2 86 | with: 87 | repo_token: ${{ secrets.GITHUB_TOKEN }} 88 | file: "*.zip" 89 | tag: ${{ env.release-tag }} 90 | overwrite: true 91 | file_glob: true 92 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /dep 3 | /dist 4 | /plugin.so 5 | /plugin.dylib 6 | /plugin.dll 7 | .DS_Store 8 | LuaJIT-2.0.5.tar.gz 9 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaSalvatrice/AriaModules/4a1f7b7c537a9070622f5a0dabe629de282f48fe/.gitmodules -------------------------------------------------------------------------------- /.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Win32", 5 | "includePath": [ 6 | "${workspaceFolder}/../../**" 7 | ], 8 | "defines": [ 9 | "_DEBUG", 10 | "UNICODE", 11 | "_UNICODE" 12 | ], 13 | "windowsSdkVersion": "10.0.18362.0", 14 | "compilerPath": "C:\\msys64\\mingw64\\bin\\g++.exe", 15 | "cStandard": "c11", 16 | "cppStandard": "c++17" 17 | } 18 | ], 19 | "version": 4 20 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | // https://medium.com/@tonetechnician/how-to-setup-your-windows-vs-code-environment-for-vcv-rack-plugin-development-and-debugging-6e76c5a5f115 4 | // It runs the main VCV install, not the local one. 5 | 6 | // Use IntelliSense to learn about possible attributes. 7 | // Hover to view descriptions of existing attributes. 8 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 9 | "version": "0.2.0", 10 | "configurations": [ 11 | { 12 | "name": "Launch", 13 | "type": "cppvsdbg", 14 | "request": "launch", 15 | "program": "C:\\Program Files\\VCV\\Rack\\Rack.exe", 16 | "args": ["-d"], 17 | "stopAtEntry": false, 18 | "cwd": "${workspaceFolder}\\..\\..", 19 | "environment": [], 20 | "externalConsole": false 21 | }, 22 | { 23 | "name": "Build and Launch", 24 | "type": "cppvsdbg", 25 | "request": "launch", 26 | "program": "C:\\Program Files\\VCV\\Rack\\Rack.exe", 27 | "args": ["-d"], 28 | "stopAtEntry": false, 29 | "cwd": "${workspaceFolder}\\..\\..", 30 | "environment": [], 31 | "externalConsole": false, 32 | "preLaunchTask": "Build application and add to plugin folder" 33 | }, 34 | { 35 | "name": "Launch Debug", 36 | "type": "cppdbg", 37 | "request": "launch", 38 | "program": "C:\\Program Files\\VCV\\Rack\\Rack.exe", 39 | "args": ["-d"], 40 | "stopAtEntry": false, 41 | "cwd": "${workspaceFolder}\\..\\..", 42 | "environment": [], 43 | "externalConsole": false, 44 | "MIMode": "gdb", 45 | "miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe", 46 | "preLaunchTask": "Build application and add to Rack plugin folder", 47 | "setupCommands": [ 48 | { 49 | "description": "Enable pretty-printing for gdb", 50 | "text": "-enable-pretty-printing", 51 | "ignoreFailures": true 52 | } 53 | ] 54 | } 55 | ] 56 | } 57 | 58 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "terminal.integrated.shell.windows": "c:\\msys64\\usr\\bin\\bash.exe", 4 | "terminal.integrated.shellArgs.windows": ["--login"], 5 | "terminal.integrated.env.windows": { 6 | "CHERE_INVOKING": "1", 7 | "MSYSTEM": "MINGW64" 8 | }, 9 | 10 | "files.associations": { 11 | "array": "cpp", 12 | "atomic": "cpp", 13 | "bit": "cpp", 14 | "*.tcc": "cpp", 15 | "cctype": "cpp", 16 | "chrono": "cpp", 17 | "clocale": "cpp", 18 | "cmath": "cpp", 19 | "compare": "cpp", 20 | "complex": "cpp", 21 | "concepts": "cpp", 22 | "cstdarg": "cpp", 23 | "cstddef": "cpp", 24 | "cstdint": "cpp", 25 | "cstdio": "cpp", 26 | "cstdlib": "cpp", 27 | "cstring": "cpp", 28 | "ctime": "cpp", 29 | "cwchar": "cpp", 30 | "cwctype": "cpp", 31 | "deque": "cpp", 32 | "list": "cpp", 33 | "map": "cpp", 34 | "set": "cpp", 35 | "unordered_map": "cpp", 36 | "vector": "cpp", 37 | "exception": "cpp", 38 | "algorithm": "cpp", 39 | "functional": "cpp", 40 | "iterator": "cpp", 41 | "memory": "cpp", 42 | "memory_resource": "cpp", 43 | "numeric": "cpp", 44 | "optional": "cpp", 45 | "random": "cpp", 46 | "string": "cpp", 47 | "string_view": "cpp", 48 | "system_error": "cpp", 49 | "tuple": "cpp", 50 | "type_traits": "cpp", 51 | "utility": "cpp", 52 | "initializer_list": "cpp", 53 | "iosfwd": "cpp", 54 | "iostream": "cpp", 55 | "istream": "cpp", 56 | "limits": "cpp", 57 | "new": "cpp", 58 | "ostream": "cpp", 59 | "ranges": "cpp", 60 | "ratio": "cpp", 61 | "sstream": "cpp", 62 | "stdexcept": "cpp", 63 | "stop_token": "cpp", 64 | "streambuf": "cpp", 65 | "thread": "cpp", 66 | "cinttypes": "cpp", 67 | "typeinfo": "cpp", 68 | "bitset": "cpp", 69 | "codecvt": "cpp", 70 | "condition_variable": "cpp", 71 | "regex": "cpp", 72 | "iomanip": "cpp", 73 | "mutex": "cpp", 74 | "shared_mutex": "cpp", 75 | "*.xxx": "cpp", 76 | "fstream": "cpp", 77 | "cfenv": "cpp" 78 | } 79 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | // https://medium.com/@tonetechnician/how-to-setup-your-windows-vs-code-environment-for-vcv-rack-plugin-development-and-debugging-6e76c5a5f115 4 | 5 | // See https://go.microsoft.com/fwlink/?LinkId=733558 6 | // for the documentation about the tasks.json format 7 | "version": "2.0.0", 8 | "tasks": [ 9 | { 10 | "label": "Build application and add to Rack plugin folder", 11 | "type": "shell", 12 | "command": "make install -j4", 13 | "options": { 14 | "cwd": "${workspaceRoot}", 15 | "env":{ 16 | "PATH": "C:\\msys64\\usr\\bin\\;C:\\msys64\\mingw64\\bin", 17 | "RACK_DIR": "C:\\msys64\\home\\woof\\Rack" 18 | } 19 | }, 20 | "group": { 21 | "kind": "build", 22 | "isDefault": true 23 | }, 24 | "presentation": { 25 | "echo": true, 26 | "reveal": "silent", 27 | "clear": true, 28 | "focus": false, 29 | "panel": "shared" 30 | }, 31 | "problemMatcher": { 32 | "owner": "cpp", 33 | "fileLocation": ["absolute"], 34 | "pattern": { 35 | "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", 36 | "file": 1, 37 | "line": 2, 38 | "column": 3, 39 | "severity": 4, 40 | "message": 5 41 | } 42 | } 43 | }, 44 | { 45 | "label": "Clean project directories", 46 | "type": "shell", 47 | "command": "make clean", 48 | "options": { 49 | "cwd": "${workspaceRoot}", 50 | "env":{ 51 | "PATH": "C:/msys64/usr/bin/;C:/msys64/mingw64/bin", 52 | "RACK_DIR": "C:/msys64/home/woof/Rack" 53 | } 54 | }, 55 | "group": { 56 | "kind": "build", 57 | "isDefault": true 58 | }, 59 | "presentation": { 60 | "echo": true, 61 | "reveal": "always", 62 | "focus": false, 63 | "panel": "shared" 64 | }, 65 | "problemMatcher": { 66 | "owner": "cpp", 67 | "fileLocation": ["absolute"], 68 | "pattern": { 69 | "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", 70 | "file": 1, 71 | "line": 2, 72 | "column": 3, 73 | "severity": 4, 74 | "message": 5 75 | } 76 | } 77 | } 78 | ] 79 | } 80 | 81 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # If RACK_DIR is not defined when calling the Makefile, default to two directories above 2 | RACK_DIR ?= ../.. 3 | 4 | # FLAGS will be passed to both the C and C++ compiler 5 | FLAGS += 6 | CFLAGS += 7 | CXXFLAGS += -Idep 8 | 9 | # Careful about linking to shared libraries, since you can't assume much about the user's environment and library search path. 10 | # Static libraries are fine, but they should be added to this plugin's build system. 11 | LDFLAGS += 12 | 13 | # Add .cpp files to the build 14 | SOURCES += $(wildcard src/*.cpp) 15 | 16 | # Add files to the ZIP package when running `make dist` 17 | # The compiled plugin and "plugin.json" are automatically added. 18 | DISTRIBUTABLES += res 19 | DISTRIBUTABLES += $(wildcard LICENSE*) 20 | DISTRIBUTABLES += $(wildcard doc/LICENSE*) 21 | 22 | 23 | include $(RACK_DIR)/arch.mk 24 | 25 | # QuickJS integration. Thanks to Jerry Sievert & Cschol for their help with this. 26 | # This repository is known to work well in legacy versions of the plugin in VCV's library. 27 | quickjs := dep/lib/quickjs/libquickjs.a 28 | DEPS += $(quickjs) 29 | OBJECTS += $(quickjs) 30 | QUICKJS_MAKE_FLAGS += prefix="$(DEP_PATH)" 31 | ifdef ARCH_WIN 32 | ifneq (,$(findstring gcc,${CC})) 33 | CROSS_PREFIX=$(subst gcc,,${CC}) 34 | else 35 | CROSS_PREFIX= 36 | endif 37 | QUICKJS_MAKE_FLAGS += CONFIG_WIN32=y 38 | else ifdef ARCH_MAC 39 | ifneq (,$(findstring clang,${CC})) 40 | CROSS_PREFIX=$(subst clang,,${CC}) 41 | else 42 | CROSS_PREFIX= 43 | endif 44 | QUICKJS_MAKE_FLAGS += CONFIG_DARWIN=y 45 | endif 46 | $(quickjs): 47 | cd dep && git clone "https://github.com/JerrySievert/QuickJS.git" 48 | cd dep/QuickJS && git checkout b70d5344013836544631c361ae20569b978176c9 49 | cd dep/QuickJS && CROSS_PREFIX=$(CROSS_PREFIX) $(MAKE) $(QUICKJS_MAKE_FLAGS) 50 | cd dep/QuickJS && CROSS_PREFIX=$(CROSS_PREFIX) $(MAKE) $(QUICKJS_MAKE_FLAGS) install 51 | 52 | 53 | # Include the Rack plugin Makefile framework 54 | include $(RACK_DIR)/plugin.mk 55 | -------------------------------------------------------------------------------- /doc/LICENSE_QuickJS.txt: -------------------------------------------------------------------------------- 1 | This is the license for QuickJS, used in the Aria Salvatrice Signature Series 2 | Synthesizer Modules. 3 | 4 | QuickJS is available from https://bellard.org/quickjs/ 5 | 6 | ============================================================================= 7 | 8 | MIT License 9 | 10 | Copyright (c) 2019 Fabrice Bellard and Charlie Gordon 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining a copy 13 | of this software and associated documentation files (the "Software"), to deal 14 | in the Software without restriction, including without limitation the rights 15 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 16 | copies of the Software, and to permit persons to whom the Software is 17 | furnished to do so, subject to the following conditions: 18 | 19 | The above copyright notice and this permission notice shall be included in all 20 | copies or substantial portions of the Software. 21 | 22 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 28 | SOFTWARE. 29 | -------------------------------------------------------------------------------- /doc/LICENSE_TonalJs.txt: -------------------------------------------------------------------------------- 1 | This is the license for TonalJS, used in the Aria Salvatrice Signature Series 2 | Synthesizer Modules. 3 | 4 | TonalJs is available from https://github.com/tonaljs/tonal 5 | 6 | ============================================================================= 7 | 8 | The MIT License (MIT) 9 | 10 | Copyright (c) 2015 danigb 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining a copy 13 | of this software and associated documentation files (the "Software"), to deal 14 | in the Software without restriction, including without limitation the rights 15 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 16 | copies of the Software, and to permit persons to whom the Software is 17 | furnished to do so, subject to the following conditions: 18 | 19 | The above copyright notice and this permission notice shall be included in all 20 | copies or substantial portions of the Software. 21 | 22 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 28 | SOFTWARE. 29 | -------------------------------------------------------------------------------- /doc/collection.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaSalvatrice/AriaModules/4a1f7b7c537a9070622f5a0dabe629de282f48fe/doc/collection.jpg -------------------------------------------------------------------------------- /doc/design.md: -------------------------------------------------------------------------------- 1 | Design language of the modules 2 | ============================== 3 | 4 | This documents what I've done for my own reference. It's not a set of strict rules I plan to follow closely, and it doesn't define anything formally. It's just meant to improve consistency across the collection. 5 | 6 | ## Tools 7 | 8 | - Inkscape 9 | - Krita 10 | 11 | 12 | ## Fonts 13 | 14 | - [Francois One](https://fonts.google.com/specimen/Francois+One) 13pt for titles 15 | - [Nova](https://fontlibrary.org/en/font/nova) Flat 9pt, -0.50px letterspacing, 0.85 line-height for labels 16 | 17 | Font sizes expressed in however the hell Inkscape chooses to interpret pt and px by default. 18 | 19 | Align the baselines first, then use Path > Object to Path to convert them ASAP - no need to keep a master version with editable labels, just remake those when necessary. It's a good idea to keep a text template outside the drawable boundariees of the file. 20 | 21 | When labels call for a stroke to make them easier to distinguish from the background, the stroke is 0.5mm, and converted to a path. 22 | 23 | 24 | ## Colors 25 | 26 | - Yellow: #ffcc03ff 27 | - Pink: #fcaebbff 28 | - Blues, from light to dark: 29 | - Lightest (Highlight, LCD): #c1f0f2ff 30 | - Light (backgrounds): #76bfbeff 31 | - Neutral (panel decoration): #61aeb0ff 32 | - Shade (bg gradient): #469ca9ff 33 | - Dark (text and arrows): #0e6977ff 34 | - Darkest (jacks): #083d45ff 35 | 36 | Additional gradients, from light to dark (the second color being the main). Use sparingly. 37 | 38 | - Orange (Psychopump +/- buttons): #ffcc03ff ~ #f28a40ff 39 | - Red (Mute button): #ff1c6eff ~ #974151ff 40 | - Green (Solo button): #a0ff2dff ~ #269d2cff 41 | 42 | These shades of yellow and pink are almost indistinguishable to people with tritanopia (about 1% of the population), and the Red gradient is hard to tell apart from the bues for people with protanopia (about 1% of males), so they should never be the only design cue provided to convey information. When a widget can be lit both pink and yellow, the pink version should have a Dark notch or circle prevalent in the design. 43 | 44 | 45 | ## Alignment 46 | 47 | Keep things aligned across collections, but don't sweat precision. Go for something that looks good rather than mathematical accuracy. 48 | 49 | 50 | ## Jacks 51 | 52 | Jacks are spaced by at least 8mm. 10mm for a small logical separation. They are preferably aligned to integer values. Inputs have a yellow rim, outputs a pink one. Outputs are framed in a dark roundrect iff it improves readability (3mm rounding radius). 53 | 54 | 55 | ## Illustrations 56 | 57 | Vector illustrations should be simple cartoonesque line art or silhouettes, otherwise they break. Bitmaps might be an option for more complex illustrations. The background patterns should be subtle and not look too busy when zoomed out. 58 | 59 | 60 | ## Strokes 61 | 62 | 0.3mm and 0.5mm are frequently used. 63 | 64 | 65 | ## Bitmap tracing 66 | 67 | Auto-tracing paths in inkscape with default settings on "Trace Bitmap" never looks right - lots of broken shapes. 68 | 69 | For the tarot cards, I set the settings as follows, and barely edited them at all: 70 | 71 | - Mode: Multiple scans: Brightness steps, 2 scans, smooth, Stack scans, Remove background 72 | - Options: Suppress speckles 5, smooth corners 0.2, optimize paths 0.05 73 | 74 | Optimize paths to a low settings is the important one here. It's what tends to break things once imported. 75 | 76 | -------------------------------------------------------------------------------- /doc/signature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaSalvatrice/AriaModules/4a1f7b7c537a9070622f5a0dabe629de282f48fe/doc/signature.png -------------------------------------------------------------------------------- /res/components/LICENSE.txt: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 Sam Hocevar 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | -------------------------------------------------------------------------------- /res/components/pushbutton-500-off.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 31 | 52 | 54 | 57 | 61 | 65 | 66 | 69 | 73 | 77 | 78 | 80 | 86 | 92 | 93 | 97 | 101 | 102 | 111 | 116 | 120 | 124 | 125 | 135 | 145 | 146 | 152 | 158 | 165 | 166 | -------------------------------------------------------------------------------- /res/components/pushbutton-500-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 31 | 52 | 54 | 57 | 61 | 65 | 66 | 69 | 73 | 77 | 78 | 80 | 86 | 92 | 93 | 97 | 101 | 102 | 111 | 116 | 120 | 124 | 125 | 135 | 145 | 146 | 152 | 159 | 160 | -------------------------------------------------------------------------------- /res/components/pushbutton-500-pink.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 31 | 52 | 54 | 57 | 61 | 65 | 66 | 68 | 74 | 80 | 81 | 85 | 89 | 90 | 99 | 104 | 108 | 112 | 113 | 123 | 133 | 136 | 140 | 144 | 145 | 146 | 152 | 158 | 165 | 166 | -------------------------------------------------------------------------------- /res/components/pushbutton-700-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 31 | 52 | 54 | 57 | 61 | 65 | 66 | 69 | 73 | 77 | 78 | 80 | 86 | 92 | 93 | 97 | 101 | 102 | 111 | 116 | 120 | 124 | 125 | 135 | 145 | 146 | 152 | 159 | 160 | -------------------------------------------------------------------------------- /res/components/pushbutton-700-pink.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 31 | 52 | 54 | 57 | 61 | 65 | 66 | 68 | 74 | 80 | 81 | 85 | 89 | 90 | 99 | 104 | 108 | 112 | 113 | 123 | 133 | 136 | 140 | 144 | 145 | 146 | 152 | 158 | 165 | 166 | -------------------------------------------------------------------------------- /res/components/pushbutton-820-light-only.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 31 | 53 | 55 | 58 | 62 | 66 | 67 | 70 | 74 | 78 | 79 | 81 | 87 | 93 | 94 | 98 | 102 | 103 | 112 | 117 | 121 | 125 | 126 | 135 | 144 | 145 | 151 | 158 | 159 | -------------------------------------------------------------------------------- /res/components/pushbutton-820-off.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 50 | 52 | 55 | 59 | 63 | 64 | 67 | 71 | 75 | 76 | 78 | 84 | 90 | 91 | 95 | 99 | 100 | 109 | 114 | 118 | 122 | 123 | 132 | 141 | 142 | 148 | 154 | 160 | 167 | 168 | -------------------------------------------------------------------------------- /res/components/pushbutton-820-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 31 | 52 | 54 | 57 | 61 | 65 | 66 | 69 | 73 | 77 | 78 | 80 | 86 | 92 | 93 | 97 | 101 | 102 | 111 | 116 | 120 | 124 | 125 | 134 | 143 | 144 | 150 | 157 | 158 | -------------------------------------------------------------------------------- /res/components/pushbutton-820-pink.svg: -------------------------------------------------------------------------------- 1 | 2 | 19 | 21 | 22 | 24 | image/svg+xml 25 | 27 | 28 | 29 | 30 | 31 | 52 | 54 | 57 | 61 | 65 | 66 | 69 | 73 | 77 | 78 | 80 | 86 | 92 | 93 | 97 | 101 | 102 | 111 | 116 | 120 | 124 | 125 | 134 | 143 | 144 | 150 | 156 | 163 | 164 | -------------------------------------------------------------------------------- /res/components/solomon-delay-lit.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 38 | 40 | 41 | 43 | image/svg+xml 44 | 46 | 47 | 48 | 49 | 50 | 55 | 59 | 64 | 68 | 72 | 76 | 80 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /res/components/solomon-next-lit.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 38 | 40 | 41 | 43 | image/svg+xml 44 | 46 | 47 | 48 | 49 | 50 | 55 | 59 | 64 | 68 | 72 | 76 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /res/components/solomon-play-lit.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 38 | 40 | 41 | 43 | image/svg+xml 44 | 46 | 47 | 48 | 49 | 50 | 55 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /res/components/solomon-queue-lit.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 38 | 40 | 41 | 43 | image/svg+xml 44 | 46 | 47 | 48 | 49 | 50 | 55 | 59 | 64 | 68 | 72 | 76 | 80 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /res/dseg/DSEG14ClassicMini-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaSalvatrice/AriaModules/4a1f7b7c537a9070622f5a0dabe629de282f48fe/res/dseg/DSEG14ClassicMini-Italic.ttf -------------------------------------------------------------------------------- /res/dseg/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017, keshikan (http://www.keshikan.net), 2 | with Reserved Font Name "DSEG". 3 | 4 | 5 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 6 | This license is copied below, and is also available with a FAQ at: 7 | http://scripts.sil.org/OFL 8 | 9 | 10 | ----------------------------------------------------------- 11 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 12 | ----------------------------------------------------------- 13 | 14 | PREAMBLE 15 | The goals of the Open Font License (OFL) are to stimulate worldwide 16 | development of collaborative font projects, to support the font creation 17 | efforts of academic and linguistic communities, and to provide a free and 18 | open framework in which fonts may be shared and improved in partnership 19 | with others. 20 | 21 | The OFL allows the licensed fonts to be used, studied, modified and 22 | redistributed freely as long as they are not sold by themselves. The 23 | fonts, including any derivative works, can be bundled, embedded, 24 | redistributed and/or sold with any software provided that any reserved 25 | names are not used by derivative works. The fonts and derivatives, 26 | however, cannot be released under any other type of license. The 27 | requirement for fonts to remain under this license does not apply 28 | to any document created using the fonts or their derivatives. 29 | 30 | DEFINITIONS 31 | "Font Software" refers to the set of files released by the Copyright 32 | Holder(s) under this license and clearly marked as such. This may 33 | include source files, build scripts and documentation. 34 | 35 | "Reserved Font Name" refers to any names specified as such after the 36 | copyright statement(s). 37 | 38 | "Original Version" refers to the collection of Font Software components as 39 | distributed by the Copyright Holder(s). 40 | 41 | "Modified Version" refers to any derivative made by adding to, deleting, 42 | or substituting -- in part or in whole -- any of the components of the 43 | Original Version, by changing formats or by porting the Font Software to a 44 | new environment. 45 | 46 | "Author" refers to any designer, engineer, programmer, technical 47 | writer or other person who contributed to the Font Software. 48 | 49 | PERMISSION & CONDITIONS 50 | Permission is hereby granted, free of charge, to any person obtaining 51 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 52 | redistribute, and sell modified and unmodified copies of the Font 53 | Software, subject to the following conditions: 54 | 55 | 1) Neither the Font Software nor any of its individual components, 56 | in Original or Modified Versions, may be sold by itself. 57 | 58 | 2) Original or Modified Versions of the Font Software may be bundled, 59 | redistributed and/or sold with any software, provided that each copy 60 | contains the above copyright notice and this license. These can be 61 | included either as stand-alone text files, human-readable headers or 62 | in the appropriate machine-readable metadata fields within text or 63 | binary files as long as those fields can be easily viewed by the user. 64 | 65 | 3) No Modified Version of the Font Software may use the Reserved Font 66 | Name(s) unless explicit written permission is granted by the corresponding 67 | Copyright Holder. This restriction only applies to the primary font name as 68 | presented to the users. 69 | 70 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 71 | Software shall not be used to promote, endorse or advertise any 72 | Modified Version, except to acknowledge the contribution(s) of the 73 | Copyright Holder(s) and the Author(s) or with their explicit written 74 | permission. 75 | 76 | 5) The Font Software, modified or unmodified, in part or in whole, 77 | must be distributed entirely under this license, and must not be 78 | distributed under any other license. The requirement for fonts to 79 | remain under this license does not apply to any document created 80 | using the Font Software. 81 | 82 | TERMINATION 83 | This license becomes null and void if any of the above conditions are 84 | not met. 85 | 86 | DISCLAIMER 87 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 88 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 89 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 90 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 91 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 92 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 93 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 94 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 95 | OTHER DEALINGS IN THE FONT SOFTWARE. 96 | -------------------------------------------------------------------------------- /res/dseg/README.md: -------------------------------------------------------------------------------- 1 | This is the DSEG14 Classic Mini Italic font of the DSEG family. 2 | The full font family contains many more variants. 3 | It is available from: 4 | 5 | * https://www.keshikan.net/fonts-e.html 6 | * https://github.com/keshikan/DSEG 7 | 8 | It's bundled under the terms of the [OFL 1.1](LICENSE.txt) license. 9 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/100.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/101.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/102.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/103.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/104.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/105.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/106.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/107.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/108.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/109.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/110.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/111.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/112.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/113.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/114.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/115.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/116.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/117.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/118.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/119.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/120.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/121.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/122.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/123.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/124.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/125.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/126.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/32.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 18 | 38 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 40 | 42 | image/svg+xml 43 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/33.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/34.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/35.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/36.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/37.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/38.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/39.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/40.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/41.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/42.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/43.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/44.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/45.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/46.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/47.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/48.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/49.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/50.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/51.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/52.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/53.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/54.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/55.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/56.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/57.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/58.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/59.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/60.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/61.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/62.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/63.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/64.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/65.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/66.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/67.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/68.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/69.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/70.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/71.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/72.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/73.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/74.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/75.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/76.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/77.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/78.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/79.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/80.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/81.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/82.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/83.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/84.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/85.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/86.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/87.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/88.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/89.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/90.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/91.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/92.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/93.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/94.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/95.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/96.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/97.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/98.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/99.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/Fixed_v01/LICENSE.txt: -------------------------------------------------------------------------------- 1 | These SVG files were exported from the Fixed_v01 font by Orgdot, 2 | available from http://www.orgdot.com/aliasfonts/index.htm 3 | 4 | The exporter used was Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 5 | 6 | Various customizations were applied: 7 | 8 | - The line-height was lowered to cause a scanline effect. 9 | - The | (pipe) character was moved 1 pixel to the right, to align better 10 | with the piano on the Modulus Salomonis Regis module. 11 | - The _ (underscore) was made 1 pixel less wide. 12 | - The = (equal) character was replaced with a full block. 13 | 14 | The font is distributed under a custom license, reproduced verbatim below. 15 | 16 | ===================================================================== 17 | 18 | /* (c) 2001 http://www.orgdot.com: you can copy, use, modify and 19 | distribute this code and/or artwork for educational, commercial or 20 | recreational use. all we ask is that you include this copyright notice 21 | in the materialyou distribute. for compiled code, you will need to 22 | make accessible this copyright notice somewhere in the distribution, 23 | and/or via a link on the web. there are several reasons for this 24 | caveat - the most important being that open source is based on one 25 | main principle: what you find and use, others should also have 26 | access to. don't keep it to yourself! this software is provided 27 | by the author and contributors "as is" and any express or implied 28 | warranties, including, but not limited to, the implied warranties 29 | of merchantability and fitness for a particular purpose are 30 | disclaimed. in no event shall the author or contributors be liable 31 | for any direct, indirect, incidental, special, exemplary, or 32 | consequential damages (including, but not limited to, procurement of 33 | substitute goods or services; loss of use, data, or profits; or 34 | business interruption) however caused and on any theory of 35 | liability, whether in contract, strict liability, or tort (including 36 | negligence or otherwise) arising in any way out of the use of this 37 | software, even if advised of the possibility of such damage. */ 38 | -------------------------------------------------------------------------------- /res/lcd/piano/LICENSE.txt: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 Sam Hocevar 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | -------------------------------------------------------------------------------- /res/lcd/piano/l0.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l1.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l10.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l11.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l2.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l3.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l4.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l5.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l6.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l7.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l8.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/l9.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u0.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u1.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u10.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u11.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u2.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u3.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u4.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u5.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u6.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u7.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u8.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/lcd/piano/u9.svg: -------------------------------------------------------------------------------- 1 | 2 | Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj 3 | 4 | 5 | -------------------------------------------------------------------------------- /res/piano-buttons/pink-B.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /res/piano-buttons/pink-C.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /res/piano-buttons/pink-E.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /res/piano-buttons/pink-F.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /res/piano-buttons/pink-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /res/piano-buttons/pink-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /res/piano-buttons/yellow-B.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /res/piano-buttons/yellow-C.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /res/piano-buttons/yellow-E.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /res/piano-buttons/yellow-F.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /res/piano-buttons/yellow-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /res/piano-buttons/yellow-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 30 | 33 | 37 | 41 | 42 | 52 | 55 | 59 | 63 | 64 | 65 | 84 | 86 | 87 | 89 | image/svg+xml 90 | 92 | 93 | 94 | 95 | 96 | 101 | 106 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /res/signature/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright © 2019-2020 Aria Salvatrice. All rights reserved. 2 | 3 | If you edit my code to use my modules as a base for your own altered modules, 4 | remove my signature from your faceplates, even if you think your changes 5 | are trivial: I don't want to endorse and take credit for something I 6 | didn't vet or personally participate in. 7 | 8 | If you are faithfully porting my code to a new host, are compiling 9 | binaries for another platform, or are otherwise faithfully distributing my 10 | modules as I designed them, keep the signature. If unsure, just ask. 11 | 12 | The easiest way to remove my signature from every module is by blanking or 13 | replacing the graphic in the signature.svg file, and removing it from the 14 | blank plate: res/faceplates/Blank.svg. 15 | -------------------------------------------------------------------------------- /src/Blank.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019-2020 Aria Salvatrice 2 | This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 3 | This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 4 | You should have received a copy of the GNU General Public License along with this program. If not, see . 5 | */ 6 | #include "plugin.hpp" 7 | 8 | namespace Blank { 9 | 10 | struct Blank : Module { 11 | enum ParamIds { 12 | NUM_PARAMS 13 | }; 14 | enum InputIds { 15 | NUM_INPUTS 16 | }; 17 | enum OutputIds { 18 | NUM_OUTPUTS 19 | }; 20 | enum LightIds { 21 | NUM_LIGHTS 22 | }; 23 | 24 | Blank() { 25 | config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); 26 | } 27 | 28 | void process(const ProcessArgs& args) override { 29 | 30 | } 31 | }; 32 | 33 | 34 | struct BlankWidget : W::ModuleWidget { 35 | BlankWidget(Blank* module) { 36 | setModule(module); 37 | setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/faceplates/Blank.svg"))); 38 | 39 | // Screws 40 | addChild(createWidget(Vec(RACK_GRID_WIDTH, 0))); 41 | addChild(createWidget(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); 42 | addChild(createWidget(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); 43 | addChild(createWidget(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); 44 | } 45 | }; 46 | 47 | } // namespace Blank 48 | 49 | Model* modelBlank = createModel("Blank"); 50 | -------------------------------------------------------------------------------- /src/Srot.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019-2020 Aria Salvatrice 2 | This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 3 | This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 4 | You should have received a copy of the GNU General Public License along with this program. If not, see . 5 | */ 6 | 7 | /* Srot should do the following: 8 | - Sort ascending 9 | - Sort descending 10 | - Sort ascending absolute value 11 | - Sort descending absolute value 12 | - Rotate by N channels 13 | - Sort randomly on trigger 14 | - Trim to _n_ outputs | 15 | - Pad to _n_ outputs | Min max 16 | - Remove dupes 17 | - 18 | 19 | */ 20 | #include "plugin.hpp" 21 | 22 | namespace Srot { 23 | 24 | struct Srot : Module { 25 | enum ParamIds { 26 | NUM_PARAMS 27 | }; 28 | enum InputIds { 29 | NUM_INPUTS 30 | }; 31 | enum OutputIds { 32 | NUM_OUTPUTS 33 | }; 34 | enum LightIds { 35 | NUM_LIGHTS 36 | }; 37 | 38 | 39 | Srot() { 40 | config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); 41 | } 42 | 43 | void process(const ProcessArgs& args) override { 44 | 45 | } 46 | 47 | }; 48 | 49 | 50 | struct SrotWidget : W::ModuleWidget { 51 | SrotWidget(Srot* module) { 52 | setModule(module); 53 | setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/faceplates/Srot.svg"))); 54 | 55 | // Signature 56 | addChild(createWidget(mm2px(Vec(5.9f, 114.5f)))); 57 | 58 | // Screws 59 | addChild(createWidget(Vec(RACK_GRID_WIDTH, 0))); 60 | addChild(createWidget(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); 61 | addChild(createWidget(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); 62 | addChild(createWidget(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); 63 | 64 | } 65 | 66 | }; 67 | 68 | } // namespace Srot 69 | 70 | Model* modelSrot = createModel("Srot"); 71 | -------------------------------------------------------------------------------- /src/javascript.hpp: -------------------------------------------------------------------------------- 1 | /* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 Sam Hocevar 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | */ 15 | 16 | // This encapsulates QuickJS, the same Javascript engine used in VCV Prototype. 17 | // This is very experimental, and done in the simplest way that would accomplish my goals, 18 | // since the documentation of quickjs is mostly "Just read the uncommented headers lol". 19 | // 20 | // I plan to keep it this simple until I run into an obvious pain point. 21 | // 22 | // In general, the big idea is to load snippets from javascript-libraries, 23 | // craft a string to call a function and assign it to a variable, 24 | // read that variable, and use JSON for interchange because eh that's as 25 | // far as I'm willing to figure out this thing. 26 | // 27 | // Spinning up a new runtime on demand is basically instant, but this stuff is 28 | // just to do one-off data processing. Don't go around writing an oscillator with it. 29 | // 30 | // Jerry Sievert's fork of Quickjs (and advice!) were used: https://github.com/JerrySievert/QuickJS 31 | // See makefile for how to add it to a project. 32 | 33 | #pragma once 34 | #include 35 | 36 | // QuickJS always throws a warning here, but it works. 37 | #include "QuickJS/quickjs.h" 38 | 39 | namespace Javascript { 40 | 41 | struct Runtime { 42 | JSRuntime *runtime = NULL; 43 | JSContext *context = NULL; 44 | JSValue argv; 45 | JSValue globalObject; 46 | 47 | Runtime () { 48 | runtime = JS_NewRuntime(); 49 | context = JS_NewContext(runtime); 50 | 51 | argv = JS_NewObject(context); 52 | globalObject = JS_GetGlobalObject(context); 53 | } 54 | 55 | ~Runtime () { 56 | JS_FreeValue(context, argv); 57 | JS_FreeValue(context, globalObject); 58 | if (context) JS_FreeContext(context); 59 | if (runtime) JS_FreeRuntime(runtime); 60 | } 61 | 62 | void evaluateString(std::string script) { 63 | JSValue evaluatedScript = JS_Eval(context, script.c_str(), script.size(), "Evaluated script", 0); 64 | JS_FreeValue(context, evaluatedScript); 65 | } 66 | 67 | const char* readVariableAsChar(const char* variable){ 68 | JSValue value = JS_GetPropertyStr(context, globalObject, variable); 69 | const char *readValue = JS_ToCString(context, value); 70 | JS_FreeValue(context, value); 71 | return readValue; 72 | } 73 | 74 | int32_t readVariableAsInt32(const char* variable){ 75 | int32_t readValue = 0; 76 | JSValue value = JS_GetPropertyStr(context, globalObject, variable); 77 | JS_ToInt32(context, &readValue, value); 78 | JS_FreeValue(context, value); 79 | return readValue; 80 | } 81 | 82 | 83 | }; 84 | 85 | } // Javascript 86 | -------------------------------------------------------------------------------- /src/plugin.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019-2020 Aria Salvatrice 2 | This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 3 | This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 4 | You should have received a copy of the GNU General Public License along with this program. If not, see . 5 | */ 6 | #include "plugin.hpp" 7 | 8 | Plugin* pluginInstance; 9 | 10 | void init(Plugin* p) { 11 | pluginInstance = p; 12 | 13 | // Split & Merge series 14 | p->addModel(modelSplort); 15 | p->addModel(modelSmerge); 16 | p->addModel(modelSpleet); 17 | p->addModel(modelSwerge); 18 | p->addModel(modelSplirge); 19 | // p->addModel(modelSrot); 20 | 21 | // Quantizers 22 | p->addModel(modelQqqq); 23 | p->addModel(modelQuack); 24 | p->addModel(modelQ); 25 | p->addModel(modelQuale); 26 | 27 | // Sequencers 28 | p->addModel(modelDarius); 29 | p->addModel(modelSolomon4); 30 | p->addModel(modelSolomon8); 31 | p->addModel(modelSolomon16); 32 | 33 | // Arcane 34 | p->addModel(modelArcane); 35 | p->addModel(modelAtout); 36 | p->addModel(modelAleister); 37 | 38 | // Psychopump 39 | p->addModel(modelPsychopump); 40 | 41 | // Remote Controllers 42 | p->addModel(modelPokies4); 43 | p->addModel(modelGrabby); 44 | p->addModel(modelRotatoes4); 45 | 46 | // Live performance 47 | p->addModel(modelUndular); 48 | 49 | // Blank plate 50 | p->addModel(modelBlank); 51 | 52 | // p->addModel(modelBendlet); 53 | // p->addModel(modelTest); 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/plugin.hpp: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019-2020 Aria Salvatrice 2 | This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 3 | This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 4 | You should have received a copy of the GNU General Public License along with this program. If not, see . 5 | */ 6 | #pragma once 7 | #include 8 | #include "widgets.hpp" 9 | // Explicit include required on OS X 10 | #include 11 | 12 | using namespace rack; 13 | 14 | // Declare the Plugin, defined in plugin.cpp 15 | extern Plugin* pluginInstance; 16 | 17 | // Split & Merge series 18 | extern Model *modelSplort; 19 | extern Model *modelSmerge; 20 | extern Model *modelSpleet; 21 | extern Model *modelSwerge; 22 | extern Model *modelSplirge; 23 | // extern Model *modelSrot; 24 | 25 | // Quantizers 26 | extern Model *modelQqqq; 27 | extern Model *modelQuack; 28 | extern Model *modelQ; 29 | extern Model *modelQuale; 30 | 31 | // Sequencers 32 | extern Model *modelDarius; 33 | extern Model *modelSolomon4; 34 | extern Model *modelSolomon8; 35 | extern Model *modelSolomon16; 36 | 37 | // Arcane 38 | extern Model *modelArcane; 39 | extern Model *modelAtout; 40 | extern Model *modelAleister; 41 | 42 | // Psychopump 43 | extern Model *modelPsychopump; 44 | 45 | // Remote controllers 46 | extern Model *modelPokies4; 47 | extern Model *modelGrabby; 48 | extern Model *modelRotatoes4; 49 | 50 | // Live performance 51 | extern Model *modelUndular; 52 | 53 | // Blank plate 54 | extern Model *modelBlank; 55 | 56 | // extern Model *modelBendlet; 57 | // extern Model *modelTest; 58 | -------------------------------------------------------------------------------- /src/polyexternalscale.hpp: -------------------------------------------------------------------------------- 1 | /* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 Sam Hocevar 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | */ 15 | 16 | // For now, this mostly contains the Struct I use to share across expanders. 17 | 18 | #pragma once 19 | #include "plugin.hpp" 20 | 21 | namespace PolyExternalScale { 22 | 23 | struct PES { 24 | std::array booleans; 25 | 26 | PES() { 27 | for (size_t i = 0; i < 8; i++) booleans[i] = false; 28 | } 29 | }; 30 | 31 | // TODO: Pass a real PES? 32 | struct PESExpanderMessage { 33 | std::array scale; 34 | bool hasRootNote = false; 35 | // Only if hasRootNote 36 | size_t rootNote = 0; 37 | }; 38 | 39 | } // namespace PolyExternalScale 40 | -------------------------------------------------------------------------------- /src/prng.hpp: -------------------------------------------------------------------------------- 1 | /* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 Sam Hocevar 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | */ 15 | #pragma once 16 | 17 | // Deterministic seedable PRNG 18 | // Using xoroshiro128+ like VCV Rack did in 1.x - gives me a better distribution than mersenne twister. 19 | // http://prng.di.unimi.it/ 20 | // https://community.vcvrack.com/t/controlling-the-random-seed/8005 21 | // 22 | // The original algorithm is in the public domain, this is just a tiny wrapper around it. 23 | // 24 | // Running an automated test on Darius, I'm obtaining a distribution of results that look sane, 25 | // not skewed to either side, which was a problem with std's mersenne twister. 26 | namespace prng { 27 | 28 | struct prng { 29 | 30 | inline uint64_t rotl(const uint64_t x, int k) { 31 | return (x << k) | (x >> (64 - k)); 32 | } 33 | 34 | uint64_t s[2]; 35 | 36 | uint64_t next(void) { 37 | const uint64_t s0 = s[0]; 38 | uint64_t s1 = s[1]; 39 | const uint64_t result = s0 + s1; 40 | 41 | s1 ^= s0; 42 | s[0] = rotl(s0, 24) ^ s1 ^ (s1 << 16); // a, b 43 | s[1] = rotl(s1, 37); // c 44 | 45 | return result; 46 | } 47 | 48 | void init(float seed1, float seed2){ 49 | s[0] = seed1 * 572376460694501; // Keyboard smash - salting seems to improve results 50 | s[1] = seed2 * 645624357248923; 51 | for (size_t i = 0; i < 50; i++) next(); // Warm up for better results 52 | } 53 | 54 | float uniform() { 55 | for (size_t i = 0; i < 50; i++) next(); // More dry runs. 56 | return (next() >> (64 - 24)) / std::pow(2.f, 24); 57 | } 58 | 59 | }; 60 | 61 | } 62 | --------------------------------------------------------------------------------