Script Won't Work in V12

wwaag wrote on 10/23/2012, 8:05 PM
I modified a script written be Ed Troxel to add takes for selected audio events. It works well with V10e. However, in V12, I get the message "Failed to Find Template". Any ideas how I might correct this?

wwaag


/**
* 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.Collections.Generic;
import System.Text;
import System.Windows.Forms;
import System.IO;
import System.Diagnostics;
import Microsoft.Win32;
import Sony.Vegas;

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

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

try {

var waveDir :String
var MyDir :String;
var MyPath :String;
var baseDir : String;

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(/Wave/);
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;

// to be added for different directory
var ve = evnt;
var MyTake=ve.ActiveTake;
MyPath=MyTake.MediaPath;
// MessageBox.Show (MyPath);
MyDir=MyPath.Substring(0, MyPath.LastIndexOf("\\"));
// MessageBox.Show (MyDir);
var waveDir = MyDir + "\\wave\\";
if (!Directory.Exists(waveDir)) {
Directory.CreateDirectory(waveDir);
}
// MessageBox.Show (waveDir);
// Assign a filename for the stabilized event, same as event then add an increment
var file : String = waveDir + "\\" + ve.ActiveTake.Name;

// Next check for duplicate file names and increments the counter
// until an unused file name is found.
var eventNum : int = 1;
while (File.Exists(file + "-" + "Take " + String.Format("{0:D2}", eventNum) + ".wav")) {
eventNum++;
}
file = file + "-" + "Take " +String.Format("{0:D2}", eventNum) + ".wav";
// MessageBox.Show (file);
var NewFPath = waveDir + ve.ActiveTake.Name + SubClipNum + ".wav";
DoRender(file, renderer, template, renderStart, renderLength);

//Add the media to the new track
var mymedia = new Media(file);
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;
}


AKA the HappyOtter at https://tools4vegas.com/. System 1: Intel i7-8700k with HD 630 graphics plus an Nvidia RTX4070 graphics card. System 2: Intel i7-3770k with HD 4000 graphics plus an AMD RX550 graphics card. System 3: Laptop. Dell Inspiron Plus 16. Intel i7-11800H, Intel Graphics. Current cameras include Panasonic FZ2500, GoPro Hero11 and Hero8 Black plus a myriad of smartPhone, pocket cameras, video cameras and film cameras going back to the original Nikon S.

Comments

Kimberly wrote on 10/24/2012, 9:41 AM
Hello:

Silly question, but did you put a copy of the script into the VP 12 scripts folder and do a "Rescan Scripts" when you open your scripts menu?

Each version of VP has its own private scripts folder. So you may have scripts for VP 10, 11, and 12 all on the same machine but in different folders. If the contents are not identical then you will see a script for one version that you don't see on another.

You probably already know this but wanted to mention in case you did not.

Regards,

Kimberly
wwaag wrote on 10/25/2012, 12:49 PM
Finally got the script to work. Changed the FindRenderer commands to FindRendererByName and it works OK. I find this script very useful for creating takes of selected audio events in a separate folder, thus enabling batch processing in Sound Forge. Sure is a lot quicker than opening a copy of each audio event from the timeline. If anyone is interested, I will post the corrected script.

wwaag

AKA the HappyOtter at https://tools4vegas.com/. System 1: Intel i7-8700k with HD 630 graphics plus an Nvidia RTX4070 graphics card. System 2: Intel i7-3770k with HD 4000 graphics plus an AMD RX550 graphics card. System 3: Laptop. Dell Inspiron Plus 16. Intel i7-11800H, Intel Graphics. Current cameras include Panasonic FZ2500, GoPro Hero11 and Hero8 Black plus a myriad of smartPhone, pocket cameras, video cameras and film cameras going back to the original Nikon S.