PLEASE HELP WITH OLD SCRIPT (AUDIOTONEWTAKE.js)

Mickcim79 wrote on 8/16/2017, 2:07 AM

Hi guys,

I've been searching and searching for something that is going to get me out of a bind, and I found it in a Script from Edward Troxel circa 2003, called Audiotonewtake.js

I've swapped out sony for script portal, but I can see the script is calling for renderer "sonic foundry Wave 64", so it's throwing back an error message.

I have Adobe Audition as my external audio editor.

My hope is that I can get this script to open/render multiple audio files (events) as new active takes on the timeline, including selected channels, but ditching channels that are not selected. So instead of having multi channel audio (with selected channels) I'll end up with mono tracks of either L or R, or 1,2 ,3,4 etc.

Can anyone offer any help?

It's so damn close. The process I need is similar to "open copy in external editor" which then asks vegas to create and render a new take, before it tries to open the external editor. It's also similar to the result of applying a non-realtime effect (without any parameter changes), where the clip is rendered to a new take. I just want to be able to do this to a few hundred clips on the timeline.

Many thanks in advance, and to Edward for the original script :)

Here is the script:

/**
 * This script render a new audio file for all selected audio events and add
 * this file as a new take. Designed to help reduce problems with hard drives
 * connected via firewire.
 * 
 * Written By: Edward Troxel
 * Modified: 05-28-2003
 * Version 1
 **/

import System;
import System.Text;
import System.IO;
import System.Windows.Forms;
import System.Object;
import ScriptPortal.Vegas;

// here are some default variables for the GUI.
var defaultBasePath = "C:\PRODUCTION";

// set this to true if you want to allow files to be overwritten
var overwriteExistingFiles = false;

try {

  var SubClipNum = 1;
  var stream;
  var renderStart;
  var renderLength;

  //Mute/unsolo all tracks
  var trackEnum = new Enumerator(Vegas.Project.Tracks);
  while (!trackEnum.atEnd()) {
    var track : Track = Track(trackEnum.item());

    if (track.IsAudio) {
      track.Mute = true;
      track.Solo = false;
    }

    trackEnum.moveNext();
  }


  //Go through the list of Tracks
  trackEnum = new Enumerator(Vegas.Project.Tracks);
  while (!trackEnum.atEnd()) {
    track = Track(trackEnum.item());

    if (track.IsAudio) {

      //Go through the list of Events
      var eventEnum = new Enumerator(track.Events);
      while (!eventEnum.atEnd()) {
        var evnt : TrackEvent = TrackEvent(eventEnum.item());

        if (evnt.Selected) {
          track.Mute = false;
          track.Solo = true;

          
          var renderer = FindRenderer(/Sonic Foundry Wave64/);
          if (null == renderer)
              throw "failed to find renderer";

          var template = FindRenderTemplate(renderer, /48,000 Hz, 16 Bit, Stereo, PCM/);
          if (null == template)
              throw "failed to find template";

          renderStart = evnt.Start;
          renderLength = evnt.Length;

          var NewFPath = defaultBasePath + "Aud" + SubClipNum + ".W64";
          DoRender(NewFPath, renderer, template, renderStart, renderLength);

          //Add the media to the new track
          var mymedia = new Media(NewFPath);
          stream = mymedia.Streams.GetItemByMediaType(MediaType.Audio, 0);
          if (null == stream) 
            throw "media contains no audio streams";

          var myNewtake = new Take(stream);
          evnt.Takes.Add(myNewtake);


          SubClipNum++;

        }
        eventEnum.moveNext();
      }
    }
    trackEnum.moveNext();
  }

  //unmute/solo all tracks
  trackEnum = new Enumerator(Vegas.Project.Tracks);
  while (!trackEnum.atEnd()) {
    track = Track(trackEnum.item());

    if (track.IsAudio) {
      track.Mute = false;
      track.Solo = false;
    }

    trackEnum.moveNext();
  }

} catch (e) {
    MessageBox.Show(e);
}

// perform the render.  The Render method returns a member of the
// RenderStatus enumeration.  If it is anything other than OK, exit
// the loops.  This will throw an error message string if the render
// does not complete successfully.
function DoRender(fileName, rndr, rndrTemplate, start, length) {
    // make sure the file does not already exist
    if (!overwriteExistingFiles && File.Exists(fileName)) {
        throw "File already exists: " + fileName;
    }

    // perform the render.  The Render method returns
    // a member of the RenderStatus enumeration.  If
    // it is anything other than OK, exit the loops.
    var status = Vegas.Render(fileName, rndrTemplate, start, length);

    // if the render completed successfully, just return
    if (status == RenderStatus.Complete)
        return;

    // if the user canceled, throw out a special message that won't be
    // displayed.
    if (status == RenderStatus.Canceled) {
        var cancelMsg = new String("User canceled");
        cancelMsg.skipMessageBox = true;
        throw cancelMsg;
    }

    // if the render failed, throw out a detailed error message.
    var msg : StringBuilder = new StringBuilder("Render failed:\n");
    msg.Append("\n    file name: ");
    msg.Append(fileName);
    msg.Append("\n    Renderer: ");
    msg.Append(rndr.FileTypeName);
    msg.Append("\n    Template: ");
    msg.Append(rndrTemplate.Name);
    msg.Append("\n    Start Time: ");
    msg.Append(start.ToString());
    msg.Append("\n    Length: ");
    msg.Append(length.ToString());
    throw msg;
}

function FindRenderer(rendererRegExp : RegExp) : Renderer {
  var rendererEnum : Enumerator = new Enumerator(Vegas.Renderers);

  while (!rendererEnum.atEnd()) {
    var renderer : Renderer = Renderer(rendererEnum.item());
    if (null != renderer.FileTypeName.match(rendererRegExp)) {
        return renderer;
    }
    rendererEnum.moveNext();
  }
return null;
}

function FindRenderTemplate(renderer : Renderer, templateRegExp : RegExp) : RenderTemplate {
  var templateEnum : Enumerator = new Enumerator(renderer.Templates);

  while (!templateEnum.atEnd()) {
    var renderTemplate : RenderTemplate = RenderTemplate(templateEnum.item());
    if (null != renderTemplate.Name.match(templateRegExp)) {
        return renderTemplate;
    }
    templateEnum.moveNext();
  }
  return null;
}


 

 

Comments

jetdv wrote on 8/16/2017, 9:54 AM

var renderer = FindRenderer(/Sonic Foundry Wave64/);

 

is now

var renderer = FindRenderer(/Sony Wave64/);

Mickcim79 wrote on 8/16/2017, 10:30 AM

Thanks mate. That worked a treat!

Is there a way to have it ignore the clip gain of the selected events, so it does a direct swap out, keeping the clip gain on the event/clip when replaced?

Also.. pardon my ignorance, one other question:

Is there a way to use the original file name + number?

Many many thanks!