News:

CWP2Song, public beta.
My  DAW is Reaper
YouTube channel

Main Menu

About/Installation/Features

Started by azslow3, August 09, 2024, 11:30:31 AM

Previous topic - Next topic

azslow3

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

Disclaimer, copyrights, etc.: ShowHide


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


azslow3

#1
Installation

  • 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. 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, and the path to OS specific executable (for Windows _win32 sub-directory) into OS specific system path list

How to use
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 of it can't find/out audio files.

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.


azslow3

#2
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)

azslow3

#3
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:

  • notes

No plans to convert:

  • project image

azslow3

#4
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

azslow3

#5
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)

azslow3

#6
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.

azslow3

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

azslow3

#8
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)

azslow3

#9
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.

azslow3

#10
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.

azslow3

#11
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)).

azslow3

#12
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.

azslow3

#13
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

azslow3

#14
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):

  • parameter envelopes

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.