What's new

CSS (Cinematic Studios) Control Panel - CSS/CSSS/CSB/CSW legato delay solution + other features (1.8, now with Winds!)

Ihnoc

Active Member
Hi,

This community is grand and has provided so many useful things for me. I have been tooling with a script to automatically offset the notes in CSS, based on what articulation you have set and I would like to share this with you.

A control panel for Cinematic Studio Strings, Cinematic Studio Solo Strings, Cinematic Studio Brass and Cinematic Studio Woodwinds that allows DAW based customisation.

Features
  • Ability to offset short notes, slow legato, medium legato and fast legato/marcato/trill legato individually, allowing all these note types to be triggered at the same time
    • This requires negatively offsetting the MIDI track by the Slow Legato speed, which is 330ms by default
    • Offset delay takes the slowest articulation (Slow Legato) and works out when to play faster articulations, making every articulation in sync
    • Note delay is controlled by CC, CC13 by default. Set the CC 0-64 to allow for playability, then set it 65-127 to force the note types to sync to the same time
    • Script responds to the same keyswitches and keyswitch CC messages as the instrument to equalise the timing
  • Ability to control short note velocity with a CC, CC1 by default
  • Ability to trigger major and minor trills with a single key
    • When enabled, setting the Keyswitch CC to 46-47 will force minor trills, while setting it 48-50 will trigger major trills
    • When enabled, pressing the Trills keyswitch with velocity 0-64 will force minor trills, while setting it to 65-127 will trigger major trills
  • Ability to auto-rebow (auto trigger CC64) when playing legato
  • Operates on a user defined channel, so you can run multiple scripts, one for each section
  • By default all settings are set up for the Violins, Violas, Celli and Basses as the default patches are saved
  • Options are available to set defaults for Strings, Trumpets, Brass or Winds
Update 1.8
  • Added support for Winds mode. Default delays for this mode are supplied as with Strings and Brass modes
  • Added a colour bar to indicate which mode the script it is in. It illuminates when the delay is active
  • Slightly re-arranged the UI to make it easier to understand
  • Fixed an issue where short notes at very fast tempo speeds would cut into the next note
Update 1.7
  • Added option to set the delay on the first note in a legato phrase. The default is 100ms, as with other long notes
  • Added options to set the script into Brass mode or Strings mode. In the Brass mode, the script will react assuming the instrument is from Cinematic Studio Brass instead. Default delays for Trumpets and the rest of the Brass, as defined in the manual, are available
  • Added an element that informs the user what track offset to set in the DAW in the top right
Update 1.6
  • Added option to toggle the delay on all of the time, if you never want to turn it off. The option to enable or disable delay by CC is still available
  • Added option to delay all CC data sent to the instrument as well as the keyswitch CC and notes. CC data is delayed by the same amount as the articulation playing. This results in better sync between things like modulation and notes
  • Updated the default delay speeds to match the documentation better: 330ms for slow legato/portamento, 250ms for medium legato, 100ms for fast legato/longs, 60ms for shorts
Update 1.5
  • Script now supports keyswitches as a method of input, along with keyswitch CC or any combination. Keyswitches can be moved in octaves, set to CSS defaults or changed individually
  • Updated UI with tabs to provide help, add more functions (like keyswitches) and make customisation easier
  • Added auto-rebow feature for legato (regardless whether delay is on or not)
  • Further improved timing of articulation switching when seeking and on articulations that trigger at the same time as a note
Update 1.4
  • Improved the accuracy of the articulation selection when a note is played or when CC123 (All Note Off) is received. This was sometimes resulting in the legato phrase being forgotten when the transport was stopped mid-way through a phrase or jumping between articulations
Update 1.3
  • Fixed an issue where the first note in a legato phrase would play before the beat
  • Locked the multi-script with a password to make it a bit more presentable. The password is "AVO"
