Google
www ResExcellence

Application Makeovers
Desktop Snapshots
iTunes Skins
Mighty Mouse Cursors
Uploads
Boot Images
Dock Poofs
Links List
Photoshop Goodies
Users Forum
Boot Panels
Download Stats
Log-In Panels
REALbasic
Clocks
GUI Software
Mac OS X Mods
Safari Stuff
Desktop Pictures
Icons
Mac OS X Themes
Splash Screens
Homepage
Download a free demo of REALbasic!
Download a free demo of REALbasic!
Recent Articles...
3D
3D Photo Gallery (Part 2)
3D Photo Gallery (Part 1)

Audio
iPod Tricks (Part 3)
iPod Tricks (Part 2)
iPod Tricks (Part 1)
Laugh Track Machine
Audio Player with Reverb
Shepard Melody
RB Phone Home
Build a Drum Machine

Custom Controls
Custom Buttons
Custom Buttons Part II
iTunes-style Listboxes
Custom Controls

General RB
Wiggle Window
JPEG in PDF
Hey! You got your Checkbox in my Listbox!
Background Applications
Listbox Auto-Find
Virtual Volumes
Time Tracker
Software Distribution (Part 4)
Software Distribution (Part 3)
Software Distribution (Part 2)
Software Distribution (Part 1)
Exceptions
Living on the Edge
Tips and Tricks
Review of REALbasic 3.0
Text Clippings Made Easy

Graphics
Image Spinner
Cropping Graphics (Part 4)
Cropping Graphics (Part 3)
Cropping Graphics (Part 2)
Cropping Graphics (Part 1)
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

Internet
Display Web Image In Canvas
HTML IMG Tags
Version Tracking
Even Smarter Instant Messaging
Web Tiler
JavaScript and REALbasic
Stock Ticker (Part 2)
Stock Ticker (Part I)
AIM Mate

Mac OS X
Using Sheets in REALbasic
Build a Bundle (Part 2)
Build a Bundle (Part 1)
Dock Your Passwords
Mac OS X Debugging
REALbasic Mac OS X Icon Tutorial
Animate Your Dock
RB and the Command Line

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

Printing
Print to PDF

Registration
Registration Code Validation

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

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

Speech
Speech Recognition

Video
Big Brother Video Capture

Newest Dev Tools!

Book Alert !
REALbasic for Dummies
by Erick Tejkowski
$19.99 @ Amazon

Made with REALbasic!

Problems?
Downloads are in StuffIt 5 format (free download).
Tell me about a bad link (Thanks!).
Submission Policy

05-09-02

REALbasic Audio Player with Reverb by Erick Tejkowsi

The REALbasic 4.5 development cycle is really starting to heat up! Among various improvements, REALbasic 4.5a9 adds significant new QuickTime functionality to the mix. This week we'll take a look at some of these new REALbasic 4.5 QuickTime features, focusing primarily on sound. We'll build a simple audio player, add real time reverb effects, and give users the option of saving the result. Try to do that with iTunes!

Introduction

Before you get started, you will need to download a copy of REALbasic 4.5a9 or higher. Keep in mind that REALbasic alpha releases are works in progress. You shouldn't rely on them for professional development. The features and appearance of pre release versions can change at any time. Always back up your projects when using REALbasic alpha releases. Since we will be working with existing media files this time (e.g. mp3, aif, wav, mov, etc...), it would be a good idea to make back up copies of these files as well. You don't want an errant REALbasic to wreak havoc on your only copy of that Kajagoogoo tune you snagged from LimeWire. In other words, take the usual ResEdit precautions: always keep a back up!

Build the Interface

Launch REALbasic and open Window1. To this window, add the following controls:

Control TypeControl NameControl Properties
PushButtonOpenButtonCaption="Open"
PushButtonSaveButtonCaption="Save as Movie"
PopupMenuRoomSizePopupListIndex=4; InitialValue=1,2,3,4,5,10,20,30,50,etc...
PopupMenuVolumePopupListIndex=3; 0,64,128,255,512
MoviePlayerMoviePlayer1 

Arrange the interface however you wish. It might look something like this:

05-09_interface.jpg (14k)

Source Code

Before we get started with the code, we need to do a few preliminary tasks. First, select the Edit-File Types menu. In the File Types dialog, add these two file types:

NameMac CreatorMac Type
any????????
video/quicktimeTVODMooV

Next, double click Window1 to open the Code Editor. Select the Edit-New Property menu to create the following 3 properties:

  1. e as editableMovie
  2. reverb as QT3DAudio
  3. sndTrack as QTSoundTrack

