Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bobbadshy/touchosc_obxd_template
TouchOSC template for the Oberheim OB-Xd Virtual Synthesizer.
https://github.com/bobbadshy/touchosc_obxd_template
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
Last synced: 1 day ago
JSON representation
TouchOSC template for the Oberheim OB-Xd Virtual Synthesizer.
- Host: GitHub
- URL: https://github.com/bobbadshy/touchosc_obxd_template
- Owner: bobbadshy
- License: gpl-3.0
- Created: 2025-01-10T22:50:11.000Z (16 days ago)
- Default Branch: main
- Last Pushed: 2025-01-25T07:55:15.000Z (2 days ago)
- Last Synced: 2025-01-25T08:25:26.430Z (2 days ago)
- 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
- Language: Lua
- Homepage:
- Size: 52.5 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.html
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
README.md
/* https://github.com/microsoft/vscode/blob/master/extensions/markdown-language-features/media/markdown.css */
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/body {
font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif);
font-size: var(--vscode-markdown-font-size, 14px);
padding: 0 26px;
line-height: var(--vscode-markdown-line-height, 22px);
word-wrap: break-word;
}#code-csp-warning {
position: fixed;
top: 0;
right: 0;
color: white;
margin: 16px;
text-align: center;
font-size: 12px;
font-family: sans-serif;
background-color:#444444;
cursor: pointer;
padding: 6px;
box-shadow: 1px 1px 1px rgba(0,0,0,.25);
}#code-csp-warning:hover {
text-decoration: none;
background-color:#007acc;
box-shadow: 2px 2px 2px rgba(0,0,0,.25);
}body.scrollBeyondLastLine {
margin-bottom: calc(100vh - 22px);
}body.showEditorSelection .code-line {
position: relative;
}body.showEditorSelection .code-active-line:before,
body.showEditorSelection .code-line:hover:before {
content: "";
display: block;
position: absolute;
top: 0;
left: -12px;
height: 100%;
}body.showEditorSelection li.code-active-line:before,
body.showEditorSelection li.code-line:hover:before {
left: -30px;
}.vscode-light.showEditorSelection .code-active-line:before {
border-left: 3px solid rgba(0, 0, 0, 0.15);
}.vscode-light.showEditorSelection .code-line:hover:before {
border-left: 3px solid rgba(0, 0, 0, 0.40);
}.vscode-light.showEditorSelection .code-line .code-line:hover:before {
border-left: none;
}.vscode-dark.showEditorSelection .code-active-line:before {
border-left: 3px solid rgba(255, 255, 255, 0.4);
}.vscode-dark.showEditorSelection .code-line:hover:before {
border-left: 3px solid rgba(255, 255, 255, 0.60);
}.vscode-dark.showEditorSelection .code-line .code-line:hover:before {
border-left: none;
}.vscode-high-contrast.showEditorSelection .code-active-line:before {
border-left: 3px solid rgba(255, 160, 0, 0.7);
}.vscode-high-contrast.showEditorSelection .code-line:hover:before {
border-left: 3px solid rgba(255, 160, 0, 1);
}.vscode-high-contrast.showEditorSelection .code-line .code-line:hover:before {
border-left: none;
}img {
max-width: 100%;
max-height: 100%;
}a {
text-decoration: none;
}a:hover {
text-decoration: underline;
}a:focus,
input:focus,
select:focus,
textarea:focus {
outline: 1px solid -webkit-focus-ring-color;
outline-offset: -1px;
}hr {
border: 0;
height: 2px;
border-bottom: 2px solid;
}h1 {
padding-bottom: 0.3em;
line-height: 1.2;
border-bottom-width: 1px;
border-bottom-style: solid;
}h1, h2, h3 {
font-weight: normal;
}table {
border-collapse: collapse;
}table > thead > tr > th {
text-align: left;
border-bottom: 1px solid;
}table > thead > tr > th,
table > thead > tr > td,
table > tbody > tr > th,
table > tbody > tr > td {
padding: 5px 10px;
}table > tbody > tr + tr > td {
border-top: 1px solid;
}blockquote {
margin: 0 7px 0 5px;
padding: 0 16px 0 10px;
border-left-width: 5px;
border-left-style: solid;
}code {
font-family: Menlo, Monaco, Consolas, "Droid Sans Mono", "Courier New", monospace, "Droid Sans Fallback";
font-size: 1em;
line-height: 1.357em;
}body.wordWrap pre {
white-space: pre-wrap;
}pre:not(.hljs),
pre.hljs code > div {
padding: 16px;
border-radius: 3px;
overflow: auto;
}pre code {
color: var(--vscode-editor-foreground);
tab-size: 4;
}/** Theming */
.vscode-light pre {
background-color: rgba(220, 220, 220, 0.4);
}.vscode-dark pre {
background-color: rgba(10, 10, 10, 0.4);
}.vscode-high-contrast pre {
background-color: rgb(0, 0, 0);
}.vscode-high-contrast h1 {
border-color: rgb(0, 0, 0);
}.vscode-light table > thead > tr > th {
border-color: rgba(0, 0, 0, 0.69);
}.vscode-dark table > thead > tr > th {
border-color: rgba(255, 255, 255, 0.69);
}.vscode-light h1,
.vscode-light hr,
.vscode-light table > tbody > tr + tr > td {
border-color: rgba(0, 0, 0, 0.18);
}.vscode-dark h1,
.vscode-dark hr,
.vscode-dark table > tbody > tr + tr > td {
border-color: rgba(255, 255, 255, 0.18);
}/* Tomorrow Theme */
/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
/* Original theme - https://github.com/chriskempson/tomorrow-theme *//* Tomorrow Comment */
.hljs-comment,
.hljs-quote {
color: #8e908c;
}/* Tomorrow Red */
.hljs-variable,
.hljs-template-variable,
.hljs-tag,
.hljs-name,
.hljs-selector-id,
.hljs-selector-class,
.hljs-regexp,
.hljs-deletion {
color: #c82829;
}/* Tomorrow Orange */
.hljs-number,
.hljs-built_in,
.hljs-builtin-name,
.hljs-literal,
.hljs-type,
.hljs-params,
.hljs-meta,
.hljs-link {
color: #f5871f;
}/* Tomorrow Yellow */
.hljs-attribute {
color: #eab700;
}/* Tomorrow Green */
.hljs-string,
.hljs-symbol,
.hljs-bullet,
.hljs-addition {
color: #718c00;
}/* Tomorrow Blue */
.hljs-title,
.hljs-section {
color: #4271ae;
}/* Tomorrow Purple */
.hljs-keyword,
.hljs-selector-tag {
color: #8959a8;
}.hljs {
display: block;
overflow-x: auto;
color: #4d4d4c;
padding: 0.5em;
}.hljs-emphasis {
font-style: italic;
}.hljs-strong {
font-weight: bold;
}/*
* Markdown PDF CSS
*/body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif, "Meiryo";
padding: 0 12px;
}pre {
background-color: #f8f8f8;
border: 1px solid #cccccc;
border-radius: 3px;
overflow-x: auto;
white-space: pre-wrap;
overflow-wrap: break-word;
}pre:not(.hljs) {
padding: 23px;
line-height: 19px;
}blockquote {
background: rgba(127, 127, 127, 0.1);
border-color: rgba(0, 122, 204, 0.5);
}.emoji {
height: 1.4em;
}code {
font-size: 14px;
line-height: 19px;
}/* for inline code */
:not(pre):not(.hljs) > code {
color: #C9AE75; /* Change the old color so it seems less like an error */
font-size: inherit;
}/* Page Break : use <div class="page"/> to insert page break
-------------------------------------------------------- */
.page {
page-break-after: always;
}
mermaid.initialize({
startOnLoad: true,
theme: document.body.classList.contains('vscode-dark') || document.body.classList.contains('vscode-high-contrast')
? 'dark'
: 'default'
});
TouchOSC template for the OB-Xd Virtual Synthesizer
TouchOSC template for the
Oberheim OB-Xd Virtual Synthesizer (and
possibly other Oberheim OB-X/OB-Xa software emulations).Layout and functionality of this template were created using OB-Xd versions
3.5.3 through 3.6. Check out the detailed feature list below!If you like this software, and use it frequently or in a commercial context,
please consider donating to support further development! Check out the
Donations section at the end of this Readme. Thank you! 🙂Contents
-
TouchOSC template for the OB-Xd Virtual Synthesizer- Contents
- Screenshots
-
Supported features
-
Integrated keyboard- Positional velocity and modulation support
- MIDI channelpressure and polyphonic aftertouch
- Keys Sustain – MIDI cc66 "Sustenuto"
- Mapping up to five additional MIDI cc controls to keys aftertouch
- Usage
- Download
- Bug reports, Feature Suggestions or Contributing
- Planned features
- Links
- Donations
Screenshots
Supported features
OB-Xd support
-
All controls of the OB-Xd virtual synth have been implemented. The control
layout closely follows the OB-Xd "IIkka Rosma Dark" default skin. -
MIDI mappings match the default mappings found in OB-Xd v3.6. So all
controls should work out of the box, with no further setup neccessary.The template also contains a MIDI mappings XML file for OB-Xd. If some MIDI
mappings do not work as expected (OB-Xd versions below 3.6), try to copy:./extra_files/obxd_midi_mapping/TouchOsc.xml
from this template into your documents "discoDSP" folder:
... /discoDSP/OB-Xd 3/MIDI/TouchOsc.xml
The "discoDSP" folder is located in the "Documents" folder in your user's
$HOME
directory. The exact naming and location of the "Documents" folder
differ between operating systems and distributions. Consult the discoDSP
documentation if you are unsure about the folder location.Restart OB-Xd. The MIDI menu should now show "TouchOsc" as a new MIDI mappings
option. -
Limitations on manipulating the two oscillators in OB-Xd:
MIDI has the well-known limitation of only supporting 128 discrete steps on CC
messages, this resolution is, of course, not enough for true continuous
manipulation of the available oscillator ranges.While OB-Xd does offer a fine-control setting in the GUI, at the current
version 3.6, this control is also limited to discrete steps. As such, the
controls in this surface are almost on-par with the resolution available in
the OB-Xd GUI. Maybe in a future version, OB-Xd will improve the oscillator
controls, and also add high resolution MIDI support. (MIDI has the option to
send high resolution values encoded in MSB and LSB bit values, as for example,
is the default mode for MIDI pitchbend message.)
Controls and faders
-
All faders use a small lua script to ensure high-precision, smooth input
curves. This script minimizes sudden value "jumps" when starting to
manipulate a control, and allows for reliable fine-tuning of each fader's
current position. -
Double-tapping on a fader will reset it to its default zero or center
position. -
MIDI and true value display:
Upon touch, all faders show a value tooltip with
the current MIDI value, or for some faders, a true control value to aid in
fine-tuning.Note: True value displays are only approximations of the actual value in
OB-Xd. If the value is a little bit off ..just go by ear
Surface zoom
Double-tap on a section heading or on background/borders to zoom into that
section. Swipe to move around the surface. Double-tap again to zoom out.
The zoom feature is based on the awesome zoom scripts found in this
GitHub repository by tshoppa!)
Shiva Preset manager
The template comes with its own preset manager. These presets are not linked to
the OB-Xd presets, but, if you enable MIDI OUT feedback in OB-Xd (v3.5 and
higher), you can copy over and save your favorite presets into the surface.
The preset manager offers a direct access mode for live switching between
existing presets, copy and paste presets between slots, as well as a basic
preset crossfader.
For a full feature list and usage description, check out the
Shiva Preset Manager README at GitHub!
(I designed the preset manager to be modular. So, you can also re-use it
separately for your own TouchOSC surfaces.)
Preset manager screenshots
Preset manager
Extended mode
Direct Access mode
Crossfader active
Preset name entry
Settings panel
"Restore Work" button and
*changed* controls indication
Integrated keyboard
The integrated keyboard currently includes:
-
Pitchbend slider, with toggle switch for half or full MIDI range. Full MIDI
range by default maps to two semitones, so the toggle will switch between one
semitone and a full tone. -
Octave and transpose buttons.
Positional velocity and modulation support
The keys support registering vertical, as well as horizontal touch movement.
Velocity is controlled by the initial touch position on the keys: bottom of keys
is loudest, top is the most quiet.
Modulation (MIDI cc1) is engaged by sliding up or down on the keys. The
modulation will stay active after releasing the keys. It will reset only after
all keys have been released, and then when a new key is pressed. This behaviour
seemed the most intuitive, so modulation stays active on the sound after
releasing the keys. When playing is continued, modulation will reset to zero.
Note: If you wish to have finer, and full manual control of modulation, the
pitchbend slider can be switched to control modulation instead of pitch.
MIDI channelpressure and polyphonic aftertouch
The keyboard also supports both global MIDI channel pressure, and individual
keys polyphonic aftertouch. These options can be enabled in the keyboard
settings, to control hardware or software instruments with support for these
features.
- Note: OB-Xd does not support MIDI aftertouch. Read below for alternative
options to use aftertouch support with OB-Xd!
Keys Sustain – MIDI cc66 "Sustenuto"
The keyboard features a "Keys Sustain" control which engages MIDI cc66
"Sustenuto".
When Sustenuto is activated, all currently pressed keys are held on releasing
the keys. So, for example, you can hold a chord, and then play some melody over
it. The "Keys Sustain" button supports stacking: Tap once to sustain all
currently pressed keys. Tap again to add new keys. Double-tap or hold and
release to cancel the sustenuto (hold and release for exactly timed cancel upon
button release). You can also switch octaves on the keyboard while sustain is
being held! Play a bass note and sustain it, switch octave, and play a melody on
top.
- Note: The keyboard will also respond to MIDI cc66 messages when received
over MIDI!
Mapping up to five additional MIDI cc controls to keys aftertouch
As an advanced feature, the keyboard supports mapping arbitrary MIDI cc messages
onto the vertical or horizontal axis. The horizontal axis offers one slot, the
vertical axis offers to slots that disengage on key release, and two slots that
disengage on the next key press after releasing all keys (same as the modulation
feature).
-
Important: This feature is not tied to the controls of this control
surface, but uses regular MIDI messages. Because of this, MIDI Input must be
connected in order to sense the MIDI CC number of a control! If you already
have MIDI feedback from OB-Xd routed back to the template, you should be able
to sense controls without problems. If you do not have a MIDI input connected,
use MIDI Through to loop the control surface back to itself so that it can
read the MIDI CC messages sent by its controls.
With this feature, you can add aftertouch functionality to any hardware or
software instruments. For example, to control aftertouch volume, bind to Master
volume, to the envelope's sustain control, or to one of the osclillator mix
controls. Manipulate the sound shape by binding to the cutoff frequency,
resonance mix, etc.
Keyboard screenshots
- Main controls:
- Keyboard settings panel:
| |
Usage
-
Download the latest release.
-
Open
obxd.tosc
orobxd_plain.tosc
in TouchOSC. The "plain" version uses a
simple background, instead of stylized backdrops. -
Start up OB-Xd and the rest of your music setup, and enjoy!
Download
Check the Releases section.
Bug reports, Feature Suggestions or Contributing
This is currently a brand new project. First RC release was Jan 2025. So, while
it seems to work well already, please keep in mind that it is currently still
in testing. Thank you!
Please file issues or feature suggestions in the
Issues section.
As this is just a hobby project in my freetime, I cannot promise I will get to
any of them, but nevertheless, suggestions and bug reports are welcome! 🙂
If you have any ideas or want to contribute to the project yourself, feel free
to fork it and submit the changes back to me.
Planned features
- Light color scheme
- Randomize button, with a toggle to individually include/exclude each controls
section from randomize. The preset manager actually already has a randomize
button in its settings panel. However, "Randomize" is a very nice thing to
have to get started on a sound, and I want to add a button directly next to
the fader controls. - More keyboard features:
- Extra panel with xy pad and faders for all midi supported modulations
(pitch, vibrato, tremolo, etc.) - Separate keyboard zoom ..less octaves, but bigger keys
- Extra panel with xy pad and faders for all midi supported modulations
- ...
Links
- OB-Xd Virtual Analog Synthesizer from discoDSP
- Hexler TouchOSC
- TouchOSC Scripting API
- Zoom script and many other useful TouchOSC modules and plugins by tshoppa
Donations
This is an Open Source software and free to use for everyone under the GPL-3.0 license! 🙂
PayPal
If 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! 😃
(I currently only have a PayPal button, but I may check out getting a Patreon or some "Buy me a coffee" in the future.)
Many Thanks and Enjoy!