Update 1.2
  • Fixed an issue where the first note in a legato phrase would be offset – it is not offset like other long notes
  • Fixed an issue where some values would sometimes not be cleaned up when the transport stops
  • Improved the delays applied to notes when switching from shorts to legato
Update 1.1
  • Fixed an issue where notes would always overlap, causing midi events on the same note not fire
  • Fixed an issue where some delays would not be set properly when a note was played
Requirements
  • Cinematic Studio Strings or Cinematic Studio Solo Strings
  • Kontakt 5.7
  • Must be set up in the Kontakt instance's script panel (the ‘KSP’ button in the top right)
  • Use of Keyswitch CC (instead of actual note keyswitches)
  • A bit of time to set up to your tastes
Limitations
  • I added a legato keyswitch which is user defined. This is to get around the issue that expression maps in Cubase don’t trigger the same CC twice. Regardless setting the keyswitch CC to enable or disable legato will be observed by the script
  • Since there is no function for converting note bytes to actual notes, I elected to keep them as numbers in order to release the script earlier. You can find out your key switches and re-assign them by shift-clicking on an articulation in CSS
  • The one note trills purposefully cull the harmony they make almost immediately after being played, but this can cause some issues with trills very close together. If you use this feature, I recommend playing trills where the upper note of the lower trill is a semi-tone away than the lower note of the upper trill
Alternate Versions
User @img has provided an alternate version of the script that supports multiple channels being delayed independently in one script. While there are no plans to support this officially in my version of the script, please take a look at their work and consider using it if you need a multi-channel version.

Download and Source
https://www.alexjevincent.co.uk/css-control-panel

Donations
  • I have been asked for ways to donate for use of the script, including libraries. While this is most appreciated, I am lucky to have a full time job and money to spend on such things
  • Instead, please consider putting that money to causes that matter to you - helping our planet, its species or perhaps those homeless, in need of medical care or research. And if not, consider helping yourself by saving that money and buying that library, software or hardware you wanted
All the best,
Alex Vincent (Ihnoc)
 
Last edited:
I was looking for a way to map short velocities to CC. Will try it later today. Very excited :)
You can set this in isolation - you don't need to use the track delay or trills to use it. Please keep in mind that the script requires you to use Keyswitch CC to know if you have 'shorts' selected. The reason for this is to make sure the attack of longs or legato speed are maintained.
 
I struggled at first before understanding it is a multiscript, and not a single script. Once correctly loaded, it worked fine. I created a line for CC58 major trills @48 in Reaticulate (articulation management system in Reaper), and it's just a cream. Thanks for sharing your work :)
 
Note delay is controlled by CC, CC13 by default. Set the CC 0-64 to allow for playability, then set it 65-127 to force the note types to sync to the same time

I don't understand this parts.
Can you little more specific about CC13 value on 'first note' and 'second slow,mid,fast note' ?
 
With CC 0-64, the delays don't compensate, so it's more playable, whereas when delays are compensated to sync, you have kind of a big latency while playing.
 
I struggled at first before understanding it is a multiscript, and not a single script. Once correctly loaded, it worked fine. I created a line for CC58 major trills @48 in Reaticulate (articulation management system in Reaper), and it's just a cream. Thanks for sharing your work :)

Correct. You can change the Keyswitch CC from 58 to whatever you like in CSS, so I made sure you can do so in the multiscript too.

I had to make a multiscript because CSS is a locked instrument, unfortunately.
 
Note delay is controlled by CC, CC13 by default. Set the CC 0-64 to allow for playability, then set it 65-127 to force the note types to sync to the same time

I don't understand this parts.
Can you little more specific about CC13 value on 'first note' and 'second slow,mid,fast note' ?

By default CC13 controls whether you delay notes when you play them, which is the Delay CC. You can change this CC to something else (like CC74 or whatever is best for you). The value of this Delay CC is checked before playing any note. This is the primary function of the script and is available to allow you to say whether you want to delay notes or not:
  • If the value is 0-64, then notes will not be delayed
  • If the value is 65-127, then notes will be delayed by the amounts specified as 'Shorts', 'Slow', 'Medium' and 'Fast'. I put the defaults for these as 60ms, 300ms, 200ms and 100ms as suggested by the CSS manual but you might find better values
