Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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.

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



Screenshots


alt text


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 wink




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

alt text
alt text
alt text

Preset name entry
Settings panel
"Restore Work" button and
*changed* controls indication

alt text
alt text
alt text

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. smiley



  • 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:


alt text



  • Keyboard settings panel:


| alt text |


Usage




  • Download the latest release.




  • Open obxd.tosc or obxd_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 smiley



  • ...


Links



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.)
image

Many Thanks and Enjoy!