DAWproject Documentation
repository·main·Indexed 21 days ago
https://github.com/bitwig/dawprojectAn open, vendor-agnostic exchange format (v1.0) for transferring complete music production project data, including audio, notes, automation, and plug-in states, between different Digital Audio Workstations. The format uses a ZIP container with UTF-8 encoded XML files (project.xml and metadata.xml) to ensure language-agnostic implementation.
What's inside DAWproject
- DAWproject is an open exchange format designed for transferring user data between different Digital Audio Workstations (DAWs). Unlike MIDI (which is often too low-level) or AAF (which focuses on video post-production and lacks musical-time concepts), DAWproject aims to package all translatable project data—including audio, notes, automation, and plug-in states—into a single, vendor-agnostic file.
Understand the DAWproject format specification
mainThe DAWproject format is a stable (v1.0) container designed to be language-agnostic and simple to implement. It uses established open standards:
- File Extension:
.dawproject - Container: ZIP archive
- Core Files: XML (
project.xml,metadata.xml) - Text Encoding: UTF-8
Because it is based on plain XML and ZIP, it can be parsed by any programming language. The exporting DAW determines the internal directory structure for media and plug-in files within the ZIP container.
- File Extension:
Examine the project.xml structure
mainThe
project.xmlfile represents the hierarchy of the musical project. A key concept is the nesting of elements: for example, in Bitwig Studio, an audio clip on the arrangement timeline can itself contain a timeline of audio events, resulting in nested<Clips>elements.Common top-level elements include:
<Application>: Identifies the exporting DAW and its version.<Transport>: Contains tempo and time signature data.<Structure>: Defines tracks, channels, devices (plug-ins), and channel settings (volume, pan, mute).<Arrangement>: Contains the timeline, lanes, and clips.<Scenes>: For clip-launcher style data.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Project version="1.0"> <Application name="Bitwig Studio" version="5.0"/> <Transport> <Tempo max="666.000000" min="20.000000" unit="bpm" value="149.000000" id="id0" name="Tempo"/> <TimeSignature denominator="4" numerator="4" id="id1"/> </Transport> <Structure> <Track contentType="notes" loaded="true" id="id2" name="Bass" color="#a2eabf"> <Channel audioChannels="2" destination="id15" role="regular" solo="false" id="id3"> <Devices> <ClapPlugin deviceID="org.surge-synth-team.surge-xt" deviceName="Surge XT" deviceRole="instrument" loaded="true" id="id7" name="Surge XT"> <Parameters/> <Enabled value="true" id="id8" name="On/Off"/> <State path="plugins/d19b1f6e-bbb6-42fe-a6c9-54b41d97a05d.clap-preset"/> </ClapPlugin> </Devices> <Mute value="false" id="id6" name="Mute"/> <Pan max="1.000000" min="0.000000" unit="normalized" value="0.500000" id="id5" name="Pan"/> <Volume max="2.000000" min="0.000000" unit="linear" value="0.659140" id="id4" name="Volume"/> </Channel> </Track> <!-- ... other tracks ... --> </Structure> <Arrangement id="id19"> <Lanes timeUnit="beats" id="id20"> <Lanes track="id2" id="id21"> <Clips id="id22"> <Clip time="0.0" duration="8.0" playStart="0.0"> <Notes id="id23"> <Note time="0.000000" duration="0.250000" channel="0" key="65" vel="0.787402" rel="0.787402"/> </Notes> </Clip> </Clips> </Lanes> </Lanes> </Arrangement> <Scenes/> </Project>Use DAWproject converters
mainSeveral third-party tools are available to convert between DAWproject and other formats:
- DawVert: Supports various formats.
- Repository:
https://github.com/SatyrDiamond/DawVert
- Repository:
- ProjectConverter: Specifically for Cockos Reaper.
- Repository:
https://github.com/git-moss/ProjectConverter
- Repository:
- DawVert: Supports various formats.
Build the DAWproject library, documentation, and tests
mainTo build the project from source, you must have Java Runtime version 16 or later installed. The project uses Gradle for the build process.
Run the following command in the root directory:
./gradlew build