I personally set the Delay CC (CC13 by default) to something low when I am playing in notes, then set it high for playback.
 
hi
sorry but I m not much use to scrips in Kontakt and i have few basic questions
so what I did is a load this on multiscript and click on apply button
so after this should work but what I m not understand is about the setup of the scrip
I put on my channel to -300 ms delay i load a CSS instrument so when the daw playback the midi the scrip ill automate the delay ms depend on the velocity of notes?
when I using this script I cant use the key switch way I have to use the cc 58 to change articulation?
when I do playback even with the cc13 on 0 the short notes still have a delay a doesn't fit with the click only reduce the delay when I playing live?
thanks
 
Yes, you have to use CC58 to switch articulations with this script. If you use Cubase, Reaper, or Logic, it should not be difficult to map.

To compensate the delay you have to put CC13 in the 65-127 range. You may have to nudge the first note (just the first) of a legato line, all the rest should fit.
 
hi
sorry but I m not much use to scrips in Kontakt and i have few basic questions
so what I did is a load this on multiscript and click on apply button
so after this should work but what I m not understand is about the setup of the scrip
I put on my channel to -300 ms delay i load a CSS instrument so when the daw playback the midi the scrip ill automate the delay ms depend on the velocity of notes?
when I using this script I cant use the key switch way I have to use the cc 58 to change articulation?
when I do playback even with the cc13 on 0 the short notes still have a delay a doesn't fit with the click only reduce the delay when I playing live?
thanks

If you are having problems, it is most likely because I haven't explained it very well. Leaving the One Note Trills and CC Controlled Shorts to the side for the moment, there are two things to need to get a hang of:
  1. Whether you want to delay notes (CC13)
  2. How much notes are delayed by (CC58 and some other numbers)
Whether you want to delay notes
The script decides whether to delay notes or not by the 'Delay CC', which is CC13 by default:
  • If you set this low (0-64), notes will not be delayed
  • If you set this high (65-127), notes will be delayed
This Delay CC is available so you can easily turn off the Delay, if you need to play something in.

How much notes are delayed by
The script decides how to delay incoming notes based on the following criteria:
  • What the last value of CC58 was that was sent
  • What the velocity of the incoming note is, if CC58 is in the legato range
  • What the millisecond values of the Slow/Medium/Fast/Shorts delay are
This Keyswitch CC is available so the script knows which delay to use for which articulation.

Example

If CC13 is 64 or below, nothing else happens. If it is 65 or above, one of the four below happens:
  1. If CC58 is set to ranges for spiccato/staccato/sforzato/pizzicato/col legno etc., then notes after that are delayed by the Shorts delay
  2. If CC58 is set to Marcato or Trills, those notes are delayed by the Fast delay
  3. If CC58 is set to ranges for legato, the incoming note is checked for its velocity. Lower velocity will use the Slow delay, middle velocity will use the Medium delay and high velocity will use the Fast delay
  4. If CC58 is set to something other than an actual articulation (like turning Con Sordino on and off), the script carries on with whatever the last articulation was
 
Updated the script to 1.1:
  • Fixed an issue where notes would always overlap, causing midi events on the same note not fire
  • Fixed an issue where some delays would not be set properly when a note was played
 
Updated the script to 1.2
  • Fixed an issue where the first note in a legato phrase would be offset – it is not offset like other long notes
  • Fixed an issue where some values would sometimes not be cleaned up when the transport stops
  • Improved the delays applied to notes when switching from shorts to legato
Get it here: https://alexjevincent.co.uk/css-control-panel/
Your feedback is appreciated as always!
 
Can someone provide a detailed guide on how to use this in Studio One? I don't know how to apply the script in Kontakt and/ or how to use it....
 
