MIDI Controlled Dual Stereo Switcher (DSS-1)

Designed & built by Capital City Transistor & Value in Victoria, BC, Canada

Commissioned by Elliot Freedman, The Elliot Freedman Group

* The DSS-1 enables MIDI Program Change selection (either/both/none) among the 2 stereo inputs of each of 2 stereo outputs.
* The DSS-1 can be seen as a Dual Stereo Switcher or as a Quad Mono Switcher, since L&R for each input can be configured individually.
* Both upper & lower pathways feature 2 (1/4-inch TRS) stereo inputs that can be routed (as either/both/none) into 1 (1/4-inch TRS) stereo output.
* The L&R signals for each of the 2 stereo inputs on the upper & lower pathways can be routed independently of one another for quad mono operation.
* This programmer for the DSS-1 uses the WebMIDI API and is adapted from this.
* Patches of settings for upper & lower pathways can be configured from the select boxes below, which use the such shorthand as:
*   DSS1_A00_B00 : DSS1_A00_B00 for neither L nor R of A or B to their respective upper & lower outputs).
*   DSS1_ALR_BLR : DSS1_ALR_BLR for both L and R of A and B to their respective upper & lower outputs).
* If file access is blocked when this is run from a website, download this HTML file and run it locally.
* Correct MIDI transfers requires the use of a compliant MIDI cable and MIDI driver, as otherwise lacking flow control will corrupt larger messages.
* Correct MIDI access requires Web MIDI API Status OK to be shown along with MIDI ports for both transmit (Tx) and receive (Rx).
* Midi Monitor (for MacOS) is useful for spying on the output of this programmer.
* The DSS-1 LED does a chase rainblow upon start-up and goes blue for operations.
* The DSS-1 LED does a chase rainbow on a MIDI ProgChg, flashes green for each SysEx DT1, and shows red for failed SysEx flow control.
* There is a 500ms delay between SysEx DT1s on bulk sends to the DSS-1 (128*500ms=~60s), as the Arduino Nano has limited RAM to buffer incoming MIDI.
* MIDI SysEx files for the DSS-1 can be loaded into either Patch Table. Patch Tables can each be saved as raw MIDI SysEx.
* MIDI SysEx format: 1 databyte (of upperstate << 4 | lowestate) for each of 128 patches (with ManuID, DevID, & ModID, and headers & checksum ignroed).
* That is, DT1 header (with MSB1=0 & MSB2=0-127 [patch index] and LSB1=0 & LSB2=0), the DSS-1 databyte, and then the DT1 checksum.
* Patch Tables 1 or 2 may be filled in entirety with valid DSS-1 upperstate & lowerstate data, so as to enable selective copying & pasting.
* Copying an empty patch table will fill the destination patch table with DSS1_A00_B00 : DSS1_A00_B00 patches.
* Patches from a patch table may be edited by double-clicking on patch's Index [Program].
* Copy individual patches by single-clicking on the Index [Program] of the source patch to select it, followed by a Ctrl-C/⌘-C to copy the patch.
* Paste copied patches by single-clicking on the Index [Program] of the destination patch to select it, followed by a Ctrl-V/⌘-V to paste the copied patch.

Web MIDI API
Web MIDI API MIDI port (Tx) MIDI port (Rx)
DSS-1 - MIDI Channel & Program Change DSS-1 - MIDI System Exclusive
MIDI Channel (1-16) MIDI SysEx Manufacturer ID [ignored] Device ID [ignored] Model ID [ignored]
MIDI Program (1-128) MIDI SysEx Set Data (DT1) from Patch Table 1 [Index (0-127)]
DSS-1 - Patch Setting (Upper & Lower) DSS-1 - Patch Tables
DSS-1 - Patch Edit Buffer
[double-click on an 'Index [Program]' from a Patch Table]
DSS-1 - Patch Table 1
Save Patch Table 1 into Load Patch Table 1 from Send Patch Table 1 to DSS-1

DSS-1 - Patch Table 2
Save Patch Table 2 into Load Patch Table 2 from Send Patch Table 2 to DSS-1