About
CWP2Song is a command line utility (Windows/Linux) to convert "Cakewalk Sonar" (v6+, X, Platinum) and "Cakewalk by Bandlab" DAW projects (.cwp extension) into Presonus Studio One Pro (v6+) DAW projects (.song extension). Please note there is no plans to support "Bandlab Sonar" (new commercial version) nor "Bandlab Next" created projects.
The program is developed for Sonar X2 - CbB generated files, but theoretically can work with older versions. For the list of currently converted parts of the project, see "Features" post later.
The utility is closed source but free to use (see included into package License file for details).
You can
donate (https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VD3J8M7MFBAG4) to support CWP2x project(s). Please note that you do not buy a license nor any special service doing that. The software is provided "as is", without any promises.
Intention
Primary purpose for this utility is to continue mixing Cakewalk projects in Presonus Studio One (you have changed the DAW you use but you have many projects done in Cakewalk, you prefer mixing in Studio One, you want give your project to someone who use Studio One, etc.).
The resulting sound can not "null", except when the project is specially prepared for that. If you don't use Cakewalk specific plug-ins and unsupported features, the sound should be "reasonably similar". The difference may vary from project to project and comes from different processing algorithms and inaccurate parameter conversion (values for the same parameters, even when shown the same to the user, are rarely mathematically the same in different DAWs). That is expected and can't be avoided.
Far from everything is converted, some parts are converted partially on not precise. That is not a bug, but feel free to make Future Request, except when the feature is already mentioned as "not implementable" (f.e. when Studio One is not supporting something, there is no sufficient information in .cwp, etc.)
Credits
Bapu has asked to develop, sponsored required software and tested the project.
Changelog
16.10.2024 - 0.1r0b32, the first public beta
From my best knowledge, I have not violated any part of Cakewalk / Presonus EULA during the development. In particular, I have NOT debugged, reverse engineered, etc. anything from licensed packages. The program was written solely based on the CWP and SONG (my own and provided by users projects) files content observation. These files are not encrypted (at least in parts which I parse), use well known primitive binary or text data representations and aggregated construction from these primitives. I have not found any evidence of innovative technologies for data persistency in these files. I extract the information which user can provide manually in both DAWs, the converter is just an accelerated method to transfer user's owned data out of particular format into different format.
What I do is from my knowledge legal, at least in EU (where I am).
Since by using this program the user just accelerates the procedure he/she is (legally) allowed to perform, I do not think using the program can violate EULA in any country
Cakewalk and Sonar are registered trademarks of BandLab Singapore Pte. Ltd.
Studio One is a registered trademarks of PreSonus Software, Ltd.
VST and VST3 are registered trademark of Steinberg Media Technologies GmbH
[glow=blue,2,300]Installation[/glow]
- You don't need Cakewalk or Presonus software installed on the computer to run the converter (f.e. you can run it on different computer or in virtual machine)
- download CWP2Song (http://www.azslow.com/index.php?action=downloads;sa=downfile&id=99). Many anti-viruses think that ANYTHING compiled by GCC and/or not signed is a virus. I can only guess the reason and intention. But I can do nothing against that (mis)behavior..
- unpack into any directory, if you don't want specify compete path to the executable every time, add the path to OS specific executable (for Windows that is _win32 sub-directory) into OS specific system path list
[glow=blue,2,300]How to use[/glow]
For Windows. Open command line (cma), run:
<path to executable>\cwp2song.exe <path to the project>\<project name.cwp>
If cwp2song.exe is in system path list and you "cd" into directory with the project in question, you can run
cwp2song <project name.cwp>
Note in case the project name has spaces, you need to quote it.
The converter will try to create the file <project name.song> in the same directory as original project file. So it should be writable for current user.
It is not required to have related audio files available, but in some cases the resulting .song may be incorrect. The utility will warn when it can't find audio files or they have unsupported (by utility) format.
Note the output from the utility, if you see any line prefixed with "B:" (bug) or "E:" (error), the result is at least incomplete, broken or will not be created at all.
Please report such cases to the developer (if the reason is not obvious, f.e. you don't have write permission to the directory, you have specified not existing file name,
there is no space on the disk, etc.). Prefixed with "W:" (warning) or "U:" (not implemented or unknown) lines report something (not critical) is not or can't be converted.
WARNING: Do NOT convert CWP projects in place where you used them in Cakewalk. Make a separate copy of the whole project, including ALL ASSOCIATED AUDIO FILES. The converter will not modify CWP file itself, but all related audio files are accessed directly. Studio One is free to modify/delete audio files related to the project.
In some projects, for which "Always copy imported audio files" and/or "Use per-project audio folder" was not set, the project can reference original locations. Please be extremely careful in this case.
After you open .song in Studio One and BEFORE you modify it, all files are safe. To be on safe side, open "Song"/"Copy external files..." dialog and confirm the operation (it will say it has nothing to do if there is no external files in use).
If you ignore this warning, it can happened you WILL BE UNABLE TO OPEN ORIGINAL PROJECT IN CAKEWALK.
Abbreviations
To make the text shorter, I use several abbreviations:
- CW - Cakewalk Sonar or Cakewalk by Bandlab.
Specific versions are abbreviated as:
- S<number> - Sonar version <number> (pre Sonar X1)
- X1-X3 - Sonar versions X1 - X3
- Splat - Sonar Platinum
- CbB - Cakewalk by Bandlab
- S1 - Presonus Studio One
- AZ - when I call something not the same way as in CW nor S1 or I have no idea how it is really called in CW (.cwp is a binary file, structures which don't have direct named representation in the GUI are guessed).
- R - Cockos REAPER. CWP2Song is written using ReaCWP code-base, so I may mention it from time to time
Terms
Most DAWs I know call the same (or similar) objects and operations differently. To simplify reading and avoid misinterpretation, I mark such terms. F.e.:
- "Clip" (CW), "Event" (S1), "Item" (R)
Project:Projects structure in S1 is similar to CW.
- Project Options are saved as "Metadata" (S1).
- Both DAWs are Timeline oriented ("tape machine" like), the content is ordered into single continuous Timeline.
- Both DAWs use different "Strip" (AZ) types (unlike in R, where all Strips are Tracks (R)):
- Tracks (Audio and "MIDI" (CW) / "Instrument" (S1)) and Buses are almost equivalent in both DAWs
- "Synth Output Track" (CW) / "Instrument Output Channel" (S1) have a bit different logic
- "Patch Point" (CW) does not exist in S1, but can be matched (S1, unlike CW, support routing of Channel outputs to any Audio Track Input)
- "FX"/"VCA"/"Aux" Channels (S1) do not exist in CW ("AUX Track" (CW) is to record "Patch Points" (CW), while "Aux Channel" (S1) is to route external Audio). And so they are outside of this converter interest
- Both DAWs have a dedicated "Synth Rack" (CW) / "Instruments Rack" (S1) for Synth (CW) / Instrument (S1) plug-ins
- The content of Tracks in both DAWs is a set of "Clips" (CW) / "Events" (S1) of corresponding type (Audio or "MIDI" (CW) / "Part" (S1)), located on "Take Lanes" (CW) / "Layers" (S1)
- Most parameters of Strips (AZ), Synths (CW), FXes and Clips (CW) can be automated and edited on "Automation Lanes" (CW) / "Envelopes" (S1) in the Track View
Can not be converted (not exist in S1 or I do not know how to convert):
- "Matrix view" (CW). I have not found anything similar in S1. Technically, related content is possible to put into some Tracks, to re-use after conversion, but currently that is not planned.
Metadata:Converted:
- Sample rate. CW projects are strictly bound to particular sample rate (till the project is MIDI only, it can't be changed). In S1 it is possible to change Sample Rate at any time (nothing in the project is specified in samples)
- Project tempo. It has no technical meaning in both DAWs, even so exist in S1 Metadata. Real tempo is specified by tempo envelope.
- Time signature. The same as with Project tempo.
Not converted yet:No plans to convert:
Timeline:Converted:
- Tempo changes (CW) as Tempo Envelope (S1)
- Key signature changes
- Markers
No plans to convert:
- Groove Pitch (CW). It is applied as Transpose and Tune (Audio) when appropriate.
- Key signature (CW). S1 has it, so I can reconsider (if that make sense for someone)
- Arranger Track (CbB). S1 has it, so I can reconsider (if that make sense for someone)
Can not be converted (or I do not know how):
- In S1 tempo limits are 10bpm up to 400bpm. In CW tempo limits are 8bpm up to 1000bpm.
Comments (difference in behavior and conversion decisions):
- CW in X and early had discrete tempo changes. In CbB there is "Tempo track". So in CbB it is possible to draw tempo changes as curves. For the reason explained in Envelopes section, it is not possible reproduce not linear curves exactly. And even for linear, it is unclear if S1 and CW will interpolate the curve the same way (f.e. I have observed changes every beat, then 4 times per beat in CW, as the result from one linear tempo ramp). So I convert as discrete tempo changes, which should work exactly the same way in both DAWs.
- Markers, as Clips (CWP) can't have own time-base in S1 (in fact for Markers there is such parameter... but it was not working as expected in my tests and I haven't found a way to make it such in UI). So all markers are converted with Time-base Beats (S1)
- S1 has special marker called "Start" at (surprise...) start. In can be moved, but not renamed. If CWP project has other marker at start, it will "loose its name". Special marker "End" is placed after the last marker (or on fixed default position).
- with "-m" option, "MIDI/tempo.mid" file is created with Project Tempo and Signature changes
All Strips (AZ):Converted:
- Implicit names are converted using CW naming convention, to allow direct match in case the order is different
- The order of Tracks and Buses is preserved, Track Folders are converted.
- Mute
Comments (difference in behavior and conversion decisions):
- S1 doesn't display Buses and Instrument Output Channels (S1) in the Content View (AZ) till they have Envelopes (S1). And till they are in the Content View (AZ), they can't be controlled with Track Inspector (S1)
Audio Strips (AZ) / Channels (S1):For Audio Tracks, Buses, Synth Output Tracks (CW) / Instrument Output Channels (S1)
Converted:
- See 'All Strips' (AZ) sections for common converted features.
- Output. Note that output should point to convertible destination (Bus, FX Side-chain Input, Patch-Point (CW) once implemented). In case it is originally "None" or point to extra Hardware Output, it will be set to Primary Hardware Output. In S1 Output is always defined (it can't be 'None')
- Sends. With "Post Fader" (CW) / "Prefader" (S1) and "Off" (CW) / Activate (S1) flags, Level (S1) and Pan values.
- FX Bin (CW) as Inserts (S1).
- Volume, Pan, Input Gain and Invert Phase
Not converted (yet):
- "Follow track pan" (CW) / "Lock Pan to Channel" (S1) Send flag
Can not be converted (or I do not know how, or difficult):
- Pan Law. S1 supports just one, CW may be set to different (ToDo: warn the user). Theoretically it is possible to adjust, but then Volume and Pan have to be changed on any change of one of them, also in Envelopes (S1). So till someone really need that, I leave them not adjusted.
All Tracks:Audio, AUX(CW) / Audio (S1) and MIDI (CW) / Instrument (CW) Tracks.
Converted:
- See 'All Strips' (AZ) section for common converted features
- Take lanes (CW) as Layers (S1)
Can not be converted (or I do not know how):
- Time-base and Tempo mode (S1) are specified per Clip in CW. When all Clips (CW) on the Track use the same settings, they can be converted into Track wide settings. But when any Clip has different setting, the result will be inconsistent and I think confusing. I set Tempo "Timestretch" ("Follow" for Instrument Tracks (S1), with the same effect) which imply Beats time-base. User can adjust the setting quickly after conversion (f.e. select all tracks and set "Follow").
Comments (difference in behavior and conversion decisions):
- Take Lanes (CW) are not exactly Layers (S1), there is no "auto-promotion" on Clip (CW) level, only one Layer (S1) is active and "promotion" means duplication into it. So an extra Layer (S1) is created and set to be Active, if no single Lane (CW) can take this role (so there are not muted Clips (CW) on more then one Lane (CW) or there are muted Clips (CW) there).
Buses:Converted:
- See 'All Strips' (AZ) and 'Audio Strips (CW) / Channels (S1)' sections for common converted features
Can not be converted (or I do not know how):
- Buses have "Input Pan" parameter in CW. That doesn't exist in S1 (theoretically can be replaced by extra panning FX).
Comments (difference in behavior and conversion decisions):
- Buses in S1 are not initially displayed in the Content View (AZ) and so configurable in the Console (S1) only. Once any Envelope (S1) is created, Bus is also visible in the Content View (AZ) and Track Inspector (S1)
Audio Tracks:Converted:
- See 'All Strips' (AZ), 'Audio Strips (CW) / Channels (S1)' and 'All Tracks' sections for common converted features
- Tempo mode is set to "Timestretch".
- Frozen (CW) Tracks are converted as Disabled (S1). Additional Tracks with rendered content are added
Can not be converted (or I do not know how):
- Frozen Tracks (CW) have no direct equivalent in S1. The closest feature in S1 is "Transforming". But Transformation always done per Part/Event (S1) and resulting Events are at the same position as original. So it is not possible represent freezing results as transforming results. Note that transforming happens post-fader, while freezing pre-fader or pre-fx (that could be mapped).
Comments (difference in behavior and conversion decisions):
- Default Track time-stretch algorithm is "Drums" (S1). If you have any content which requires stretching (including grooved loops with different tempo and/or pitch), it can be good idea check to "Sound" or "Solo". Note that CW (CbB) can use the same (Elastique) algorithms, but also supports other methods. The sound after stretching in most cases will be different.
MIDI (CW) / Instrument (S1) Tracks:Unlike CW and R, S1 is not using MIDI format for Instrument Tracks content. So they are technically not MIDI tracks, even so they are used for the same purpose.
Converted:
- See 'All Tracks' sections for common converted features
- MIDI Tracks (CW) as Instrument Tracks (S1).
- Outputs to Synths (CW) / Instruments (S1). See Comment (1)
- Time-base Beats (S1). Tempo mode "Follow". See 'Can't be converted' in 'All Tracks' section.
- Key (CW) / Transpose (S1)
- MIDI Volume, Pan, Chorus and Reverb. See Comment (2)
No plans to convert:
- Route Synth (CW) MIDI output as Instrument Track (S1) Input
- Track Gain (Velocity) (CW). It is specified as absolute Note velocity change, while in S1 it is relative (%). I can apply to all notes, but that is destructive.
- Program/Bank (may be possible for Instruments which allow that)
Can not be converted (or I do not know how):
- CW supports DX MIDI effects only. They are not supported by S1. Currently all MIDI effects are ignored.
- Single MIDI Track with several instruments for multi-instrument Synth (CW) is not possible convert reasonably. See Comment (2) in the Synth Rack (CW) section.
- Arpeggiator
Comments (difference in behavior and conversion decisions):
- Instrument Input Event Stream (S1) is selected based on explicit Track MIDI Channel setting (CW), MIDI Channel is the first channel event in some MIDI Clip (CW) on the track or the first (in that order).
- S1 has no Volume/Pan/etc. controls for Instrument (S1) Tracks. In CW these are MIDI CC controls (Volume - 7, Pan - 10, Chorus - 93, Reverb - 91). CW sends values, including default, if corresponding control was ever touched. So single point envelopes can be created even for default values. Technically that is done using dedicated "Track envelopes" Part (S1), see Comments in Envelopes section why Track Envelopes (S1) can't be used for that.
Synth Output Tracks (CW) / Instrument Output Channels (S1):Converted:
- See 'All' and 'Audio' Strips (AZ) / Channels (S1) sections for common converted features
- See Synth (CW) / Instrument (S1) section for assigning logic
- Frozen (CW) Tracks are converted as Disabled (S1). Additional Tracks with rendered content are added
Comments (difference in behavior and conversion decisions):
- Instrument Output Channels (S1) are not initially displayed in the Content View (AZ). Once any Envelope (S1) is created, they appear in the Content View (AZ) / Track Inspector (S1)
- When some Envelope (S1) is created, Instrument Output Channel is normally "merged" in the Content View (AZ) into something similar to "Simple Instrument Track" in CW. So Envelopes (S1) for the Channel (S1) and Instrument (S1) tend to be attached to related Instrument Track (S1). Converter always create a separate Automation Track (S1) for all related Envelopes (S1) (which S1 also create in case there are no Instrument Tracks (S1) with output to related Instrument (S1)).
AUX Tracks (CW):
Aux tracks - in CW Patch Points don't have "output", so an input from Patch Point is not leaking to somewhere. In S1 strips always have output. So if we use strip (including dedicated) as a Patch Point it will leak. How to proceed? F.e. add "Silent" Audio bus and set output of all (including implicit) Patch Points to it.
Synth Rack (CW) / Instrument Rack (S1):Converted:
- Synths in the Synth Rack (CW) as Instruments in the Instruments Rack (S1)
- Outputs from MIDI Tracks into Synth (CW) are routed as outputs from Instrument Tracks into Instrument (S1). MIDI channel (CW) to Event Stream (S1) is converted using "best effort", in case not explicitly specified as forced Channel for MIDI Track (CW). See Comment (2)
- Audio Tracks with Input from Synth (CW) as Instrument Output Channels (S1). See Comment (1) and section about Instrument Output Channels (S1)
- Synths in FX Bin (CW) as Inserts with Music Input (S1):
- Normally that is used for FXes with MIDI inputs (f.e. Guitar FX with MIDI pedal controller) in CW as well. But CW still list the plug-in in the "Synth Rack" (CW). In S1 such plug-ins stay just as Insert (S1).
- S1 does not allow normal Instruments (S1) as Inserts (S1) (not listed, not allowed to drag&drop). But if already in the project, S1 somehow tolerate that. So when converted from .cwp, the result looks like in CW (ToDo: check if it really works correctly)
- See FX section for supported plug-in formats
- Frozen Synth (CW) are converted as Disabled (S1). Corresponding outputs are duplicated as Audio Tracks (S1) with rendered content.
Not converted (yet):
- MIDI channel deduction in case not specified explicitly for Track (currently the first stream / channel is forced)
No plans to convert:
- Route Synth (CW) MIDI output as Instrument Track (S1) Input
Comments (difference in behavior and conversion decisions):
- CW supports arbitrary Synth(CW) output channels assignment, based on the number of reported output channels (pins are used as a hint). S1 strictly follows reported by Instrument (S1) pin information, including mono/stereo pins. Also (at least in current version) the pin map in the Project is ignored once plug-in is available. As the result, some output assignments may be wrong after conversion (especially sparse assignments, with intermediate channels skipped, for plug-ins which define mixed Mono/Stereo output pins).
- CW defines just one "MIDI input" for Synth (CW). This MIDI Input accepts most MIDI messages, with any MIDI Channel. S1 does not define "MIDI channel" in the content (the content is technically not MIDI). It follows reported by plug-in MIDI pins definition, with fall-back to 16 event streams (which then technically used as 16 MIDI channels). Each stream is then assignable as an output from Instrument track (has the same meaning as setting Channel for CW MIDI Track). Converter assigns the first MIDI channel used in the content to define output stream when MIDI Channel for the Track is not set explicitly. That can produce wrong results if plug-in is channel aware are the content originally use several MIDI channels
- As explained in Audio Tracks (CW) section, Frozen Synth has no direct equivalent in S1. Transformation (S1) comes close, but done per Part
FX:Converted:
- VST3 64bit plug-ins. Presets are saved in .vstpreset format.
- VST2 64bit plug-ins. Presets are saved in .fxb format (for most plug-ins I don't have hints to select .fxb or .fxp, so .fxb may be wrong way for some plug-ins)
- Routes to Side-chain inputs
- ProChannel EQ (CW) as Pro EQ (S1). Parameters are not tuned (especially Q, it seems like it should be Gain dependent during conversion). Envelopes are not supported.
- ProChannel Compressors (CW) and Compressor (S1). See "Can't be converted" comment for details.
Not converted (yet):Can not be converted (or I do not know how):
- S1 does not support DXes nor 32bit VSTs. ProChannel modules are not available in any other DAWs. So direct conversion can't be supported. For particular plug-in it is theoretically possible to convert its preset into preset for different plug-in, available in the target DAW.
- ProChannel compressors (CW) have different set of parameters as features then Compressor (S1). I have not found 1176 (PC76) and 4000 (PC4K) parameters in standard P plug-ins, do the result of conversion is just a hint there is a compressor... Attack, Release, Ratio and Mix have "correct" values, but Threshold / (Input/Output) Gain are wrong.
Comments (difference in behavior and conversion decisions):
- When VST2 and VST3 versions of the same plug-in are installed, S1 automatically migrates VST2 into VST3 when it thinks that is possible (from my knowledge that behavior is not configurable). VST2 is completely disabled (like it is not installed) in this case. Unfortunately, S1 has not managed to migrate at least some VST2 I have tested, as the result reporting "not found" for the plug-in. Currently the only way to "find" such plug-in is removing (moving to not scanned location) VST3 version and re-scan VSTs (I have not found simpler way then set "scan on startup" and restart S1). It can happened that re-saving the Song from S1 can help with migration, at least with some plug-ins, but that is not intensively tested yet (the plug-in I have tested failed to migrate even when the project was created in S1).
- Disabled plug-ins not always can be re-enabled, even so the same plug-in can be loaded fine if not disabled. That is a problem for Frozen (CW) tracks. I guess that has something to do with different UID (so when plug-in is not exactly the same as it was), which is handled differently on project load (more "backward-compatible"?) and at run-time. No workaround for the moment.
Audio Clips (CW) / (Audio) Events (S1):Converted:
- "Audio Clip" (CW) as "Audio Event" (S1)
- Position is defined in Beats, the length is in Seconds (not looped Clips (CW)) or Beats (looped Clips (CW). See 'Can't be converted' in 'All Tracks' section.
- Mute, Time Lock, Edit Lock
- "Snap offset" (CW) as "Sync point" (S1)
- "Stretch Amount" (CW) as "Speed" (S1) only. Slices (AudioSnap edits) are ignored. See the Comment (1) for Audio Tracks
- "Loop" Grooved Clips (see 'Can't be converted'). They will be time-stretched and pitch-shifted according to the looping settings, including "Follow pitch"/"Pitch"/"Fine Pitch" (CW). "Follow pitch" (CW) is not converted as such, it is just added to "Transpose"/"Tune" (S1). See Comment 2.
- "Fade In/Out". When curved, "Slow"/"Fast" (CW) as "Logarithmic"/"Exponential" (S1). Not precise, see 'Can't be converted'.
- Gain envelope. Converted for not looped Clips only.
- Clip FX (CW) as Event Effects (S1).
No plans to convert:
- "Stretch to tempo" is not supported (that is the second automatic stretching mode, apart from loop, I have never used it)
- Gain envelope for looped Clips. In S1 Gain envelope is technically for file reference, not Event (S1). Technically it is possible to split original envelope and apply parts to duplicates.
- Event FX (S1) on duplicates after looped Clip (CW) conversion. Doing so can catapult the number of FX instances.
Can not be converted (or I do not know how):
- S1 doesn't support looping. In all sourced I could find, it is recommended to duplicate instead. Normally followed by "Merge". Let me know if "auto-merging" unrolled events is a good idea.
- When Fade-In/Out cross looping point in the original Clip (CW), that can't be represented exactly in S1. Fade length will be "cut".
- There is no "Clip trimming" in S1. See Comment (1).
- In CW Fades are quadratic, in S1 they are parametric exponential. So they can't match exactly, I have selected some value which looks "ok" for me. Let me know if you think that can be improved.
- Follow Pitch (CW) for Grooved clips, when Groove-Clip Pitch change happens inside clip. I apply it as Transpose (S1), which has no Envelopes.
- In S1 only Gain envelope is possible on Event (S1) level. So Clip Pan and Clip FX parameters Automation (CW) can't be converted.
Comments (difference in behavior and conversion decisions):
- Clip trimming is not the same as trimming during editing, so non-destructive change of clip boundaries. In CW that means the clip size is "bounced" (audio file stay the same), so future boundary changes do not "see" audio outside trimmed slice. When trimmed Clip parts are for some reason exist in the project, they are silent in CW but will have usual content in S1. I had to decide to move clip boundaries to trimmed section or keep the same boundary and allow trimmed parts re-appear. For the moment I use the second approach.
- Groove-Clip (CW) is duplicated at loop points, but the behavior is the same (tempo changes are applied as in CW). Note the Track should stay in "Timestretch" Tempo mode (S1). Unlike other content (including manually stretched), when Tempo mode is changed, the Event length will be reverted to original (not stretched) audio length.
MIDI Clips (CW) / (Instrument) Parts - Music Events (S1):Converted:
- Time-base and length are always in Beats (S1), with "Follow" Tempo mode (S1) set for the Track. See 'Can't be converted' in 'All Tracks' section.
- Unrolled versions of looped Clips (CW). See Comment (1)
- Notes. CW and S1 are using "Time + Duration" to specify notes (MIDI specify them by On/Off). When previous note ends exactly at the same time as the next note start (rarely the case in recording, but usual for editing with mouse), the order of Off/On may influence some Synths (CW) / Instruments (S1) which use the order to detect "Legato". I have not tested yet if S1 produce the same order as CW is that case.
- CCs. That includes "specially named", like "Modulation wheel" (CC1), "Sustain pedal" (CC64), etc.
- Pitch wheel
- Lyrics. I have not intensively tested the logic is the same.
- Key After Touch (CW) / Pressure (S1) and Channel After Touch.
- Program Changes. Without setting the bank, and with "duplicated" old value. See "Can't be converted".
Partially converted:
- Step Sequencer Clips (CW) are converted as Parts (S1), with original length but not unrolled. The intention is simplify (manual) replacement with Pattern (S1). Automatic conversion into Pattern (S1) is currently not planned
No plans to convert:
- Note Pitch adjustment on Groove-Clip Pith (CW) changes for Grooved Clips with Follow Pitch set, when the change happens inside Clip. Technically possible to adjust per Note.
- Text, MCI, Expression, Music symbols, Chords
Can not be converted (or I do not know how):
- CCs, PitchWheel, etc. MIDI events are represented by Envelopes in S1. "Step" nature of MIDI events can't be reproduced that way. The sound in most cases will be different. Technically S1 supports "step" MIDI envelopes, that can be specified and displayed as such. But S1 unconditionally use target Instrument information about parameter type, so in most cases it "reverts" to linear Envelope if step type was specified (without adding extra points, so the result is completely different).
- SysEx messages are not supported in S1
- "Bank change", "RPN" and "NRPN". Apart from explicitly supported MPE, any "MIDI command" which use more then one MIDI message can't be reliably represented in S1. CCs (which are used to compose these "commands") are envelopes in S1, so strict sequence of particular values from "different" CCs is almost impossible to achieve (if there is no "old" value, S1 will "follow" non horizontal envelope, if there is "old" value it will be interpreted wrongly).
Comments (difference in behavior and conversion decisions):
- S1 does not support looped/grooved (CW) clips. But CW store unrolled version in the project (since repeats can be edited independently).
- Envelope (S1) parameter name is prefixed with "(CW)". Once S1 find target parameter, it overwrites the name. That way it is easy to check if some Envelopes (originally CCs/etc.) are not doing anything.
- With "-m" option, MIDI files for each Clip (CW) are created in addition to S1 specific Music files. These files contains original information (channels, SysEx, etc.) which can't be specified in Music files.
Automations (CW) / Envelopes (S1):Converted:
- Audio Channels Envelopes (S1): Volume, Pan, Mute, Send Level, Send Pan, Inserts
- Instruments (S1)
- MIDI Track Automation (CW) as dedicated Part with Envelopes (S1). CC and Pitch wheel (CW) only. See Comment (4) for details.
Partially converted:
- "Slow"/"Fast" (CW) segments are converted as "Exponential" (S1) segments. Currently semi-random Bend parameter is used (5). That probably need tuning.
Not converted (yet):
- Audio Events (S1): Gain, Pan, Effect parameters
Can not be converted (or I do not know how):
- S1 does not support Input Gain Envelopes (S1) (Input Gain and Input Pan Automations (CW) exist in CW).
- Curved segments of Automations (CW)/ Envelopes(S1) use different functions and so never produce exactly the same intermediate values. In CW "Slow"/"Fast" is quadratic function. S1 use parametric exponential. Theoretically it is possible "interpolate" segments with linear and exponential segments for better match. If someone provide realistic example when current approach is "no go", I can consider that.
Comments (difference in behavior and conversion decisions):
- It seems like S1 (unlike CW) doesn't distinguish between "Parameter" and its Envelope. F.e. there is no separated "Automated Mute" (CW)
- In S1 Envelope for Mute is strictly "On"/"Off". Switching happens once the value is "1". In CW switching happens when the value is 0.5. The Envelope is converted to produce switching at correct time.
- S1 detects when Effect or Instrument (S1) parameter is a switch and allow only "On"/"Off" envelope (as for "Mute"). Converter can't detect if parameter is a switch, so it converts Automation (CW) as for continuous parameters. Fortunately S1 accepts that.
- Unlike in Parts (S1), Track Envelopes originating from MIDI world (CCs, Wheel) target Instrument (S1) Parameter. So they are technically just Instrument parameter envelopes. But for VST3, which no longer support MIDI directly, parameter name can't be deducted without actually loading Instrument with preset and checking its report about parameters. Converted doesn't load plug-ins, so has no way to find the name. As a workaround, a dedicated Part (S1) with name "Track envelopes" is created on each Instrument (S1) track, in case any MIDI Track parameter (CW) has not default value or there are explicit MIDI Automation (CW). Track Automation (CW) is then converted as a Part Envelope (S1). Parameter name is prefixed with "(CW)", but it will be overwritten as soon as S1 find target parameter to use. That way it is easy to check if some Envelopes are not doing anything.
.
.
.
.
MIDI and Studio One:In the following I will use M for MIDI, P for Presonus, S for Steinberg and V(3) for VST(3). These 4 names are trademarks of corresponding companies... Single characters are not ;)
The whole problem is that someone in S at some point has decided "M is OLD, let's try to kill it". With such idea you need something "new". And that "new" was presented as V3 which should replace V1-V2.
But they "forgot" one simple thing... To declare "new" is a replacement for "old", normally "new" should be able to do the same thing as "old". Unfortunately even 16 (!) years later, S has not managed to give V3 capability to do everything possible in 42 years old M. And what is possible is defined most ugly way someone can imagine. And by "defined" I mean "in practice", since the documentation is so tricky and incomplete that everyone has to guess what it tries to "define".
Some people in P has decided "lets follow NEW rules as far as we can". And so:
- M devices are still M devices. Just because there is no replacement.
- since V3 propose absolutely nothing to make controlling at least partially "standard", for anything "transportable" (f.e. clips), the approach is still use a kind of M
- for everything else, avoid M concepts
And as the consequence:
- no M parameters implicit auto-(re)set, something many V1-V2 expect
- "multi-stream" M capabilities are abandoned
- all parameters envelopes on strip level are bound to concrete plug-in
- all bugs in plug-in parameter definitions are "visualized"
P has made yet another nasty decision, they don't use per point step type for envelopes. The whole envelope can be declared as "step based", but it is normally immediately overwritten from "continuous" parameter specification. So "natural" M control sequences has to be mapped by linear type, effectively doubling the number of points to reproduce steps (with unclear effect on plug-ins).