Here are some macros for additional track tagging functionality

Discussion about: tracktion.com
Post Reply New Topic
RELATED
PRODUCTS

Post

I've written a couple of macros that some of you may find useful as they add some more functionality to the track tagging system. The first macro allows you to select, solo or mute tagged tracks and the second macro lets you select the volume plugins on tagged tracks so you can easily adjust group fader levels.

Selection macro:

Code: Select all

var viewState = Tracktion.getViewState();
var tagString = viewState.getProperty ('enabledTrackTags');
tagString = "" + tagString;
var enabledTags = tagString.split("|");
var numEnabledTags = enabledTags.length;
var tracks = Tracktion.getEditElements ('track');
var trackSelected = false;


Tracktion.selectItem ('none');

var numTracks = tracks.length;
for (var i = 0; i < numTracks; ++i)
{   
    trackSelected = false;
    tagString = tracks[i].getProperty('tags'); 
    if(tagString != "")
    {
        tagString = "" + tagString;
        trackTags = tagString.split("|");
        var numTrackTags = trackTags.length;
        for (var j = 0; j < numTrackTags; ++j)
        {
            for (var k = 0; k < numEnabledTags; ++k)
            {
                if(trackTags[j] == enabledTags[k])
                {
                    Tracktion.addObjectsToSelection (tracks[i]);
                    trackSelected = true;
                    break;
                }
            }
            if(trackSelected == true)
                break;
        }
        
    }
}

//Tracktion.soloSelectedTracks();
//Tracktion.muteSelectedTracks();
Delete the // characters on one of the last two lines to enable soloing or muting of tagged tracks.


Volume plugin macro:

Code: Select all

var viewState = Tracktion.getViewState();
var tagString = viewState.getProperty ('enabledTrackTags');
tagString = "" + tagString;
var enabledTags = tagString.split("|");
var numEnabledTags = enabledTags.length;
var tracks = Tracktion.getEditElements ('track');
var selectedTracks = [];
var m = 0;
var trackSelected = false;


Tracktion.selectItem ('none');

var numTracks = tracks.length;
for (var i = 0; i < numTracks; ++i)
{   
    trackSelected = false;
    tagString = tracks[i].getProperty('tags'); 
    if(tagString != "")
    {
        tagString = "" + tagString;
        trackTags = tagString.split("|");
        var numTrackTags = trackTags.length;
        for (var j = 0; j < numTrackTags; ++j)
        {
            for (var k = 0; k < numEnabledTags; ++k)
            {
                if(trackTags[j] == enabledTags[k])
                {
                    selectedTracks[m] = tracks[i];
                    m = m + 1;
                    trackSelected = true;
                    break;
                }
            }
            if(trackSelected == true)
                break;
        }
     }
}

var plugins = Tracktion.getEditElements ('plugin');
var numPlugins = plugins.length - 1;
var pluginTrack;
var trackID;
var plugin;
var volPlugins = [];
m = 0;


for (var i = 0; i < numPlugins; ++i)
{
    plugin = plugins[i];
    if(plugin.getProperty ('type') == 'volume')
    {
        Tracktion.addObjectsToSelection (plugin);
        var pluginTrack = Tracktion.getTrackFromSelectedObject();
        trackID = pluginTrack.getProperty('mediaId');
        Tracktion.selectItem ('none');
        numTracks = selectedTracks.length;
        for (var j = 0; j < numTracks; ++j)
        {                
            if(selectedTracks[j].getProperty('mediaId') == trackID)
                volPlugins[m] = plugin;
                m = m + 1;
        }
    }
}

var numPlugins = volPlugins.length;
for (var i = 0; i < numPlugins; ++i)
   Tracktion.addObjectsToSelection (volPlugins[i]);

Post

Hi all,

I'm just beginning to look at this and try to learn a bit about the syntax, available methods, etc. I went through the thread and tried to collect all of the "proven" working scripts and pulled them together into one spot for study and reference. These are all just individual bits and pieces.

