This script by JETDV has been very helpful to me, its main function is to copy velocity envelopes. But now, I want to change its function to "copy volume envelopes" so I need your help in scripting knowledge here, or maybe someone has this type of script already. I have Vegasaur but I do not know if it have this functionality.
Edit: Sorry edited my post, I want to change it to be able to 'copy volume envelopes'
/**
* Copy Velocity Envelope Nodes
*
* Written By: Edward Troxel
* www.jetdv.com/tts
* Modified: 03-31-2004
* Copyright 2004 - JET Digital Video
* www.jetdv.com/tts
**/
import System;
import System.IO;
import System.Windows.Forms;
import ScriptPortal.Vegas;
try {
/*STUNNIX-OBFUS-ENCODED-BEGIN*/
var evnt = FindSelectedEvent();
if (null == evnt)
throw "no selected event";
var vevnt : VideoEvent = VideoEvent(evnt);
// Find the velocity envelope
var VelEnv : Envelope = FindVEEnvelope(vevnt, EnvelopeType.Velocity);
if (null == VelEnv)
throw "no velocity envelope";
// Get the existing points in the selection area
var EnvPts = VelEnv.Points;
var cPts = VelEnv.Points.Count;
var ii, arcount;
var arTC = new Array(cPts);
var arY = new Array(cPts);
var FirstInArea : Timecode = Vegas.SelectionStart + Vegas.SelectionLength;
arcount = 0;
for (ii=0; ii < cPts; ii++) {
arTC[arcount] = EnvPts[ii].X;
arY[arcount] = EnvPts[ii].Y * 100;
if (EnvPts[ii].X < FirstInArea)
FirstInArea = EnvPts[ii].X;
arcount++;
}
// Now locate the next event
evnt.Selected = false;
evnt = FindSelectedEvent();
if (null == evnt)
throw "no selected 'TO' event";
vevnt = VideoEvent(evnt);
// Find the velocity envelope
VelEnv = FindVEEnvelope(vevnt, EnvelopeType.Velocity);
if (null == VelEnv) {
VelEnv = new Envelope(EnvelopeType.Velocity);
vevnt.Envelopes.Add(VelEnv);
}
// Set each point in the series
for (ii=0; ii < arcount; ii++) {
var BasePoint : Timecode = new Timecode(0);
var NewPoint : Timecode = (BasePoint + (arTC[ii] - FirstInArea + evnt.Start) );
SetVelocityPoint(NewPoint, arY[ii]);
}
/*STUNNIX-OBFUS-ENCODED-END*/
} catch (e) {
MessageBox.Show(e);
}
function FindSelectedEvent() : TrackEvent {
var trackEnum = new Enumerator(Vegas.Project.Tracks);
while (!trackEnum.atEnd()) {
var track : Track = Track(trackEnum.item());
var eventEnum = new Enumerator(track.Events);
while (!eventEnum.atEnd()) {
var evnt : TrackEvent = TrackEvent(eventEnum.item());
if (evnt.Selected) {
return evnt;
}
eventEnum.moveNext();
}
trackEnum.moveNext();
}
return null;
}
function FindVEEnvelope(mevnt : VideoEvent, etype : EnvelopeType) : Envelope {
var envEnum : Enumerator = new Enumerator(mevnt.Envelopes);
while (!envEnum.atEnd()) {
var env : Envelope = envEnum.item();
if (env.Type == etype) {
return env;
}
envEnum.moveNext();
}
return null;
}
function SetVelocityPoint(markLoc, markLabel) {
/*STUNNIX-OBFUS-ENCODED-BEGIN*/
var PointSpeed = parseFloat(markLabel) / 100;
var trackEnum = new Enumerator(Vegas.Project.Tracks);
while (!trackEnum.atEnd()) {
var track : Track = Track(trackEnum.item());
if (track.IsVideo()) {
var eventEnum = new Enumerator(track.Events);
while (!eventEnum.atEnd()) {
var evnt : TrackEvent = TrackEvent(eventEnum.item());
if (evnt.Selected) {
if ((evnt.Start.ToMilliseconds() < markLoc.ToMilliseconds()) & ((evnt.Start.ToMilliseconds() + evnt.Length.ToMilliseconds()) > (markLoc.ToMilliseconds()))) {
var vevnt : VideoEvent = VideoEvent(evnt);
// Find the velocity envelope - add if needed
var VelEnv : Envelope = FindVEEnvelope(vevnt, EnvelopeType.Velocity);
if (null == VelEnv) {
VelEnv = new Envelope(EnvelopeType.Velocity);
vevnt.Envelopes.Add(VelEnv);
}
var PointLoc : Timecode = markLoc - evnt.Start;
var a : EnvelopePoint = VelEnv.Points.GetPointAtX(PointLoc);
if (a == null) {
a = new EnvelopePoint(PointLoc, PointSpeed);
VelEnv.Points.Add(a);
} else {
a.Y = PointSpeed;
}
}
}
eventEnum.moveNext();
}
}
trackEnum.moveNext();
}
/*STUNNIX-OBFUS-ENCODED-END*/
}