DAWproject Documentation

repository·main·Indexed 21 days ago

https://github.com/bitwig/dawproject

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

Tokens
1.4K
Snippets
2
Records
5
Agent score
27%

What's inside DAWproject

  1. What is DAWproject?

    main
    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.
  2. Understand the DAWproject format specification

    main

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

  3. Examine the project.xml structure

    main

    The project.xml file 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>
  4. Use DAWproject converters

    main

    Several third-party tools are available to convert between DAWproject and other formats:

    • DawVert: Supports various formats.
      • Repository: https://github.com/SatyrDiamond/DawVert
    • ProjectConverter: Specifically for Cockos Reaper.
      • Repository: https://github.com/git-moss/ProjectConverter
  5. Build the DAWproject library, documentation, and tests

    main

    To 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