Okay, now we're ready for some code. Add the following code to the Action event of OpenButton:

  dim i as integer
  dim f as folderItem 
  dim trackCount,sndTrackIndex as integer
  dim foundOne as boolean 
  
  
  f=GetOpenFolderItem("any")
  if f<>nil then
    e = f.openEditableMovie
    e.SaveOnClose=FALSE 
    
    //load the player
    //with this movie
    MoviePlayer1.movie = e
    
    //find a soundtrack
    //trackCount = e.TrackCount
    trackCount = e.TrackCount
    foundOne = FALSE
    
    if trackCount>0 then
      for i=1 to trackCount
        if e.track(i).MediaType="soun" then
          foundOne=TRUE
          sndTrackIndex=i 
          //force ourselves out of the loop next time
          i=trackCount
        end if
      next
    end if
    
    if foundOne then
      sndTrack=e.SoundTrack(sndTrackIndex)
      reverb = nil
      reverb = sndTrack.Get3D
      if reverb=nil then
        //no 3D settings in this track
        //so we'll add them
        reverb = new QT3DAudio
      end if
      reverb.SourceMode=1
      reverb.RoomSize = val(RoomSizePopup.text)
      
      //attach the 3D info to the soundTrack
      sndTrack.set3D reverb
      //set the sndTrack's volume
      sndTrack.volume = val(VolumePopup.text)
      
    else
      MsgBox "No SoundTrack in this file"
      return
    end if
    
  end if
  

Next, navigate to the Action event of the SaveButton and add this code:

  
  dim exportMovie as editableMovie
  dim destTrack as QTSoundTrack
  dim f as folderItem 
  
  f=GetSaveFolderItem("video/quicktime","WithReverb.mov")
  if f<>nil then
    //create a new movie to hold the reverb track
    exportMovie=f.CreateMovie
    
    //add a new soundtrack to the movie
    destTrack = exportMovie.NewSoundTrack
    
    //copy the soundtrack from the source soundTrack
    //to the new soundTrack
    destTrack.InsertSoundTrackSegment sndTrack,0,sndTrack.duration,0,TRUE,TRUE
    
    //add a QT3DAudio object to the SoundTrack
    destTrack.set3D reverb 
    
  end if
  

The final step is to add some functionality to the two PopupMenu controls. To the Change event of RoomSizePopup, add the following code snippet:

  reverb.roomsize=val(me.text)
  sndTrack.set3D reverb

Then, add this snippet to the Change event of VolumePopup:

  if sndTrack<>nil then
    sndTrack.volume = val(me.text)
  end

Conclusion

That's it! To test, select Debug-Run. Press "Open" to load your favorite audio file. Since we left it open-ended (i.e. file type="any"), you can load many common audio formats (mp3, aif, wav, mov). Once the audio is loaded, adjust the room size (in meters) to your liking and press "Save" to save the result as a movie. You can download the finished project here. Have fun and see you next week!


5-7-02

REALbasic News by Erick Tejkowsi

New REALbasic Alpha! REAL Software has posted a new development release: REALbasic 4.5a9. This version sports several important fixes and loads of new features. The QuickTime features alone make this alpha a must-see. Now you can create and edit QuickTime movies in all sorts ways! We will cover some of these new features in forthcoming ResExcellence tutorials.

New QuickTime Plug-ins Seth Willits has unleashed two new QuickTime-related plug-ins. FSPlayQTMovie can be used to play a QT compatible movie file without using a MoviePlayer control. FSMovieExtension v1.0 extends the Movie class in REALbasic by adding four methods:

  • Rate() as integer - This will tell you the rate of the movie.
  • SetRate(rate as integer) - Allows you slow or speed up the movie, and even let you play it backwards.
  • Duration() as integer - How long the movie is. This value is not necessarily in seconds.
  • TimeScale() as integer - This is the scale the movie uses for playback.

Cubies Extended! REAL Software has been receiving so many nice submissions for the annual Cubies contest that they decided to extend the deadline to 20 May, 2002. Winners will be announced in early June. To submit a nomination, send an email to nominations. If relevant, please include a url. Only Premier partners are eligible for software categories.

UniHelp Helps Electric Butterfly has updated their handy UniHelp 1.2 Module for REALbasic. UniHelp is a cross-platform HELP Engine for your REALbasic applications. NEW IN VERSION 1.2:Win32 support for the IMG tag, linked images, video and audio.

New Sort Library Charles Yeomans has released SortLibrary 1.7. SortLibrary is a REALbasic library providing robust, optimized implementations of several standard sorting algorithms for use by REALbasic developers. Version 1.7 includes substantial performance improvements to mergesort, a bug fix or two, and some corrections to the documentation.


Application Makeovers
Desktop Snapshots
iTunes Skins
Mighty Mouse Cursors
Uploads
Boot Images
Dock Poofs
Links List
Photoshop Goodies
Users Forum
Boot Panels
Download Stats
Log-In Panels
REALbasic
Clocks
GUI Software
Mac OS X Mods
Safari Stuff
Desktop Pictures
Icons
Mac OS X Themes
Splash Screens
Homepage

Maintained by the Staff of ResExcellence. This entire site ©1997-2003 ResExcellence
Privacy Statement? Sure we gotta Privacy Statement.

[an error occurred while processing this directive]on the ResEx LinuxPPC Server