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
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;
}