I’m writing an app which basically performs the following steps in a wizard-like interface:
- Select an audio file of someone speaking + loads a text script in.
- Process the audio file and the script, can take about 5 seconds for a minute of audio.
- Select a character to use in the animation.
- Select some additional graphics and scene settings.
- Use the data generated in step #2.
Sitting there for 5 seconds wasn’t really a problem, not to process a 1 minute audio file. A longer audio file would take a little longer, but 10-15 seconds is okay, isn’t it? Well, what if I could make it take no time at all?
Obviously I can’t, but I can make it look like it takes no time at all. The fact is that I don’t need the processed data until Step 5. The user will probably spend at least 30 seconds twiddling settings in each Step 3 and 4. How much processing power does a bit of GUI interaction take? Hardly any at all!
So I made Step 2 run in a separate thread. As soon as the user clicks “Next” on step 1 they instantly see Step 3. They spend some time there and move onto Step 4. By this point the processing is probably already complete, if however it isn’t I simply disable Step #4’s “Next” button with a flashing label at the top of the form “* Processing Lip Sync”. A 0.5 second timer keeps checking for the completed flag to be set, when it is the label disappears and the button enables.
Unless the user is rushing through the steps they are unlikely to get held up at all. The processing takes just as long as before (maybe a tad longer), but from the user’s perspective it takes no time at all.