At MacWorld New York today, REAL Software announced the release of REALbasic 4.5. In honor of their new release, today we'll build a Laugh track Editor. With it, you can add a laugh track to your favorite QuickTime movies. This works great for post-processing your favorite iMovie creation. So, get ready to laugh!
Build the Interface
NOTE: This project requires REALbasic 4.5 or newer!
Launch REALbasic and open Window1 from the Project window. To this window, add the following controls:
| Control Type | Control Name | Other Properties |
| PushButton | OpenButton | |
| PushButton | RemoveButton | Enabled=FALSE |
| PushButton | SaveButton | Enabled=FALSE |
| Listbox | Listbox1 | |
| StaticText | StaticText1 | Enabled=FALSE Text="Press the Space bar to add a laugh track to the current movie position" |
| MoviePlayer | MoviePlayer1 |
Arrange the interface to your liking. It might look like this:

The final step in completing your interface is to add a control binding. Hold Cmd-Shift and drag from the RemoveButton to Listbox1. When you let go of the mouse, a Bindings dialog appears. Click OK to select the first (and only) item in the Binding list and close the window.
Source Code
Before you begin adding code, you need to complete a few preparatory steps. First, add a new file type to your project by selecting Edit-File Types. Fill out the fields to look this:

Close the File Types window and double-click Window1 to open its Code Editor. Using Edit-New Property, create three new properties.
Finally, it's time to add some code. In the Open event of Window1, add the following code:
originalMovie as Movie
Next, navigate to the KeyDown event of Window1 and add this code:
if acceptLaughs then
if key = " " then
listBox1.addrow format(MoviePlayer1.Position,"##########")
end if
end if
In the Action event of OpenButton add some code:
//get a movie file
originalFile=GetOpenFolderItem("video/quicktime")
if originalFile<>nil then
//open the movie in that file
originalMovie=originalFile.openAsMovie
//load this movie into the MoviePlayer
MoviePlayer1.movie=originalMovie
//enable the remaining controls
StaticText1.enabled=TRUE
SaveButton.enabled=TRUE
acceptLaughs = TRUE
end if
In the Action event of RemoveButton add this code:
listBox1.removeRow listBox1.listindex
The final code goes in the Action event of SaveButton:
dim i,destPosition as integer
dim laughMovie,exportMovie as editableMovie
dim srcTrack,destTrack as QTSoundTrack
dim f as folderItem
if listBox1.listcount>0 then
f=GetSaveFolderItem("video/quicktime","WithLaughTrack.mov")
if f<>nil then
//copy the original movie to a new movie
if originalFIle<>nil then
originalFile.copyFileTo f
laughMovie = GetFolderItem("laugh.aif").openeditableMovie
if laughMovie<>nil then
//we don't want to change the laugh file
laughMovie.SaveOnClose=FALSE
//grab the laugh from the laugh file
srcTrack = laughMovie.SoundTrack(1)
//create a new movie
exportMovie = f.OpenEditableMovie
//add a new soundtrack to the movie
destTrack = exportMovie.NewSoundTrack
for i=0 to listBox1.listcount-1
//loop through each laughtrack position
//and add a laugh to the new movie's new soundtrack
destPosition = val(listBox1.list(i))
//Beware of line-wrap on this next line!!! destTrack.InsertSoundTrackSegment srcTrack,0,
srcTrack.Duration,destPosition,TRUE,TRUE
next
end if// laughMovie<>nil then
end if// originalFIle<>nil then
end if// f<>nil then
else
MsgBox "Please add some laughter to the movie!"
end if// listBox1.listcount>0 then
Conclusion
To test the project, select Debug-Run and follow these steps:
That's it for this week! As you might imagine, there are many improvements you could make to this project. For example, you could add more than one kind of laugh and trigger each one using a different key. That way, as you review the movie, you could add strong laughs for really funny parts, or maybe snickers for less funny sections. As usual, you can download the completed project here. Have fun and see you next week!