In case it's a help to anyone, here they are below. Maybe it can be posted somewhere?


//Create a track named X
//Rewind X amount
//Load plugin with preset X

// Insert a Track Named X
var track = Tracktion.insertTrack ('audio');
Tracktion.setName (track, "New Track Name");

// Rewind X Amount
var currentPos = Tracktion.getPosition ('transport');
Tracktion.setPosition ('transport', currentPos - 10.0);

//applying a preset to a plugin
// Insert Plugin With Preset
var track = Tracktion.getTrackFromSelectedObject();
var plugin = Tracktion.insertPlugin (track, "Massive", 0, "AudioUnit");
var preset = Tracktion.getPresetFromLibrary ("Massive All Souls");
Tracktion.setPluginPreset (plugin, preset);

//adding a preset directly
// Insert Named Preset
var track = Tracktion.getTrackFromSelectedObject();
var preset = Tracktion.getPresetFromLibrary ("Massive All Souls");
Tracktion.insertPluginPreset (track, preset);


//NEXT SCRIPT

//For renaming tracks you can do this like so:

var tracks = Tracktion.getSelectedEditElements ('track');
Tracktion.setName (tracks[0], 'Kick');
Tracktion.setName (tracks[1], 'Snare');
Tracktion.setName (tracks[2], 'Hats');

// etc. Or you could start with the first track and use "Tracktion.selectItem ('down')" as in your example.

//NEXT SCRIPT

//As most users simply need a way to change to a specific tab quickly I've added methods
//to get the current tab index and to change it by a delta.
//This should mean you can quickly add shortcuts for previous/next tab or jump to a specific tab index. E.g.

// Jump to tab 2
var index = Tracktion.getWindowTabIndex();
var delta = 2 - index;
Tracktion.changeWindowTabIndex (delta);

//NEXT SCRIPT


//You can now add the clip types: 'barsBeatsMarker' & 'absoluteMarker'.
insertClip also returns an object so you can rename it or move it around etc.
// Insert Bars/Beats Marker Clip
var clip = Tracktion.insertClip ('barsBeatsMarker');
Tracktion.setName (clip, "Hello world!");

//NEXT SCRIPT

//So you can scroll through which active automation line shows on the track.

//Next Active Automation Parameter
var track = Tracktion.getTrackFromSelectedObject();
Tracktion.changeActiveAutomationParameter (track, 1);

//NEXT SCRIPT

// Reset Tracks Solo/Mute
var tracks = Tracktion.getEditElements ('track');
Tracktion.setSolo (tracks, false);
Tracktion.setSoloIsolate (tracks, false);
Tracktion.setMute (tracks, false);

//NEXT SCRIPT

//Renames all clips on a selected track to match the track name
// Rename Clips From Track
var tracks = Tracktion.getSelectedEditElements ('track');

for (var i = 0; i < tracks.length; ++i)
{
var track = tracks;
var trackName = Tracktion.getName (track);
var clips = Tracktion.getClipsFromTracks (track);

for (var c = 0; c < clips.length; ++c)
{
var clipName = trackName + " " + (c + 1);
Tracktion.setName (clips[c], clipName);
}
}

