Sunday, August 05, 2007

Cheapie Teleprompter Using Microsoft Word

Here is a quick "hack" which will prove useful to those who are trying to develop a teleprompter for recording their video.

One of the problems with scripts is that they are hard to "scroll" in timing with the recording. This creates stumbles and fumbles on the recording.

I've written a quick MACRO for Microsoft Word which allows the user to enter in a couple basic parameters, and then their script will automatically scroll at the speed they enter.

To complement this, I suggest that this be used on a laptop positioned about 5 to 7 feet away from the subject (at the camera position) and that 36-point font be used with page margins set to 0.3 inches (which gives maximum "display" of the text on the computer monitor). This will help avoid the subject's eyes from "darting back and forth" noticably as would happen if the user were closer to the laptop screen and the letters were smaller.


Here is the code:
Sub DownBit()
' DownBit Macro
' Autoscroll Window
Dim PauseTime, Start, Finish, TotalTime
Dim i, iMax As Integer
Dim i1, i2 As String
Dim fTiming As Double
i1 = InputBox("Enter number of Lines to Move", _
"Teleprompter Motion", 100)
iMax = CInt(i1)
i2 = InputBox("Enter Delay seconds between moves", _
"Movement Timing", 0.35)
fTiming = CDbl(i2)

For i = 1 To iMax
PauseTime = fTiming ' Set duration.
Start = Timer ' Set start time.
Do While Timer < Start + PauseTime
DoEvents ' Yield to other processes.
Loop
'Move down a small scroll increment
ActiveWindow.ActivePane.SmallScroll Down:=1
Next i
End Sub

2 comments:

Stevem said...

Excellent code except...I have trouble with inserting the macro. How exactly does one go about doing that?

Anonymous said...

Here's a slightly better version, as it doesn't peg out your processor looping very quickly. It doesn't contain the input boxes, but works well for me. Thanks for posting the original code.

David

Private Declare Sub sapiSleep Lib "kernel32" Alias "Sleep" (ByVal millisec As Long)


Sub Sleep(millisec As Long)
If millisec > 0 Then Call sapiSleep(millisec)
End Sub


Sub TeleprompterScroll()
' TeleprompterScroll Macro
' Macro created 3/21/2010 by David
' For my screen, this works about right for a document that is formatted at 16pt,
' US letter, 1" margins, 25pt line spacing, viewing it in Normal view.

Dim pauseTime, start As Double
Dim y, linesToMove As Integer

linesToMove = 100

start = Timer
'Initial pause, to get into the text:
pauseTime = 3 'seconds
Do While Timer < start + pauseTime
Sleep (20)
DoEvents
Loop
ActiveWindow.ActivePane.SmallScroll Down:=1

For y = 1 To linesToMove - 1
pauseTime = 4.3 ' Set duration.
start = Timer ' Set start time.
Do While Timer < start + pauseTime
Sleep (20)
DoEvents ' Yield to other processes.
Loop
'Move down a small scroll increment
ActiveWindow.ActivePane.SmallScroll Down:=1
Next y
End Sub