Can someone provide a detailed guide on how to use this in Studio One? I don't know how to apply the script in Kontakt and/ or how to use it....

Hey. It looks like StudioOne supports track offsets. You need version 3.5 or above to support delays over 100ms (apparently). Please understand my explanation is based on the fact that I don't use StudioOne at all so it may be condescending - my apologies
  1. First download the nkp file. Place it in \Documents\Native Instruments\Kontakt 5\presets\Multiscripts. This is usually C:\Documents\Native Instruments\Kontakt 5\presets\Multiscripts if you're on Windows 10
  2. Open StudioOne and create an instrument track with Kontakt on it
  3. Set the delay on the track - select a track and press F4 to open the inspector ala
  4. In the delay field type '-300'
  5. Open Kontakt itself and click the 'KSP' button in the top right. A new panel will appear
  6. Click 'Preset' in the top left of the pane, then 'User' and then the script's name. The script should appear
  7. You can click the 'Edit' button at the bottom to hide the code since you can just use the UI to change the parametres
  8. Load an instance of CSS Violins on channel 1
  9. Now you need to send some CC13 information to that instrument, either with your midi keyboard or just by drawing it in the midi editor in StudioOne. This turns the delay functionality on. Set it over 65
  10. Play some notes and observe that those notes are now being delayed
  11. Send some CC58 information to select the articulation you desire as per the CSS manual and the multiscript will get that as well. It will automatically set the note delay based on the articulation you select. You MUST use CC58 and not keyswitches to change the articulation
  12. Set CC13 back down below 64 to turn off the delay and play things in
  13. In the KSP panel again, click the second tab and then 'Preset' and 'User' and the script name as before to load another version of the script
  14. Load Violins 2 on channel 2
  15. In the KSP panel, change the Input Channel to channel 2
  16. Now Violins 2 will also be delayed, but by the values on the second tab instead

That's basically it. If you decide to use a different CC to turn on the delay or change articulation, you can adjust that in the KSP panel.

Please let me know if I can help any further.
 
Last edited:
Hey. It looks like StudioOne supports track offsets. You need version 3.5 or above to support delays over 100ms (apparently). Please understand my explanation is based on the fact that I don't use StudioOne at all so it may be condescending - my apologies
  1. First download the nkp file. Place it in \Documents\Native Instruments\Kontakt 5\presets\Multiscripts. This is usually C:\Documents\Native Instruments\Kontakt 5\presets\Multiscripts if you're on Windows 10
  2. Open StudioOne and create an instrument track with Kontack on it
  3. Set the delay on the track - select a track and press F4 to open the inspector ala
  4. In the delay field type '-300'
  5. Open Kontakt itself and click the 'KSP' button in the top right. A new panel will appear
  6. Click 'Preset' in the top left of the pane, then 'User' and then the script's name. The script should appear
  7. You can click the 'Edit' button at the bottom to hide the code since you can just use the UI to change the parametres
  8. Load an instance of CSS Violins on channel 1
  9. Now you need to send some CC13 information to that instrument, either with your midi keyboard or just by drawing it in the midi editor in StudioOne. This turns the delay functionality on. Set it over 65
  10. Play some notes and observe that those notes are now being delayed
  11. Send some CC58 information to select the articulation you desire as per the CSS manual and the multiscript will get that as well. It will automatically set the note delay based on the articulation you select. You MUST use CC58 and not keyswitches to change the articulation
  12. Set CC13 back down below 64 to turn off the delay and play things in
  13. In the KSP panel again, click the second tab and then 'Preset' and 'User' and the script name as before to load another version of the script
  14. Load Violins 2 on channel 2
  15. In the KSP panel, change the Input Channel to channel 2
  16. Now Violins 2 will also be delayed, but by the values on the second tab instead

That's basically it. If you decide to use a different CC to turn on the delay or change articulation, you can adjust that in the KSP panel.

Please let me know if I can help any further.


Thank you very very much.
 
Top Bottom