//Possible rework to name a track based on a Clip??
// Rename Track from Clip
for (var i = 0; i < tracks.length; ++i)
{
var track = tracks;
var clips = Tracktion.getClipsFromTracks (track);
var clipName = Tracktion.getname(clips[clip.length - 1]);
Tracktion.setName (track, clipName);
if (clips.length >1){
Tracktion.setName (track, "omigod we have more than one clip, what do I do? WHAT DO I DO?");
}

//NEXT SCRIPT

//Is there a way to select all clips from a highlighted track, via macros?
//Use "addObjectsToSelection" (v6.2.2). Note that this can be used in conjunction with "deselectAll"
//and "deleteSelected" to effectively create a new selection or delete a set of objects.

// Delete all clips on a Track
var track = Tracktion.getTrackFromSelectedObject();
var clips = Tracktion.getClipsFromTracks (track);

Tracktion.deselectAll();
Tracktion.addObjectsToSelection (clips);
Tracktion.deleteSelected();

// NEXT SCRIPT

//Hide automation option on a per track basis. Hide ALL automation might be nice also

// Hide automation on selected tracks
var tracks = Tracktion.getSelectedEditElements ('track');
Tracktion.hideAutomationOnTracks (tracks );

//or

// Hide all automation
var tracks = Tracktion.getEditElements ('track');
Tracktion.hideAutomationOnTracks (tracks );

//NEXT SCRIPT//

//Zoom clip to fit screen
Tracktion.zoomAroundSelection();
var track = Tracktion.getTrackFromSelectedObject();
var height = Tracktion.getTrackAreaHeight();
Tracktion.setTrackHeight (track, height);
Tracktion.scrollToShowTrack (track);

//NEXT SCRIPT

// Save selected plugins as preset
var plugins = Tracktion.getSelectedEditElements ('plugin');
Tracktion.saveObjectsAsPreset (plugins);

//NEXT SCRIPT
//Insert marker on the fly and leave the marker selected. Note the selection section.
var clip = Tracktion.insertClip ('barsBeatsMarker');
Tracktion.deselectAll();
Tracktion.addObjectsToSelection (clip);
//There may be better ways. The second line is to avoid having more than one thing selected.

// NEXT SCRIPT
//Select multiple clips and rename them 'gt'
var clips = Tracktion.getSelectedEditElements ('clip');
for (var i = 0; i < clips.length; ++i)
Tracktion.setName (clips, 'gt');

//NEW SCRIPT

//You can set the colour with
var clip = Tracktion.getSelectedEditElements ('clip');
clip[0].setProperty ('colour','ff4cff88');

//You could jump to a marker by making use of something like :

var markerPosition = clip.getProperty ('start');
Tracktion.setPosition ('cursor', markerPosition);

//You would have to iterate through all the clips in the edit using a for loop and
//testing for type "marker" and the marker "name" property. Use
var clips = Tracktion.getEditElements ('clip');
//to return all clips in the edit.

//NEXT SCRIPT
//A couple of macros that some of you may find useful as they add some more functionality to the track tagging system.
//The first macro allows you to select, solo or mute tagged tracks and the second macro lets you select the volume plugins
//on tagged tracks so you can easily adjust group fader levels.

//Selection macro:

var viewState = Tracktion.getViewState();
var tagString = viewState.getProperty ('enabledTrackTags');
tagString = "" + tagString;
var enabledTags = tagString.split("|");
var numEnabledTags = enabledTags.length;
var tracks = Tracktion.getEditElements ('track');
var trackSelected = false;


Tracktion.selectItem ('none');

var numTracks = tracks.length;
for (var i = 0; i < numTracks; ++i)
{
trackSelected = false;
tagString = tracks.getProperty('tags');
if(tagString != "")
{
tagString = "" + tagString;
trackTags = tagString.split("|");
var numTrackTags = trackTags.length;
for (var j = 0; j < numTrackTags; ++j)
{
for (var k = 0; k < numEnabledTags; ++k)
{
if(trackTags[j] == enabledTags[k])
{
Tracktion.addObjectsToSelection (tracks);
trackSelected = true;
break;
}
}
if(trackSelected == true)
break;
}

}
}

//Tracktion.soloSelectedTracks();
//Tracktion.muteSelectedTracks();

//Delete the // characters on one of the last two lines to enable soloing or muting of tagged tracks.

//Volume plugin macro:

var viewState = Tracktion.getViewState();
var tagString = viewState.getProperty ('enabledTrackTags');
tagString = "" + tagString;
var enabledTags = tagString.split("|");
var numEnabledTags = enabledTags.length;
var tracks = Tracktion.getEditElements ('track');
var selectedTracks = [];
var m = 0;
var trackSelected = false;


Tracktion.selectItem ('none');

var numTracks = tracks.length;
for (var i = 0; i < numTracks; ++i)
{
trackSelected = false;
tagString = tracks.getProperty('tags');
if(tagString != "")
{
tagString = "" + tagString;
trackTags = tagString.split("|");
var numTrackTags = trackTags.length;
for (var j = 0; j < numTrackTags; ++j)
{
for (var k = 0; k < numEnabledTags; ++k)
{
if(trackTags[j] == enabledTags[k])
{
selectedTracks[m] = tracks;
m = m + 1;
trackSelected = true;
break;
}
}
if(trackSelected == true)
break;
}
}
}

var plugins = Tracktion.getEditElements ('plugin');
var numPlugins = plugins.length - 1;
var pluginTrack;
var trackID;
var plugin;
var volPlugins = [];
m = 0;


for (var i = 0; i < numPlugins; ++i)
{
plugin = plugins;
if(plugin.getProperty ('type') == 'volume')
{
Tracktion.addObjectsToSelection (plugin);
var pluginTrack = Tracktion.getTrackFromSelectedObject();
trackID = pluginTrack.getProperty('mediaId');
Tracktion.selectItem ('none');
numTracks = selectedTracks.length;
for (var j = 0; j < numTracks; ++j)
{
if(selectedTracks[j].getProperty('mediaId') == trackID)
volPlugins[m] = plugin;
m = m + 1;
}
}
}

var numPlugins = volPlugins.length;
for (var i = 0; i < numPlugins; ++i)
Tracktion.addObjectsToSelection (volPlugins);
iMacPro 1,1 | 64gb | OSX 10.15.7
http://www.gesslr.com
http://www.storyaudio.com

Post

Thx very much... I am sure I´ll find some use for them... :tu:

Post

If you're interested in macros gesslr, here's some more from my collection you might find useful. The macros in Waveform are powerful and v9 adds more functionality so should be interesting to explore.

Select/solo/mute tracks using text boxes:

Code: Select all

var plugins = Tracktion.getSelectedEditElements ('plugin');
var plugin = plugins[0];
var title = "";
var tracks = [];
var j = 0;

title = plugins[0].getProperty ('title');

Tracktion.selectItem ('none');

plugins = Tracktion.getEditElements ('plugin');

for (var i = 0; i < plugins.length; ++i)
{
   plugin = plugins[i];

   if (plugin.getProperty ('type') == 'text'
         && plugin.getProperty ('title') == title)
      {
           Tracktion.addObjectsToSelection (plugin);
           tracks[j] = Tracktion.getTrackFromSelectedObject();
           Tracktion.selectItem ('none');
           j = j + 1;
      }
}


var numTracks = tracks.length;
for (var i = 0; i < numTracks; ++i)
   Tracktion.addObjectsToSelection (tracks[i]);

//Tracktion.soloSelectedTracks(); 
//Tracktion.muteSelectedTracks();
To use, put text boxes on tracks with names like"Guitar" etc. Select text box then run macro. It's an alternative to tags and doesn't require sidebar open so works in the mixer on a seperate screen or tab. Create an empty first track and put all text boxes on this track so you can select by going to first track. Can be used with "Show selected tracks" macro below for visibility control.

Show soloed tracks only:

Code: Select all

var viewState = Tracktion.getViewState();
viewState.setProperty ('enabledTrackTags', '');
var tracks = Tracktion.getEditElements ('track');
var numTracks = tracks.length;
var unSoloedTracks = [];
var soloedTracks = [];
var solo = false;
var j = 0;

Tracktion.selectItem ('none');

for (var i = 0; i < numTracks; ++i)
{
    if(Tracktion.isSolo (tracks[i]) == false)
    {
        unSoloedTracks[j] = tracks[i];
        j = j + 1;
    }
    else
    {
        tracks[i].setProperty ('hidden', '0');
        solo = true;
    }

}

if(solo == true)
{
    numTracks = unSoloedTracks.length;
    for (var i = 0; i < numTracks; ++i)
        unSoloedTracks[i].setProperty ('hidden', '1');
   
    if(viewState.getProperty('showTaggedTracks') == 1)
    {
        viewState.setProperty ('showTaggedTracks', '0');
        viewState.setProperty ('showTaggedTracks', '1');
    }
    else
    {
        viewState.setProperty ('showTaggedTracks', '1');
        viewState.setProperty ('showTaggedTracks', '0');
    }
    
}
Show selected tracks only:

Code: Select all

var tracks = Tracktion.getEditElements ('track');
var selectedTracks = Tracktion.getSelectedEditElements ('track');
var numTracks = tracks.length;
var numSelected = selectedTracks.length;
viewState.setProperty ('enabledTrackTags', '');

for (var i = 0; i < numTracks; ++i)
    tracks[i].setProperty ('hidden', '1');


for (var i = 0; i < numSelected; ++i)
    selectedTracks[i].setProperty ('hidden', '0');

if(viewState.getProperty('showTaggedTracks') == 1)
    {
        viewState.setProperty ('showTaggedTracks', '0');
        viewState.setProperty ('showTaggedTracks', '1');
    }
    else
    {
        viewState.setProperty ('showTaggedTracks', '1');
        viewState.setProperty ('showTaggedTracks', '0');
    }
Show hidden tracks:

Code: Select all

var tracks = Tracktion.getEditElements ('track');
var numTracks = tracks.length;

for (var i = 0; i < numTracks; ++i)
    tracks[i].setProperty ('hidden', '0');

 if(viewState.getProperty('showTaggedTracks') == 1)
    {
        viewState.setProperty ('showTaggedTracks', '0');
        viewState.setProperty ('showTaggedTracks', '1');
    }
    else
    {
        viewState.setProperty ('showTaggedTracks', '1');
        viewState.setProperty ('showTaggedTracks', '0');
    }
Reset all tracks solo state:

Code: Select all

var tracks = Tracktion.getEditElements ('track');

Tracktion.setSolo (tracks, false);

Tracktion.setSoloIsolate (tracks, false);
Reset all tracks mute state:

Code: Select all

var tracks = Tracktion.getEditElements ('track');

Tracktion.setMute (tracks, false);
Last edited by AGreen on Wed Feb 21, 2018 4:06 pm, edited 1 time in total.

Post

Fantastic AGreen! Thank you. I'll also add these to the list.

Is there an overall list of the methods and such available anywhere?

Thx again.
iMacPro 1,1 | 64gb | OSX 10.15.7
http://www.gesslr.com
http://www.storyaudio.com

Post

Unfortunately there isn't a list of methods available. I've wanted one for a while but I don't think they've got time to compile one at the moment. I get most of my information from dRowaudio who I think wrote the macro system.

Post

Give me more.... yeah!!!! :lol:

Post

Here is where I will be posting updates on new things I find...

http://www.kvraudio.com/forum/viewtopic ... 2&t=500416
iMacPro 1,1 | 64gb | OSX 10.15.7
http://www.gesslr.com
http://www.storyaudio.com

Post

I'm wondering if I could get some help from this thread as I don't want to flood the "working macros" one.

I was trying to create a keyboard shortcut for the action panel's native function "Mute/Unmute All Plugins" but it's not listed so I was wondering if it would be possible to create a macro for it.

I'm not familiar with coding so unfortunately I only managed to get this far:

// Disable all plugins on a Track
var track = Tracktion.getTrackFromSelectedObject();
var plugsters = Tracktion.getPluginsFromTracks (track);

Tracktion.addObjectsToSelection (plugsters);
Tracktion.toggleSelectedPluginEnablement();

//

The problem is that if there's already some disabled plugins in the chain, they will be enabled while the others get disabled.

Any suggestions? Is there a way to select only the plugins that are active?

TIA

Post Reply

Return to “Tracktion”