Skip to content
Keith Kepler edited this page Jun 26, 2024 · 1 revision

Welcome to the StudioOne-LaunchKey-Mini-MK3 Control Surface & Device XML mapping wiki!

About

This is a living document to detail information about Presonus Studio One surface.XML / device mapping files.

Pre-read

This is not official documentation. It's just me trying to compile my own for reference.

Studio One's "Focus mode". If you are in focus mode, your midi mapping works as long as your plugin window is in focus. Additionally, the mapping between your hardware knob and plugin parameter is retained between songs. When Focus mode is turned off, the mapped control will work even when your plugin is not active. Reference https://www.youtube.com/watch?v=Vq0GMDvagi4

Yellow button on in the upper right hand corner of the plugin window indicates focus mode.

S1 focus mode

Control-Surface

Presonus Studio One Surface/Device mapping cheatsheet Presonus-Studio-One-suface-XML-cheatsheet

The basic keyboard.suface.xml structure

You can define namespaces and variables within sections as needed.

<ControlSurface> <!--** Create only ONE Instance **-->
    
    <Controls> <!--** Create only ONE Instance **-->
        <Control name="" type="" options="" title=""> <!--**create as many as needed**-->
            <MidiMessage status="" channel=n address=n options="" resolution=""/>
            <Handler class="MyCustomHandler"/> <!-- Requires custom Javascript code -->
        </Control>
    </Controls>
    
    <Mappings> <!--** Create only ONE Instance **-->
        <define name="MYNAMESPACE[n]" value="0" />
        ... 
        
        <GenericMappings> <!--** Create only ONE Instance **-->
            <Bank target="" name="">
                <ScrollBank target=...>
                    <Strip name="" onConnect...>
                        <ParamInvoke param="" options=""/>
                        <Value control="" param="" options=""/>
                        <Touch control="" param="" options=""/>
                        <String control="" param="" options=""/>
                    </Strip>
                </ScrollBank>
            </Bank>
        </GenericMappings>
        
        <Global> <!--** Create only ONE Instance **-->
            <Toggle control="" param="" options=""/>
            <Radio control="" param="" value="" options="" offvalue=""/>
            <Invoke control="" onRecieve=""/>
            <PlainValue control="" param=""/>
            <Value control="" param=""/>
            <Command control="" command.category="" command.name="" options=""/>
            
        </Global>

        <PadSection> <!--**create as many as needed**-->
            ..stuff..
            <foreach>
                <ParamVariant> </ParamVariant>
            </foreach>
        </PadSection>
        
        <DeviceMapping name="" device="" onConnect=""> <!--**create as many as needed**-->
        <!-- Other XML sections are allowed inside like -->
        <!-- include template="" -->
        <!-- Bank | PlacementBank | ScrollBank -->
        <!--    Target= RemoteBank | AllBank | FollowBank | MasterBank | FowardBank -->
        <!--    Strip | Foreach | ScrollButton -->
        <!-- ParamVariant | Group | Invoke | Value | ParamInvoke -->
        </DeviceMapping>

    </Mappings>
    
    <Templates>  <!--** Create only ONE Instance **-->
        <Template name=""> <!--**create as many as needed**-->
            <String control="" param=""/>
            <Value control="" param=""/>
            <Touch control="" param="" options=""/>
            <Radio control="" param="" value="" options="" offvalue=""/>
            <Variant control="" options="" statusled="">
                <Group>
                    <Relative control="" param=""/>
                </Group>
        </Template>
    </Templates>

    <Sections>
        <GenericSection name="" rows="" columns="">
            ..stuff..
        </GenericSection>
    </Sections>

</ControlSurface>```

Clone this wiki locally