Laugh Track Machine by Erick Tejkowsi
07-18-02




07-18-02_laugher.jpg (6k) 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:

07-18-02_interface.jpg (14k)

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:

07-18-02_filetypes.jpg (22k)

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!