|
|||||||||
|
Thread Tools | Search this Thread |
August 19th, 2004, 06:37 AM | #1 |
Old Boot
Join Date: Aug 2002
Location: London UK
Posts: 3,633
|
SlideShowToMarkers Error?
OK, I'll try here as well .. . .
Having updated to V5b I'm now getting this. I've activated it from my Desktop. I get the same from running from the Script Menu too. I know that wouldn't make a difference. OK, this is what I'm getting:- _______________________________________________ Error 0x80131600 (message missing) Compilation error on line 24: Variable 'Timecode' has not declared System.ApplicationException: Failed to compile script: 'C:\Documnets and Settings\Main User\Desktop\slideshowToMarkers.js' at Sony.Vegas.ScriptHost.RunScript() _______________________________________________ HELP! Grazie |
August 19th, 2004, 06:47 AM | #2 |
RED Code Chef
Join Date: Oct 2001
Location: Holland
Posts: 12,514
|
Sounds like that script is just not correct. The script you are trying
to access is looking for a variable that is not declared (ie, it is not there). If you e-mail me the script I can take a look at it for you if you want. Otherwise your installation of .NET runtime might be corrupt.
__________________
Rob Lohman, visuar@iname.com DV Info Wrangler & RED Code Chef Join the DV Challenge | Lady X Search DVinfo.net for quick answers | Buy from the best: DVinfo.net sponsors |
August 19th, 2004, 06:52 AM | #3 |
Old Boot
Join Date: Aug 2002
Location: London UK
Posts: 3,633
|
Thanks Rob . .
1 - I can run other scripts within V5b .. including all versions XCAL, Neon and Tsunami. I understand they need .NET 1.1? So I would ahve thought that as I can run these other scripts then .NET isn't corrupt? 2 - Do you want me to copy the script into this post or email you? Grazie |
August 19th, 2004, 06:53 AM | #4 |
Old Boot
Join Date: Aug 2002
Location: London UK
Posts: 3,633
|
Rob - Sent email .. .
Grazie |
August 19th, 2004, 06:58 AM | #5 |
Old Boot
Join Date: Aug 2002
Location: London UK
Posts: 3,633
|
Rob, email being "bumped" back ..
so here yah go .. Script Starts Here ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Assuming there is an audio track with appropriate number of numbered and // unnumbered markers, and a bin in Media Pool with images, automate image // sequence to timeline at markers. Apply default transition/dissolve in the // process. // Currently script accept both images and video clips (only video part is // used) as slides. // User can choose bin (by name), amount of overlap, affected region (see in // the script code), and whether to create a new track for the batch (otherwise // currently selected track is used if it has type Video). // All setting are stored in Windows Registry between subsequent runs and // sessions. // Preliminary sortingof media by path/name is implemented but turned off. // So media is picked in the order it is stored in the bin. // Every run media is picked from the bin starting with the very first item. // Maybe pick images from directory in future versions. // import System.Windows.Forms; import System.Collections; import Sony.Vegas; import Microsoft.Win32; // This is for convenience in comparison and assignment. var zeroMark = new Timecode(0); // These are default values for parameters in a dialog. // Half-time of dissolve. Half because we add it to both dissolving clips. var overlap: Timecode; // Region that is subject to script. By default it is entire project. var begin: Timecode, end: Timecode; // Default name for bin holding our slides. var binName; // 0 - entire project, 1 - from cursor to the end of project, 2 - loop region. var regionType; // 0 - add images to current track, else create a new track var newTrack; try { // Last snapshot file name is stored in Windows registry. var regKey = Registry.CurrentUser.CreateSubKey("Software\\Sonic Foundry\\Scripts\\SlideshowToMarkers"); binName = regKey.GetValue("Bin name", "Slides"); overlap = new Timecode(regKey.GetValue("Overlap", "00:00:01:29")); // Approximately 2 seconds. regionType = regKey.GetValue("Region", 1); newTrack = regKey.GetValue("New track", 1); var dialog = new SlideshowDialog(binName, overlap, regionType, newTrack); var dialogResult = dialog.ShowDialog(); // if the OK button was pressed... if (System.Windows.Forms.DialogResult.OK == dialogResult) { binName = dialog.binNameBox.Text; overlap = new Timecode(dialog.overlapBox.Text); regionType = dialog.regionBox.SelectedIndex; newTrack = dialog.trackBox.Checked ? 1 : 0; switch (regionType) { case 0: begin = zeroMark; end = Vegas.Project.Length; break; // If there's no selection then SelectionLength is 0 (zero). case 2: begin = Vegas.SelectionStart; end = begin + Vegas.SelectionLength; break; default: begin = Vegas.Cursor; end = Vegas.Project.Length; } // Write settings back to Registry. regKey.SetValue("Bin name", binName); regKey.SetValue("Overlap", overlap.ToString()); regKey.SetValue("Region", regionType); regKey.SetValue("New track", newTrack); // If event is shorter than this then its all just transition. // That will look bad aestethically. var threshold = overlap + overlap; var videoTrack = FindSelectedTrack(); if ((newTrack != 0) || !videoTrack.IsVideo()) { videoTrack = new VideoTrack(videoTrack.DisplayIndex, null); Vegas.Project.Tracks.Add(videoTrack); } var mrkEnum = new Enumerator(Vegas.Project.Markers); // Two variables to identify start and end of created event. var prevMark: Timecode = begin, currMark: Timecode = begin; // Find the bin containing slides. var bin = FindMediaBin(Vegas.Project.MediaPool.RootMediaBin, binName); if (bin == null) { MessageBox.Show("Could not find '" + binName + "' bin in Media Pool."); } else { var imgEnum: Enumerator; // Build a list of available media, sort it, and then iterate it instead // of working directly with bin/media pool. if (false) { var mediaList: System.Array = System.Array.CreateInstance(System.Object, bin.Count); bin.CopyTo(mediaList, 0); var myComparer: IComparer = new CompareMedia(); System.Array.Sort(mediaList, myComparer); imgEnum = new Enumerator(mediaList); } else { // For now, position on first image in the bin. imgEnum = new Enumerator(bin); } // Code below is to advance currMark until the length of event will be // greater than threshold. Then subsequent slide is put on the timeline // thus creating an event. while (!mrkEnum.atEnd()) { currMark = Marker(mrkEnum.item()).Position; if ((currMark > begin) && ((currMark - prevMark) > threshold)) { PlaceImageOnTimeline(imgEnum, prevMark, currMark); prevMark = currMark; } if (currMark >= end) break; // To avoid extra looping after we reach end of processing region. mrkEnum.moveNext(); } // The last marker may not mark the end of processing region. // This special case is handled by code below. Notice that we compare to // overlap here because for the last event dissolve is applied on one side // only. Would be good to handle the first event in similar way .. currMark = end; if ((currMark - prevMark) > overlap) { PlaceImageOnTimeline(imgEnum, prevMark, currMark); } } } } catch (e) { MessageBox.Show(e); } // Retrieve the next available image and create event on timeline. function PlaceImageOnTimeline(images: Enumerator, from: Timecode, to: Timecode): void { // Advance to next image. var imgStream: MediaStream = FindNextImage(images); if (imgStream == null) return; // Add handles for dissolve. Transition is centered on marker. // Keep timecodes withing the range of audio track. from -= overlap; if (from < begin) from = begin; to += overlap; if (to > end) to = end; // Create the new video event and add it to the track. var evnt = new VideoEvent(from, to - from); videoTrack.Events.Add(evnt); // Create a new take using the video stream. var takeName = null; evnt.Takes.Add(new Take(imgStream, true, takeName)); } // Walk the bin tree recursively until the 'name' is found. // If several bins on different levels have the same name, first one will be // returned. function FindMediaBin(parent: MediaBin, name: String): MediaBin { if (String.Compare(parent.Name, name) == 0) { return parent; } var binEnum = new Enumerator(parent); while (!binEnum.atEnd()) { var abin = binEnum.item(); if ((abin instanceof MediaBin) && (abin.Name != parent.Name)) { // Recurse here. abin = FindMediaBin(abin, name); if (abin != null) return abin; } binEnum.moveNext(); } return null; } // Get next available media as video stream. There is no check if this is // slide/image. Any media containing video is acceptable. function FindNextImage(mediaEnum: Enumerator): MediaStream { while (!mediaEnum.atEnd()) { var img = mediaEnum.item(); mediaEnum.moveNext(); if ((img instanceof Media) && Media(img).HasVideo()) { return img.Streams.GetItemByMediaType(MediaType.Video, 0); } } return null; } function FindSelectedTrack() : Track { var trackEnum = new Enumerator(Vegas.Project.Tracks); while (!trackEnum.atEnd()) { var track : Track = Track(trackEnum.item()); if (track.Selected) { return track; } trackEnum.moveNext(); } return null; } end first part ~~~~~~~~~~~~~~~~~~~~~~~~ |
August 19th, 2004, 07:02 AM | #6 |
Old Boot
Join Date: Aug 2002
Location: London UK
Posts: 3,633
|
. . .second half of script . . .
SECOND PART STARTS HERE ~~~~~~~~~~~~~~~~~~~~~~~~~~
// Form subclass that is the dialog box for this script class SlideshowDialog extends Form { var binNameBox; var overlapBox; var regionBox; var trackBox; function SlideshowDialog(binName, overlap, region, newtrack) { this.Text = "Create Slideshow"; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.StartPosition = FormStartPosition.CenterScreen; this.Width = 300; var buttonWidth = 80; binNameBox = addTextControl("Bin Name", 10, 200, 10, binName); overlapBox = addTextControl("Overlap Time", 10, 140, binNameBox.Bottom + 16, overlap.ToString()); var label = new Label(); label.AutoSize = true; label.Text = "Region:"; label.Left = 10; label.Top = overlapBox.Bottom + 20; Controls.Add(label); regionBox = new ComboBox(); regionBox.DropDownWidth = 100; regionBox.Left = label.Right; regionBox.Top = overlapBox.Bottom + 16; regionBox.Items.Add("Entire Timeline"); regionBox.Items.Add("From Cursor"); regionBox.Items.Add("Loop Region"); regionBox.SelectedIndex = region; Controls.Add(regionBox); trackBox = new CheckBox(); trackBox.Left = 10; trackBox.Width = 160; trackBox.Top = regionBox.Bottom + 16; trackBox.Text = "Create new track"; trackBox.Checked = newtrack != 0; Controls.Add(trackBox); var buttonTop = trackBox.Bottom + 16; var okButton = new Button(); okButton.Text = "OK"; okButton.Left = this.Width - (2*(buttonWidth+10)); okButton.Top = buttonTop; okButton.Width = buttonWidth; okButton.Height = okButton.Font.Height + 12; okButton.DialogResult = System.Windows.Forms.DialogResult.OK; AcceptButton = okButton; Controls.Add(okButton); var cancelButton = new Button(); cancelButton.Text = "Cancel"; cancelButton.Left = this.Width - (1*(buttonWidth+10)); cancelButton.Top = buttonTop; cancelButton.Height = cancelButton.Font.Height + 12; cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; CancelButton = cancelButton; Controls.Add(cancelButton); var titleHeight = this.Height - this.ClientSize.Height; this.Height = titleHeight + okButton.Bottom + 8; } function addTextControl(labelName, left, width, top, defaultValue) { var label = new Label(); label.AutoSize = true; label.Text = labelName + ":"; label.Left = left; label.Top = top + 4; Controls.Add(label); var textbox = new TextBox(); textbox.Multiline = false; textbox.Left = label.Right; textbox.Top = top; textbox.Width = width - (label.Width); textbox.Text = defaultValue; Controls.Add(textbox); return textbox; } } class CompareMedia implements IComparer { function Compare(x: Object, y: Object): int { if (!(x instanceof Media)) { if (y instanceof Media) { return 1; } else { return 0; } } else if (!(y instanceof Media)) { return -1; } return String.Compare(Media(x).FilePath, Media(y).FilePath); } } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Script Ends Here TIA Grazie |
August 19th, 2004, 07:17 AM | #7 |
Sponsor: JET DV
Join Date: Dec 2001
Location: Southern Illinois
Posts: 7,953
|
The key to this error is to look at the "import" line for Vegas.
For Vegas 4, the import line MUST read: import SonicFoundry.Vegas; For Vegas 5, the import line MUST read: import Sony.Vegas;
__________________
Edward Troxel [SCVU] JETDV Scripts/Scripting Tutorials/Excalibur/Montage Magic/Newsletters |
August 19th, 2004, 07:23 AM | #8 |
Old Boot
Join Date: Aug 2002
Location: London UK
Posts: 3,633
|
But it is there. It says
import Sony.Vegas; Grazie |
August 19th, 2004, 09:04 AM | #9 |
Sponsor: JET DV
Join Date: Dec 2001
Location: Southern Illinois
Posts: 7,953
|
Just tested the version you sent me directly. It runs fine in Vegas 5.0b. Just make doubly sure you are picking the proper script from within Vegas.
__________________
Edward Troxel [SCVU] JETDV Scripts/Scripting Tutorials/Excalibur/Montage Magic/Newsletters |
August 19th, 2004, 09:12 AM | #10 |
Old Boot
Join Date: Aug 2002
Location: London UK
Posts: 3,633
|
Edward, thank you. I started from "fresh" with the script that worked within V4 . . did the conversion to V5b and . . NOW it works ! ! . . Thanks Guys for your feedback . . .
. . time to lie down I think .. . arrrggghh .. Grazie |
August 19th, 2004, 12:14 PM | #11 |
RED Code Chef
Join Date: Oct 2001
Location: Holland
Posts: 12,514
|
Grazie: hmmm, weird it bumped back. Can you tell me what the
error message said? Oh well, glad you got your problem solved!
__________________
Rob Lohman, visuar@iname.com DV Info Wrangler & RED Code Chef Join the DV Challenge | Lady X Search DVinfo.net for quick answers | Buy from the best: DVinfo.net sponsors |
August 20th, 2004, 12:34 AM | #12 |
Old Boot
Join Date: Aug 2002
Location: London UK
Posts: 3,633
|
Thanks Rob! Yeah so was I. I re-downloaded the script from the NEW VASST site, did the adjustments, re-loaded into the script menu and fired iot up .. it worked . . I was under p[ressure to get it working as I was doing a demo last night, and I wanted to disply the scripting value of Vegas at the event. .. . phew!
oh . .. the error mnessgae was a "Spraynet" error message? I'll retest now to see . . yeah? If I get the error how can I email it to you? . . . Grazie |
| ||||||
|
|