#!/usr/bin/perl -w # # Copyright 2000 by Michael Coyle # Released under GPL. # # Call it with: # [an error occurred while processing this directive] # # Get the file name from the browser... $file_name = $ENV{'QUERY_STRING'}; # Open the file... open (EP, $file_name); # Print to the browser... print "Content-Type: text/html \n\n"; # Load the file and keep spitting it out to the browser... while () { chomp; print "$_ "; } # Close the file and go home... close EP #!/usr/bin/perl -w # # Copyright 2000 by Michael Coyle # Released under GPL. # # Call it with: # [an error occurred while processing this directive] # # Get the file name from the browser... $file_name = $ENV{'QUERY_STRING'}; # Open the file... open (EP, $file_name); # Print to the browser... print "Content-Type: text/html \n\n"; # Load the file and keep spitting it out to the browser... while () { chomp; print "$_ "; } # Close the file and go home... close EP

3D
3D Photo Gallery (Part 1)
3D Photo Gallery (Part 2)

Audio
Poor Man's MIDI
Make A Metronome
iPod Tricks (Part 1)
iPod Tricks (Part 2)
iPod Tricks (Part 3)
Laugh Track Machine
Audio Player with Reverb
Shepard Melody
RB Phone Home
Build a Drum Machine

Custom Controls and Windows
Double Click Listbox
Draggable Metal Window
Double Click Canvas
Custom Buttons
Custom Buttons Part II
iTunes-style Listboxes
Custom Controls


General RB
Scrolling Windows
Using Mesage Dialogs
Case-Sensitive Word Finder
Introduction to Stacks
Wiggle Window
JPEG in PDF
Listbox Checkboxes
Background Applications
Listbox Auto-Find
Virtual Volumes
Time Tracker
Software Distribution (Part 1)
Software Distribution (Part 2)
Software Distribution (Part 3)
Software Distribution (Part 4)
Exceptions
Tips and Tricks
Text Clippings Made Easy

Graphics
Drawing a Simple Gradient
The SpriteSurface: Space Game
Image Spinner
Cropping Graphics (Part 1)
Cropping Graphics (Part 2)
Cropping Graphics (Part 3)
Cropping Graphics (Part 4)
Shimmer Graphics
Lissajous Figures
Simple Screen Capture
Vector Graphics
Kaleidoscope Images
Stegonography
Spirals!
Image Table
RB Magnifying Lens
Screen Capture
Color Picker Tutorial

Hacks
Ghost Grab
Speedy Mouse Extension
iTunes Plugins
iTunes Skinner

Mac OS X
Global Hot Key Event (Carbon Events)
Login Welcomer (Carbon Events)
Add/Remove Buttons
Resizable Sheets
Mac OS X Preferences Window
Using Sheets in REALbasic
Build a Bundle (Part 1)
Build a Bundle (Part 2)
Dock Your Passwords
Mac OS X Debugging
REALbasic Mac OS X Icon Tutorial
Animate Your Dock
RB and the Command Line

Menus
Window Menu
Templates Menu
Listbox Menu

Novelty
Guessing Game
Calendar Trivia
Tile Mixer
Zip Code Finder
Happy Valentine's Day
Merlin Simulator (Part 1)
Merlin Simulator (Part 2)
Merlin Simulator (Part 3)
Buzzword Machine
AppleSoft BASIC

Printing
Print to PDF

Registration
Registration Code Validation
Network Registration Codes

Resources
Picture Extractor (Part 1)
Picture Extractor (Part 2)

Serial
Caller ID (Part 1)
Caller ID (Part 2)
Caller ID (Part 3)

Speech
Speech Recognition

Socket Communication
Easy Peer-to-Peer File Sharing
MacPAD Version Checking
Display Web Image In Canvas
HTML IMG Tags
Version Tracking
Even Smarter Instant Messaging
Web Tiler
JavaScript and REALbasic
Stock Ticker (Part I)
Stock Ticker (Part 2)
AIM Mate

XML Manipulation
Simple XML Introduction

Video
Big Brother Video Capture

Note: All articles without a byline were written by Erick Tejkowski. When cleaning the site I removed them because the code differed from page to page, and I have yet to put them back in.

resexc2.gif (20k)




REALbasic for Dummies
by Erick Tejkowski

$19.99 @ Amazon





Files are in Stuffit 6.5 or earlier, or ZIP format.
Download Stuffit Expander

Tell us about a bad link.

ResExcellence Laugh Track Machine
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.

  • acceptLaughs As Boolean
  • originalFile as folderItem
  • originalMovie as Movie

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:

  • Press the Open button to load a QuickTime movie
  • Position the MoviePlayer to wherever you would like some laughter. Press the space bar to add a "laughter point". Keep in mind that you can do this by moving the MoviePlayer controller, or by playing the movie in real time.
  • Press the Remove button to remove any errant laughs you added.
  • Press the Save button to create a new movie complete with laughtrack.
  • IMPORTANT NOTE: This project requires that you have a file named "laugh.aif" within the same folder as the project. The download for this project includes a sample "laugh.aif" file.

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!






Please support ResExcellence by Visiting our Sponsors. One click makes a difference.


Download REALbasic and create your own software!

#!/usr/bin/perl -w # # Copyright 2000 by Michael Coyle # Released under GPL. # # Call it with: # [an error occurred while processing this directive] # # Get the file name from the browser... $file_name = $ENV{'QUERY_STRING'}; # Open the file... open (EP, $file_name); # Print to the browser... print "Content-Type: text/html \n\n"; # Load the file and keep spitting it out to the browser... while () { chomp; print "$_ "; } # Close the file and go home... close EP #!/usr/bin/perl -w # # Copyright 2000 by Michael Coyle # Released under GPL. # # Call it with: # [an error occurred while processing this directive] # # Get the file name from the browser... $file_name = $ENV{'QUERY_STRING'}; # Open the file... open (EP, $file_name); # Print to the browser... print "Content-Type: text/html \n\n"; # Load the file and keep spitting it out to the browser... while () { chomp; print "$_ "; } # Close the file and go home... close EP