{"id":24641043,"url":"https://github.com/bobbadshy/touchosc_obxd_template","last_synced_at":"2025-03-20T11:48:56.084Z","repository":{"id":271948820,"uuid":"915073399","full_name":"bobbadshy/touchosc_obxd_template","owner":"bobbadshy","description":"TouchOSC template for the Oberheim OB-Xd Virtual Synthesizer.","archived":false,"fork":false,"pushed_at":"2025-02-01T19:41:26.000Z","size":71064,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-01T20:28:36.895Z","etag":null,"topics":["control-surface","control-surface-scripting","discodsp","lua","lua-scripting","midi","midi-controller","midi-keyboard","ob-x","ob-xd","oberheim","open-sound-control","osc","touchosc","touchosc-layouts","touchosc-templates"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bobbadshy.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":["https://www.paypal.com/donate?hosted_button_id=CGDJVVGG5V8LU"]}},"created_at":"2025-01-10T22:50:11.000Z","updated_at":"2025-01-31T06:51:33.000Z","dependencies_parsed_at":"2025-02-01T20:34:13.643Z","dependency_job_id":null,"html_url":"https://github.com/bobbadshy/touchosc_obxd_template","commit_stats":null,"previous_names":["bobbadshy/touchosc_obxd_template"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobbadshy%2Ftouchosc_obxd_template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobbadshy%2Ftouchosc_obxd_template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobbadshy%2Ftouchosc_obxd_template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobbadshy%2Ftouchosc_obxd_template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bobbadshy","download_url":"https://codeload.github.com/bobbadshy/touchosc_obxd_template/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244609431,"owners_count":20480782,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["control-surface","control-surface-scripting","discodsp","lua","lua-scripting","midi","midi-controller","midi-keyboard","ob-x","ob-xd","oberheim","open-sound-control","osc","touchosc","touchosc-layouts","touchosc-templates"],"created_at":"2025-01-25T12:12:05.261Z","updated_at":"2025-03-20T11:48:56.076Z","avatar_url":"https://github.com/bobbadshy.png","language":"Lua","funding_links":["https://www.paypal.com/donate?hosted_button_id=CGDJVVGG5V8LU","https://www.paypal.com/donate?hosted_button_id=CGDJVVGG5V8LU\u0026amp;"],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n\u003ctitle\u003eREADME.md\u003c/title\u003e\n\u003cmeta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\"\u003e\n\n\u003cstyle\u003e\n/* https://github.com/microsoft/vscode/blob/master/extensions/markdown-language-features/media/markdown.css */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nbody {\n\tfont-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", \"Ubuntu\", \"Droid Sans\", sans-serif);\n\tfont-size: var(--vscode-markdown-font-size, 14px);\n\tpadding: 0 26px;\n\tline-height: var(--vscode-markdown-line-height, 22px);\n\tword-wrap: break-word;\n}\n\n#code-csp-warning {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tcolor: white;\n\tmargin: 16px;\n\ttext-align: center;\n\tfont-size: 12px;\n\tfont-family: sans-serif;\n\tbackground-color:#444444;\n\tcursor: pointer;\n\tpadding: 6px;\n\tbox-shadow: 1px 1px 1px rgba(0,0,0,.25);\n}\n\n#code-csp-warning:hover {\n\ttext-decoration: none;\n\tbackground-color:#007acc;\n\tbox-shadow: 2px 2px 2px rgba(0,0,0,.25);\n}\n\nbody.scrollBeyondLastLine {\n\tmargin-bottom: calc(100vh - 22px);\n}\n\nbody.showEditorSelection .code-line {\n\tposition: relative;\n}\n\nbody.showEditorSelection .code-active-line:before,\nbody.showEditorSelection .code-line:hover:before {\n\tcontent: \"\";\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tleft: -12px;\n\theight: 100%;\n}\n\nbody.showEditorSelection li.code-active-line:before,\nbody.showEditorSelection li.code-line:hover:before {\n\tleft: -30px;\n}\n\n.vscode-light.showEditorSelection .code-active-line:before {\n\tborder-left: 3px solid rgba(0, 0, 0, 0.15);\n}\n\n.vscode-light.showEditorSelection .code-line:hover:before {\n\tborder-left: 3px solid rgba(0, 0, 0, 0.40);\n}\n\n.vscode-light.showEditorSelection .code-line .code-line:hover:before {\n\tborder-left: none;\n}\n\n.vscode-dark.showEditorSelection .code-active-line:before {\n\tborder-left: 3px solid rgba(255, 255, 255, 0.4);\n}\n\n.vscode-dark.showEditorSelection .code-line:hover:before {\n\tborder-left: 3px solid rgba(255, 255, 255, 0.60);\n}\n\n.vscode-dark.showEditorSelection .code-line .code-line:hover:before {\n\tborder-left: none;\n}\n\n.vscode-high-contrast.showEditorSelection .code-active-line:before {\n\tborder-left: 3px solid rgba(255, 160, 0, 0.7);\n}\n\n.vscode-high-contrast.showEditorSelection .code-line:hover:before {\n\tborder-left: 3px solid rgba(255, 160, 0, 1);\n}\n\n.vscode-high-contrast.showEditorSelection .code-line .code-line:hover:before {\n\tborder-left: none;\n}\n\nimg {\n\tmax-width: 100%;\n\tmax-height: 100%;\n}\n\na {\n\ttext-decoration: none;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na:focus,\ninput:focus,\nselect:focus,\ntextarea:focus {\n\toutline: 1px solid -webkit-focus-ring-color;\n\toutline-offset: -1px;\n}\n\nhr {\n\tborder: 0;\n\theight: 2px;\n\tborder-bottom: 2px solid;\n}\n\nh1 {\n\tpadding-bottom: 0.3em;\n\tline-height: 1.2;\n\tborder-bottom-width: 1px;\n\tborder-bottom-style: solid;\n}\n\nh1, h2, h3 {\n\tfont-weight: normal;\n}\n\ntable {\n\tborder-collapse: collapse;\n}\n\ntable \u003e thead \u003e tr \u003e th {\n\ttext-align: left;\n\tborder-bottom: 1px solid;\n}\n\ntable \u003e thead \u003e tr \u003e th,\ntable \u003e thead \u003e tr \u003e td,\ntable \u003e tbody \u003e tr \u003e th,\ntable \u003e tbody \u003e tr \u003e td {\n\tpadding: 5px 10px;\n}\n\ntable \u003e tbody \u003e tr + tr \u003e td {\n\tborder-top: 1px solid;\n}\n\nblockquote {\n\tmargin: 0 7px 0 5px;\n\tpadding: 0 16px 0 10px;\n\tborder-left-width: 5px;\n\tborder-left-style: solid;\n}\n\ncode {\n\tfont-family: Menlo, Monaco, Consolas, \"Droid Sans Mono\", \"Courier New\", monospace, \"Droid Sans Fallback\";\n\tfont-size: 1em;\n\tline-height: 1.357em;\n}\n\nbody.wordWrap pre {\n\twhite-space: pre-wrap;\n}\n\npre:not(.hljs),\npre.hljs code \u003e div {\n\tpadding: 16px;\n\tborder-radius: 3px;\n\toverflow: auto;\n}\n\npre code {\n\tcolor: var(--vscode-editor-foreground);\n\ttab-size: 4;\n}\n\n/** Theming */\n\n.vscode-light pre {\n\tbackground-color: rgba(220, 220, 220, 0.4);\n}\n\n.vscode-dark pre {\n\tbackground-color: rgba(10, 10, 10, 0.4);\n}\n\n.vscode-high-contrast pre {\n\tbackground-color: rgb(0, 0, 0);\n}\n\n.vscode-high-contrast h1 {\n\tborder-color: rgb(0, 0, 0);\n}\n\n.vscode-light table \u003e thead \u003e tr \u003e th {\n\tborder-color: rgba(0, 0, 0, 0.69);\n}\n\n.vscode-dark table \u003e thead \u003e tr \u003e th {\n\tborder-color: rgba(255, 255, 255, 0.69);\n}\n\n.vscode-light h1,\n.vscode-light hr,\n.vscode-light table \u003e tbody \u003e tr + tr \u003e td {\n\tborder-color: rgba(0, 0, 0, 0.18);\n}\n\n.vscode-dark h1,\n.vscode-dark hr,\n.vscode-dark table \u003e tbody \u003e tr + tr \u003e td {\n\tborder-color: rgba(255, 255, 255, 0.18);\n}\n\n\u003c/style\u003e\n\n\u003cstyle\u003e\n/* Tomorrow Theme */\n/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */\n/* Original theme - https://github.com/chriskempson/tomorrow-theme */\n\n/* Tomorrow Comment */\n.hljs-comment,\n.hljs-quote {\n\tcolor: #8e908c;\n}\n\n/* Tomorrow Red */\n.hljs-variable,\n.hljs-template-variable,\n.hljs-tag,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-regexp,\n.hljs-deletion {\n\tcolor: #c82829;\n}\n\n/* Tomorrow Orange */\n.hljs-number,\n.hljs-built_in,\n.hljs-builtin-name,\n.hljs-literal,\n.hljs-type,\n.hljs-params,\n.hljs-meta,\n.hljs-link {\n\tcolor: #f5871f;\n}\n\n/* Tomorrow Yellow */\n.hljs-attribute {\n\tcolor: #eab700;\n}\n\n/* Tomorrow Green */\n.hljs-string,\n.hljs-symbol,\n.hljs-bullet,\n.hljs-addition {\n\tcolor: #718c00;\n}\n\n/* Tomorrow Blue */\n.hljs-title,\n.hljs-section {\n\tcolor: #4271ae;\n}\n\n/* Tomorrow Purple */\n.hljs-keyword,\n.hljs-selector-tag {\n\tcolor: #8959a8;\n}\n\n.hljs {\n\tdisplay: block;\n\toverflow-x: auto;\n\tcolor: #4d4d4c;\n\tpadding: 0.5em;\n}\n\n.hljs-emphasis {\n\tfont-style: italic;\n}\n\n.hljs-strong {\n\tfont-weight: bold;\n}\n\u003c/style\u003e\n\n\u003cstyle\u003e\n/*\n * Markdown PDF CSS\n */\n\n body {\n\tfont-family: -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", \"Ubuntu\", \"Droid Sans\", sans-serif, \"Meiryo\";\n\tpadding: 0 12px;\n}\n\npre {\n\tbackground-color: #f8f8f8;\n\tborder: 1px solid #cccccc;\n\tborder-radius: 3px;\n\toverflow-x: auto;\n\twhite-space: pre-wrap;\n\toverflow-wrap: break-word;\n}\n\npre:not(.hljs) {\n\tpadding: 23px;\n\tline-height: 19px;\n}\n\nblockquote {\n\tbackground: rgba(127, 127, 127, 0.1);\n\tborder-color: rgba(0, 122, 204, 0.5);\n}\n\n.emoji {\n\theight: 1.4em;\n}\n\ncode {\n\tfont-size: 14px;\n\tline-height: 19px;\n}\n\n/* for inline code */\n:not(pre):not(.hljs) \u003e code {\n\tcolor: #C9AE75; /* Change the old color so it seems less like an error */\n\tfont-size: inherit;\n}\n\n/* Page Break : use \u003cdiv class=\"page\"/\u003e to insert page break\n-------------------------------------------------------- */\n.page {\n\tpage-break-after: always;\n}\n\n\u003c/style\u003e\n\u003clink rel=\"stylesheet\" href=\"./docs/html/readme.css\" type=\"text/css\"\u003e\n\u003cscript src=\"https://unpkg.com/mermaid/dist/mermaid.min.js\"\u003e\u003c/script\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n  \u003cscript\u003e\n    mermaid.initialize({\n      startOnLoad: true,\n      theme: document.body.classList.contains('vscode-dark') || document.body.classList.contains('vscode-high-contrast')\n          ? 'dark'\n          : 'default'\n    });\n  \u003c/script\u003e\n\u003ch1 id=\"touchosc-template-for-the-ob-xd-virtual-synthesizer\"\u003eTouchOSC template for the OB-Xd Virtual Synthesizer\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"https://hexler.net/touchosc/\"\u003eTouchOSC\u003c/a\u003e template for the\n\u003ca href=\"https://www.discodsp.com/obxd/\"\u003eOberheim OB-Xd Virtual Synthesizer\u003c/a\u003e (and\npossibly other Oberheim OB-X/OB-Xa software emulations).\u003c/p\u003e\n\u003cp\u003eLayout and functionality of this template were created using OB-Xd versions\n3.5.3 through 3.6. Check out the detailed feature list below!\u003c/p\u003e\n\u003cp\u003eIf you like this software, and use it frequently or in a commercial context,\nplease consider donating to support further development! Check out the\n\u003ca href=\"#donations\"\u003eDonations\u003c/a\u003e section at the end of this Readme. Thank you! 🙂\u003c/p\u003e\n\u003ch2 id=\"contents\"\u003eContents\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#touchosc-template-for-the-ob-xd-virtual-synthesizer\"\u003eTouchOSC template for the OB-Xd Virtual Synthesizer\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#contents\"\u003eContents\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#screenshots\"\u003eScreenshots\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#supported-features\"\u003eSupported features\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#ob-xd-support\"\u003eOB-Xd support\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#controls-and-faders\"\u003eControls and faders\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#surface-zoom\"\u003eSurface zoom\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#shiva-preset-manager\"\u003eShiva Preset manager\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#integrated-keyboard\"\u003eIntegrated keyboard\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#keyboard-settings-panel\"\u003eKeyboard settings panel\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#positional-velocity-and-modulation-support\"\u003ePositional velocity and modulation support\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#midi-channelpressure-and-polyphonic-aftertouch\"\u003eMIDI channelpressure and polyphonic aftertouch\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#keys-sustain--midi-cc66-sustenuto\"\u003eKeys Sustain – MIDI cc66 \u0026quot;Sustenuto\u0026quot;\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#mapping-up-to-five-additional-midi-cc-controls-to-keys-aftertouch\"\u003eMapping up to five additional MIDI cc controls to keys aftertouch\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#floating-keyboard-controls-panel\"\u003eFloating keyboard controls panel\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#midi-looper-control-button\"\u003eMIDI Looper control button\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#supported-looper-software\"\u003eSupported looper software\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#tested-software\"\u003eTested software\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#loop-button-configuration\"\u003eLoop button configuration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#loop-button-states\"\u003eLoop button states\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#loop-button-operation\"\u003eLoop button operation\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#planned-loop-button-features\"\u003ePlanned loop button features\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#download\"\u003eDownload\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#bug-reports-feature-suggestions-or-contributing\"\u003eBug reports, Feature Suggestions or Contributing\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#planned-features\"\u003ePlanned features\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#links\"\u003eLinks\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#donations\"\u003eDonations\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"screenshots\"\u003eScreenshots\u003c/h2\u003e\n\u003cp\u003e\u003cimg src=\"./docs/images/main-view-logo.png?raw=true\" alt=\"alt text\"\u003e\u003c/p\u003e\n\u003ch2 id=\"supported-features\"\u003eSupported features\u003c/h2\u003e\n\u003ch3 id=\"ob-xd-support\"\u003eOB-Xd support\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAll controls of the OB-Xd virtual synth have been implemented. The control\nlayout closely follows the OB-Xd \u0026quot;IIkka Rosma Dark\u0026quot; default skin.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMIDI mappings match the default mappings found in OB-Xd v3.6. So all\ncontrols should work out of the box, with no further setup neccessary.\u003c/p\u003e\n\u003cp\u003eThe template also contains a MIDI mappings XML file for OB-Xd. If some MIDI\nmappings do not work as expected (OB-Xd versions below 3.6), try to copy:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"./extra_files/obxd_midi_mapping/TouchOsc.xml?raw=true\"\u003e./extra_files/obxd_midi_mapping/TouchOsc.xml\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003efrom this template into your documents \u0026quot;discoDSP\u0026quot; folder:\u003c/p\u003e\n\u003cp\u003e... /discoDSP/OB-Xd 3/MIDI/TouchOsc.xml\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eThe \u0026quot;discoDSP\u0026quot; folder is located in the \u0026quot;Documents\u0026quot; folder in your user's\n\u003ccode\u003e$HOME\u003c/code\u003e directory. The exact naming and location of the \u0026quot;Documents\u0026quot; folder\ndiffer between operating systems and distributions. Consult the discoDSP\ndocumentation if you are unsure about the folder location.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eRestart OB-Xd. The MIDI menu should now show \u003cstrong\u003e\u0026quot;TouchOsc\u0026quot;\u003c/strong\u003e as a new MIDI mappings\noption.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLimitations on manipulating the two oscillators in OB-Xd:\u003c/p\u003e\n\u003cp\u003eMIDI has the well-known limitation of only supporting 128 discrete steps on CC\nmessages, this resolution is, of course, not enough for true continuous\nmanipulation of the available oscillator ranges.\u003c/p\u003e\n\u003cp\u003eWhile OB-Xd does offer a fine-control setting in the GUI, at the current\nversion 3.6, this control is also limited to discrete steps. As such, the\ncontrols in this surface are \u003cem\u003ealmost on-par\u003c/em\u003e with the resolution available in\nthe OB-Xd GUI. Maybe in a future version, OB-Xd will improve the oscillator\ncontrols, and also add high resolution MIDI support. (MIDI has the option to\nsend high resolution values encoded in MSB and LSB bit values, as for example,\nis the default mode for MIDI pitchbend message.)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"controls-and-faders\"\u003eControls and faders\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAll faders use a small lua script to ensure high-precision, smooth input\ncurves. This script minimizes sudden value \u0026quot;jumps\u0026quot; when starting to\nmanipulate a control, and allows for reliable fine-tuning of each fader's\ncurrent position.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDouble-tapping on a fader will reset it to its default zero or center\nposition.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMIDI and true value display:\u003c/p\u003e\n\u003cp\u003eUpon touch, all faders show a value tooltip with\nthe current MIDI value, or for some faders, a true control value to aid in\nfine-tuning.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eNote:\u003c/strong\u003e True value displays are only approximations of the actual value in\nOB-Xd. If the value is a little bit off ..just go by ear \u003cimg class=\"emoji\" alt=\"wink\" src=\"data:image/png;base64,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\" /\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"surface-zoom\"\u003eSurface zoom\u003c/h3\u003e\n\u003cp\u003eDouble-tap on a section heading or on background/borders to zoom into that\nsection. Swipe to move around the surface. Double-tap again to zoom out.\u003c/p\u003e\n\u003cp\u003eThe zoom feature is based on the awesome zoom scripts found in this\n\u003ca href=\"https://github.com/tshoppa/touchOSC/tree/main\"\u003eGitHub repository\u003c/a\u003e by tshoppa!)\u003c/p\u003e\n\u003ch3 id=\"shiva-preset-manager\"\u003eShiva Preset manager\u003c/h3\u003e\n\u003cp\u003eThe template comes with its own preset manager. These presets are not linked to\nthe OB-Xd presets, but, if you enable MIDI OUT feedback in OB-Xd (v3.5 and\nhigher), you can copy over and save your favorite presets into the surface.\u003c/p\u003e\n\u003cp\u003eThe preset manager offers a direct access mode for live switching between\nexisting presets, copy and paste presets between slots, as well as a basic\npreset crossfader.\u003c/p\u003e\n\u003cp\u003eFor a full feature list and usage description, check out the\n\u003ca href=\"https://github.com/bobbadshy/touchosc_shiva_preset_manager\"\u003eShiva Preset Manager README at GitHub\u003c/a\u003e!\n(I designed the preset manager to be modular. So, you can also re-use it\nseparately for your own TouchOSC surfaces.)\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ePreset manager screenshots\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003ePreset manager\u003c/th\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eExtended mode\u003c/td\u003e\n\u003ctd\u003eDirect Access mode\u003c/td\u003e\n\u003ctd\u003eCrossfader active\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"./docs/images/presets_main.jpeg?raw=true\" alt=\"alt text\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./docs/images/presets_direct.jpeg?raw=true\" alt=\"alt text\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./docs/images/presets_fading.jpeg?raw=true\" alt=\"alt text\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePreset name entry\u003c/td\u003e\n\u003ctd\u003eSettings panel\u003c/td\u003e\n\u003ctd\u003e\u0026quot;Restore Work\u0026quot; button and\u003cbr\u003e\u003cstrong\u003e*changed*\u003c/strong\u003e controls indication\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"./docs/images/presets_name_entry.jpeg?raw=true\" alt=\"alt text\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./docs/images/presets_settings.jpeg?raw=true\" alt=\"alt text\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./docs/images/presets_changed_notice.jpeg?raw=true\" alt=\"alt text\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"integrated-keyboard\"\u003eIntegrated keyboard\u003c/h2\u003e\n\u003cp\u003eThe integrated keyboard currently includes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePitchbend slider, with toggle switch for half or full MIDI range. Full MIDI\nrange by default maps to two semitones, so the toggle will switch between one\nsemitone and a full tone.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOctave and transpose buttons.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"keyboard-settings-panel\"\u003eKeyboard settings panel\u003c/h3\u003e\n\u003cp\u003eThe keyboard features can be configured on the \u0026quot;Keyboard settings\u0026quot; panel. Tap\nthe arrow button on the right of the keyboard controls section to show or hide\nthe panel.\u003c/p\u003e\n\u003ch3 id=\"positional-velocity-and-modulation-support\"\u003ePositional velocity and modulation support\u003c/h3\u003e\n\u003cp\u003eThe keys support registering vertical, as well as horizontal touch movement.\u003c/p\u003e\n\u003cp\u003eVelocity is controlled by the initial touch position on the keys: bottom of keys\nis loudest, top is the most quiet.\u003c/p\u003e\n\u003cp\u003eModulation (MIDI cc1) is engaged by sliding up or down on the keys. The\nmodulation will stay active after releasing the keys. It will reset only after\nall keys have been released, and then when a new key is pressed. This behaviour\nseemed the most intuitive, so modulation stays active on the sound after\nreleasing the keys. When playing is continued, modulation will reset to zero.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eNote:\u003c/strong\u003e If you wish to have finer, and full manual control of modulation, the\npitchbend slider can be switched to control modulation instead of pitch.\u003c/p\u003e\n\u003ch3 id=\"midi-channelpressure-and-polyphonic-aftertouch\"\u003eMIDI channelpressure and polyphonic aftertouch\u003c/h3\u003e\n\u003cp\u003eThe keyboard also supports both global MIDI channel pressure, and individual\nkeys polyphonic aftertouch. These options can be enabled in the keyboard\nsettings, to control hardware or software instruments with support for these\nfeatures.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e\u003cstrong\u003eNote:\u003c/strong\u003e OB-Xd does not support MIDI aftertouch. Read below for alternative\noptions to use aftertouch support with OB-Xd!\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"keys-sustain-%E2%80%93-midi-cc66-%22sustenuto%22\"\u003eKeys Sustain – MIDI cc66 \u0026quot;Sustenuto\u0026quot;\u003c/h3\u003e\n\u003cp\u003eThe keyboard features a \u0026quot;Keys Sustain\u0026quot; control which engages MIDI cc66\n\u0026quot;Sustenuto\u0026quot;.\u003c/p\u003e\n\u003cp\u003eWhen Sustenuto is activated, all currently pressed keys \u003cem\u003eare held\u003c/em\u003e on releasing\nthe keys. So, for example, you can hold a chord, and then play some melody over\nit. The \u0026quot;Keys Sustain\u0026quot; button supports stacking: Tap once to sustain all\ncurrently pressed keys. Tap again to add new keys. Double-tap or hold and\nrelease to cancel the sustenuto (hold and release for exactly timed cancel upon\nbutton release). You can also switch octaves on the keyboard while sustain is\nbeing held! Play a bass note and sustain it, switch octave, and play a melody on\ntop. \u003cimg class=\"emoji\" alt=\"smiley\" src=\"data:image/png;base64,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\" /\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003e\u003cstrong\u003eNote:\u003c/strong\u003e The keyboard will also respond to MIDI cc66 messages when received\nover MIDI!\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"mapping-up-to-five-additional-midi-cc-controls-to-keys-aftertouch\"\u003eMapping up to five additional MIDI cc controls to keys aftertouch\u003c/h3\u003e\n\u003cp\u003eAs an advanced feature, the keyboard supports mapping arbitrary MIDI cc messages\nonto the vertical or horizontal axis. The horizontal axis offers one slot, the\nvertical axis offers to slots that disengage on key release, and two slots that\ndisengage on the next key press after releasing all keys (same as the modulation\nfeature).\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eImportant:\u003c/strong\u003e This feature is not tied to the controls of this control\nsurface, but uses regular MIDI messages. Because of this, MIDI Input \u003cem\u003emust be\nconnected\u003c/em\u003e in order to sense the MIDI CC number of a control! If you already\nhave MIDI feedback from OB-Xd routed back to the template, you should be able\nto sense controls without problems. If you do not have MIDI input connected,\nuse MIDI Through to loop the control surface \u003cem\u003eback to itself\u003c/em\u003e so that it can\nread the MIDI CC messages sent by its controls.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWith this feature, you can add aftertouch functionality when playing any\nhardware or software instrument. For example, to control aftertouch volume,\nbind to Master volume, to the envelope's sustain control, or to one of the\nosclillator mix controls. Manipulate the sound shape by binding to the cutoff\nfrequency, resonance mix, etc.\u003c/p\u003e\n\u003ch3 id=\"floating-keyboard-controls-panel\"\u003eFloating keyboard controls panel\u003c/h3\u003e\n\u003cp\u003eThe keyboard features an additional floating controls panel. This panel offers\nbigger controls for some of the keyboard functions. Currently, the panel\nincludes bigger versions of the \u0026quot;Keys Sustain\u0026quot; and the \u0026quot;Midi Looper\u0026quot; control\nbutton.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e(In future versions, I will probably also add an XY pad, and maybe some other\nfaders to the floating panel, to allow easy control of modulation and filter\nparameters.)\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eTap the detach button on the right of the keyboard controls section to show or\nhide the floating controls panel.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eKeyboard screenshots\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMain controls:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg src=\"./docs/images/kbd_main_controls.png?raw=true\" alt=\"alt text\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eKeyboard settings panel:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg src=\"./docs/images/kbd_settings.jpeg?raw=true\" alt=\"alt text\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eKeyboard floating controls panel:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg src=\"./docs/images/kbd-floating-controls.png?raw=true\" alt=\"alt text\"\u003e\u003c/p\u003e\n\u003ch2 id=\"midi-looper-control-button\"\u003eMIDI Looper control button\u003c/h2\u003e\n\u003cp\u003eThe keyboard offers an optional \u0026quot;MIDI Looper\u0026quot; button that can be used to control\nexternal looping software over MIDI. The button uses a complex control scheme to\nallow manipulating most looping operations through a single control. The\nbutton's control scheme is based on control schemes commonly found on\nsingle-button hardware loopers.\u003c/p\u003e\n\u003ch3 id=\"supported-looper-software\"\u003eSupported looper software\u003c/h3\u003e\n\u003cp\u003eThe loop button should work with most looping software, as long as the software\nsupports binding to its functions with MIDI note_on messages. To be used with\nthe button, the software needs to expose all or a subset of these functions:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRecord start/stop\n\u003cul\u003e\n\u003cli\u003eBind to MIDI note_on 36, value 0/127\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eOverdub start/stop\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eBind to MIDI note_on 37, value 0/127\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eMute/Unmute\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eBind to MIDI note_on 38, value 0/127\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUndo\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eBind to MIDI note_on 39, value 127\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eRedo\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eBind to MIDI note_on 40, value 127\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePause_ON (or Reset)\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eBind to MIDI note_on 41, value 0/127\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tested-software\"\u003eTested software\u003c/h4\u003e\n\u003cp\u003eThe loop button was programmed and tested in detail with the\n\u003ca href=\"https://sonosaurus.com/sooperlooper/features.html\"\u003eSooperLooper\u003c/a\u003e software on\nLinux.\u003c/p\u003e\n\u003cp\u003eThe template contains a ready-made MIDI mappings file for SooperLooper at:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"extra_files/sooperlooper/midi.slb\"\u003eextra_files/sooperlooper/midi.slb\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOpen \u0026quot;Preferences\u0026quot; \u0026gt; \u0026quot;MIDI Bindings\u0026quot; in SooperLooper to load the MIDI mappings.\nAfter loading, all button operations should work fine with SooperLooper.\u003c/p\u003e\n\u003ch3 id=\"loop-button-configuration\"\u003eLoop button configuration\u003c/h3\u003e\n\u003cp\u003eThe loop button uses its own MIDI channel, separate from the template's main\nchannel. Open the \u0026quot;Keyboard settings\u0026quot; panel, and scroll down to the \u0026quot;Looper\u0026quot;\nsection to edit the MIDI channel for the loop button.\u003c/p\u003e\n\u003ch3 id=\"loop-button-states\"\u003eLoop button states\u003c/h3\u003e\n\u003cp\u003eThe button will indidcate several different play and recording states through\ncolor and/or pulsing.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe possible button states are:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eInitialized\u003c/strong\u003e – Corners shown, and half-lit in base color:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eNo initial loop has been recorded, yet.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003ePlaying\u003c/strong\u003e – Button lights up green:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eRecorded loop material is being played.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eMuted\u003c/strong\u003e – Button pulses green:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eThe loop continues playing, but output is muted.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRecord armed\u003c/strong\u003e – Button pulses red:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eWhen recording starts, previous loop material will be replaced with the new loop.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRecord\u003c/strong\u003e – Button lights up red:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eMaterial is being recorded into a new loop.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eOverdub armed\u003c/strong\u003e – Button pulses orange:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eWhen recording starts, new material will be added to existing loop.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eOverdub\u003c/strong\u003e – Button lights up orange:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eMaterial is being added to the existing loop.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eUndo triggered\u003c/strong\u003e – Button lights up yellow:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eIf the looper supports it, the last recorded material is removed form the\nloop.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRedo triggered\u003c/strong\u003e – Button lights up purple:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eIf the looper supports it, the previously removed material is is re-added to the loop.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eImportant:\u003c/strong\u003e The button will toggle between Undo and Redo based on its own\ninternal state, and will not process any feedback info from the looper.\nUsually, this should not present a problem, as long as the Undo and Redo\nactions are correctly bound to and processed by the respective functions in\nthe looper.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"loop-button-operation\"\u003eLoop button operation\u003c/h3\u003e\n\u003cp\u003eTo start looping, tap once to initialize the button into looping mode. The\nbutton shows corners, and is half-lit once initalized.\u003c/p\u003e\n\u003cp\u003eAfter initialization, tap once to arm for the first loop recording (button\npulses red). Only record arm is available immediately after initializing (no\noverdub), as no starting loop is present in the looper, yet.\u003c/p\u003e\n\u003cp\u003eOnce you're ready, tap again to start recording the initial loop. After\ninitializing and recording the first loop, the following actions can be\ntriggered:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWhen in  state \u003cstrong\u003e\u0026quot;Playing\u0026quot;\u003c/strong\u003e or \u003cstrong\u003e\u0026quot;Muted\u0026quot;\u003c/strong\u003e (button is green):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eDouble-tap\u003c/strong\u003e to toggle between muted and play state.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eLong-tap (tap and hold)\u003c/strong\u003e to trigger \u0026quot;Undo\u0026quot; or \u0026quot;Redo\u0026quot; action. So, this\ntoggles between removing the last played material, and re-adding it to the\nloop.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTap once\u003c/strong\u003e to switch to \u0026quot;Overdub armed\u0026quot; mode.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eDouble-tap and hold\u003c/strong\u003e to switch to \u0026quot;Record armed\u0026quot; mode.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen in state \u003cstrong\u003e\u0026quot;Overdub armed\u0026quot;\u003c/strong\u003e or \u003cstrong\u003e\u0026quot;Record armed\u0026quot;\u003c/strong\u003e (button pulses orange or red):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTap once\u003c/strong\u003e to start recording or overdubbing.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eLong-tap (tap and hold)\u003c/strong\u003e to cancel armed mode, and return to previous\nplay or muted state.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen in state \u003cstrong\u003e\u0026quot;Overdub\u0026quot;\u003c/strong\u003e or \u003cstrong\u003e\u0026quot;Record\u0026quot;\u003c/strong\u003e (button is orange or red):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTap once\u003c/strong\u003e to stop recording or overdubbing.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eDouble-tap\u003c/strong\u003e to stop recording or overdubbing, and also immediately switch\nto \u0026quot;Muted\u0026quot; state afterwards.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen in \u003cstrong\u003eANY\u003c/strong\u003e state, except for recording or overdubbing:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eLong-tap and hold for ~3 seconds\u003c/strong\u003e will unarm the looper and do a full\nreset (as far as the used looper allows it).\u003c/p\u003e\n\u003cp\u003eThe looper will send MIDI note_on 41, value 127, to the looper. So,\ndepending on what the looper supports, this can be bound to the looper's\n\u0026quot;pause\u0026quot; or \u0026quot;reset\u0026quot; function.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"planned-loop-button-features\"\u003ePlanned loop button features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdditional buttons to extend the supported range of functions, e.g. multiple\nloops with solo and mute support, record in \u0026quot;replace\u0026quot; or \u0026quot;multiply\u0026quot; mode etc.\u003c/li\u003e\n\u003cli\u003eTest with other looper software to ensure the MIDI message scheme plays well\nalso with other loopers.\u003c/li\u003e\n\u003cli\u003eAdd support (switchable option) for loopers that go from record stop directly\nback into overdub mode. (For now, please configure your software to switch to\nnormal play after record stop, for it to stay in sync with the loop button\nstate.)\u003c/li\u003e\n\u003cli\u003e...\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"usage\"\u003eUsage\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDownload the latest release.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOpen \u003ccode\u003eobxd.tosc\u003c/code\u003e or \u003ccode\u003eobxd_plain.tosc\u003c/code\u003e in TouchOSC. The \u0026quot;plain\u0026quot; version uses a\nsimple background, instead of stylized backdrops.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eStart up OB-Xd and the rest of your music setup, and enjoy!\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"download\"\u003eDownload\u003c/h2\u003e\n\u003cp\u003eCheck the \u003ca href=\"https://github.com/bobbadshy/touchosc_obxd_template/releases\"\u003eReleases\u003c/a\u003e section.\u003c/p\u003e\n\u003ch2 id=\"bug-reports-feature-suggestions-or-contributing\"\u003eBug reports, Feature Suggestions or Contributing\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eThis is currently a brand new project. First RC release was Jan 2025. So, while\nit seems to work well already, please keep in mind that it is \u003cstrong\u003ecurrently still\nin testing\u003c/strong\u003e. Thank you!\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003ePlease file issues or feature suggestions in the\n\u003ca href=\"https://github.com/bobbadshy/touchosc_obxd_template/issues\"\u003eIssues\u003c/a\u003e section.\u003c/p\u003e\n\u003cp\u003eAs this is just a hobby project in my freetime, I cannot promise I will get to\nany of them, but nevertheless, suggestions and bug reports are welcome! 🙂\u003c/p\u003e\n\u003cp\u003eIf you have any ideas or want to contribute to the project yourself, feel free\nto fork it and submit the changes back to me.\u003c/p\u003e\n\u003ch2 id=\"planned-features\"\u003ePlanned features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLight color scheme\u003c/li\u003e\n\u003cli\u003eRandomize button, with a toggle to individually include/exclude each controls\nsection from randomize. The preset manager actually already has a randomize\nbutton in its settings panel. However, \u0026quot;Randomize\u0026quot; is a very nice thing to\nhave to get started on a sound, and I want to add a button directly next to\nthe fader controls.\u003c/li\u003e\n\u003cli\u003eMore keyboard features:\n\u003cul\u003e\n\u003cli\u003eExtra panel with xy pad and faders for all midi supported modulations\n(pitch, vibrato, tremolo, etc.)\u003c/li\u003e\n\u003cli\u003eSeparate keyboard zoom ..less octaves, but bigger keys \u003cimg class=\"emoji\" alt=\"smiley\" src=\"data:image/png;base64,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\" /\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e...\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"links\"\u003eLinks\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.discodsp.com/obxd/\"\u003eOB-Xd Virtual Analog Synthesizer from discoDSP\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://hexler.net/touchosc\"\u003eHexler TouchOSC\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://hexler.net/touchosc/manual/script\"\u003eTouchOSC Scripting API\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eZoom script and many other useful TouchOSC \u003ca href=\"https://github.com/tshoppa/touchOSC/tree/main\"\u003emodules and plugins by tshoppa\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"donations\"\u003eDonations\u003c/h2\u003e\n\u003cp\u003eThis is an Open Source software and free to use for everyone under the GPL-3.0 license! 🙂\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003ePayPal\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eIf you feel this software made your life a little easier, and that it is exacly the thing you were looking for, then you can buy me a beer 🍺 (..or beers 🍻..) and I will merrily put out a toast to you for saving yet another evening! 😃\u003cbr\u003e\u003cbr\u003e\u003cem\u003e(I currently only have a PayPal button, but I may check out getting a Patreon or some \u0026quot;Buy me a coffee\u0026quot; in the future.)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://www.paypal.com/donate?hosted_button_id=CGDJVVGG5V8LU\u0026amp;\"\u003e\u003cimg src=\"https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif\" alt=\"image\"\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eMany Thanks and Enjoy!\u003c/p\u003e\n\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobbadshy%2Ftouchosc_obxd_template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbobbadshy%2Ftouchosc_obxd_template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobbadshy%2Ftouchosc_obxd_template/lists"}