Close

Experimental:TDBitwig

TDBitwig

TDBitwig is a set of TouchDesigner components that allow for communication between Bitwig Studio and TouchDesigner. The TDBitwig functionality enables users to create custom audio-visual performances by integrating real-time visuals with live audio output.

With TDBitwig, TouchDesigner can control Bitwig Studio parameters, such as tempo, track properties, clip launching, and device parameters. Conversely, Bitwig Studio can also control TouchDesigner parameters for creating tightly integrated audio and visuals.

Bitwig supports a wide array of hardware controllers for live performances and show control. TouchDesigner can now deeply connect with these devices through Bitwig. TouchDesigner is an interoperability platform that provides access to a wide array of hardware devices, APIs, the internet etc. Read more about TouchDesigner interoperability. Bitwig artists can deeply interface with a wider range of systems through TouchDesigner. Bitwig controlling TouchDesigner can operate as an advanced show controller for live theatre, environmental experiences and music performances.

TDBitwig is a powerful tool that enables the creation of generative, immersive audio-visual performances and installations by combining the real-time audio processing capabilities of Bitwig Studio with the real-time 3D rendering capabilities of TouchDesigner. With its ability to generate audio visual effects simultaneously, TDBitwig empowers artists to craft complex and captivating experiences that seamlessly blend sound and vision.

For information about Bitwig Studio go here... (https://www.bitwig.com/)

For the TDBitwig user guide go here... (https://docs.derivative.ca/UserGuide/Experimental:TDBitwigUserGuide)

Overview

The TDBitwig components are designed to enable users to control and manipulate various features of Bitwig Studio from within TouchDesigner. These components provide a bridge between the two software platforms, allowing for seamless integration and communication via OSC messaging.

Components

Palette:tdBitwigPackage: The entire toolset of TDBitwig components is provided with updating capability for deployed TDBitwig components. When an update for TDBitwig is released go the Palette and place tdBitwigPackage into your file and press Update button. All your deployed components will be udpated automatically. Then delete the package when you finished as this package component is not required for operation.

Palette:bitwigMain: A singleton component that houses the Python extension responsible for communication with Bitwig Controller Java Extension via OSC protocol. You need only one of these components, and you need this component first to start using TDBitwig as it hosts the extension communication and OSC layer.

Palette:bitwigSong: A component that communicates with the main Bitwig transport and arranger. It has bidirectional access to all transport features like Play Stop BPM etc. It connects to the arranger timeline and supports callbacks for passed timeline cues.

Palette:bitwigTrack: A component that communicates with the specified track object in Bitwig. Standard controls for Volume, Mute and Solo are bidirectional. A level channel receives the track amplitude envelope at control rate.

Palette:bitwigClipLauncher: A component that communicates with the specified track objects and clipLauncher system. Permits the firing of specified clip from the Bitwig track’s clipslots. Clipevents are received as playing clipIndex channels and Python callbacks for playing and queued clips.

Palette:bitwigNote: A component that receives Note events as chop channels where each of the 128 notes has its own CHOP channel. By default only Note events that have triggered in the past are exposed. A python callback for onNoteEvent is generated for passing noteOn events and noteOff events. Note with velocity 0 is assumed as a Note Off event.

Palette:bitwigDeviceRemotes: A component that communicates with bitwig Controller banks. Controller banks are groups of UI elements that can be mapped to any parameter found in that track like track volume, pan, mute, or any device parameter. Each bitwigController bank gives bidirectional control to any controller page on the track. Again, all comtroller pages are groups of 8 parameters so TDBitwig parameter control is always done with a set group of 8 parameters. Unused controller slots in a Bitwig controller page look like empty parameters in TouchDesigner. Used ones are dynamically matched to the label name of the controller name in Bitwig.

Palette:bitwigTrackRemotes: A component with identical function to the bitwigDeviceControls component dedicated to global track control of bitwig parameters. Track parameters can be mapped to any parameter in any track in bitwig. This means any device in the track can be mapped to these track remote controls. This gives TouchDesigner global control of any device in a track, in groups of 8 controls per bitwigTrackControls component.

Palette:bitwigProjectRemotes: A component with identical function to the bitwigDeviceControls component dedicated to global project control of bitwig parameters. Project remote controls can be mapped to any parameter in any track in Bitwig. This means session wide, any parameter can be mapped to these global controls. This gives TouchDesigner global control of any selected set of parameter in any track, in groups of 8 controls per bitwigProjectRemotes component.

TDBitwig - API and Communication Explained

  • TDBitwig is a set of components that communicate with Bitwig using the Bitwig Controller Extension API (Java).
  • The OSC protocol is used to bidirectionally communicate with Bitwig and TouchDesigner.
  • bitwigComps bidirectionally communicates via OSC to an abstract general Bitwig cursor track object. This Bitwig object creates a generic interface through which TouchDesigner creates a durable, re-name-able, moveable connection. No word strings are used for mapping data. Instead, a fixed number of cursor objects are made available to TouchDesigner through which each bitwigComp connects to the desired Bitwig object through an automatically assigned cursor object. The connection to TouchDesigner is durable in the sense that the cursor object will persist as long as it is pinned and the TouchDesigner component is not deleted. If the TouchDesigner object is deleted, a new connection is easily recreated by adding a new Bitwig comp and pinning the scope of the TDBitwig component to the desired Bitwig user interface object.
  • TouchDesigner maps to individual parameters using a Bitwig page object that holds a fixed set of 8 customizable controller/parameter slots. This offloads the mapping of parameters to the standard workflow in Bitwig. TouchDesigner can simply scope any Bitwig controller page.

TouchDesigner CHOPs and the Bitwig Grid

  • The Bitwig Grid device provides a pathway for passing audio and controller data at audio rates. This feature is extremely powerful and one reason why Bitwig and TouchDesigner can connect so deeply within the audio rate domain. This feature set is outside the scope of TDBitwig which works at controller rate via an OSC communication layer. The TDBitwig OSC protocol domain provides a framework to enable complete integration and bidirectional control of TouchDesigner and Bitwig via parameters, other user interface elements, clip events and note events. Meanwhile, Bitwig Grid and TouchDesigner's CHOPs profide a procedural toolset for manipulating high-resolution audio and cv data.