Blog

Posts Tagged ‘Captivate’

Converting Fonts to the PostScript Format

Wednesday, December 16th, 2009

I’m writing this post as a follow-up to the Adobe Captivate Font Rendering post from October because an issue was left unresolved. If the standard font formats are OpenType and TrueType, and even the Adobe Collection of fonts distributed with Adobe programs contains all OpenType fonts, where canyou find the PostScript fonts you need for Captivate projects?

Of course you could purchase them, but that’s not ideal. The price for the PostScript version of one of our client’s fonts is $500 because it’s packaged with the TrueType version (which we already have).

So I searched the Web for an open source converter and found FontForge. To install FontForge on a Windows OS you must also install cygwin. On a Mac you need to install the X11 server. Cygwin and the X11 server will make your machine look enough like a UNIX machine to run the program. This is a fine solution for a developer or technology-savvy person, but I know our Instructional Designers who use Captivate will certainly be intimidated and deterred by the process.

The best solution I found for converting any type of font to a PostScript format is FontLab‘s product TransType Pro, which costs $179. Unfortunately the demo download for TransType does not allow you to test the conversion of a font to PostScript. Although FontLab products come with a 60-day money-back guarantee, if you wish to test a conversion before making a purchase, you may use the demo download for FontLab Studio to convert 20 characters of your font set. You can then test the font in Captivate using only those 20 characters to see if the conversion will meet your standards.

A Comparison of Captivate and Flash Audio Output

Wednesday, October 21st, 2009

The Problem

Recently I was working on a project that required a combination of an animated introduction with music and alternating sections with a video of the host talking and a Captivate movie with the host’s voice synced to the movie. We had never combined Captivate SWFs with audio and Flash SWFs with audio in the same project, and we found it difficult to match the audio quality of the final SWFs. No matter what compressions we tried, the Captivate files sounded worse. Because we were short on time, we saved the Captivate files as FLAs and exported the final SWFs from Flash so that the sound quality would match.

The solution worked, but I was left wondering if there was a way to match the sound quality of audio output in Flash and Captivate without exporting to Flash.

The Research

I searched the web for help answering this question. The first piece of information I found was that a non-critical patch for audio degradation had been released for Captivate 4 in May 2009. Non-critical patches do not get downloaded as an automatic update—you have to go to Help > Updates and download it yourself. I did this immediately because it not only improves the audio, but it fixes a memory leak, compile problems and more.

The patch helped but it didn’t completely solve the quality discrepancies between Captivate and Flash.  My next stop was Mark Siegrist’s elearninglive.com blog. In July 2008, Siegrist started blogging about Captivate audio output. He tests the effects or the three configurable audio parameters on the audio quality and files sizes. The series is missing the final post summarizing the results and recommending settings to use for the best file size-to-quality ratio, but the existing posts are incredibly informative and contain examples that you can listen to and compare. I have listed the posts below.

This series of posts allowed me to begin testing right away. I decided to test whether or not importing different audio formats (WAVs and MP3s) at different qualities would help me find a way to match the audio in Captivate to the audio in Flash.

The Testing

I imported a variety of MP3 files into both Captivate and Flash, trying to match the audio quality to the published SWFs. The MP3s included 128kbps/44.10khz,  64kbps/44.10khz, 48kbps/44.10khz and 48kbps/20.50khz 16-bit files (Captivate only accepts 8-bit and 16-bit audio files). Even the 128kbps/44.10khz file in Captivate had slightly more static compared to the 48kbps/44.10khz file in Flash, with publish settings in each program set to match those of the native files.

Although WAVs imported into Captivate get converted to MP3s when you publish to a SWF, I decided to try importing a 128kbps/44.10khz 16-bit WAV file into Captivate to see if I would get better results than the MP3. The results were the same.

The Solution

It’s best not to mix Captivate published SWFs in the same project as Flash published SWFs. We are often able to get around this problem by having a Flash wrapper handle all audio for the course, though this creates difficulties when the Captivate and audio need to be synced. In cases where audio needs to be synced, the quickest and easiest solution is to save your Captivate file as an FLA and publish in Flash.

But don’t get the wrong idea—just because these solutions worked for us doesn’t mean that Captivate has poor audio compression. That is not the case at all. As you can hear in Siegrist’s posts, you can get very good quality audio in Captivate published SWFs.

The Summary

I could not find a way to match the audio quality of SWFs published from Captivate and SWFs published from Flash, although I was able to improve the Captivate results by downloading the patch. I also learned from Siegrist’s posts that the best file size-to-quality ratio can be achieved using 48kbps/44.10khz compression with an encoding speed of 8.

The question remains—is Captivate audio compressed the same way as Flash audio? I could not find documentation from Adobe that would help me answer this question, but my tests lead me to believe that audio compression for the two programs is not the same. If you have any information you can share with me on this topic, please leave a comment below.

Adobe Captivate Font Rendering

Friday, October 16th, 2009

The Problem

When trying to create a theme for Captivate, I discovered our client’s preferred font, Whitney set to 12 pts, which was illegible in the program and in the published SWFs. So I did some research on font rendering in Captivate and came across several possible solutions. Below is a summary of my research, test results, and conclusions:

The Research

I started by searching the web for documentation on Captivate’s font rendering engine and I requested information from RJ Jacquez, the Adobe Evangelist for Captivate. The web search for documentation resulted in one useful article on the CommunityMX web site: Text in Captivate, by Tom Greene. The article does not have a date but the support file for this article was dated 9/12/2005, therefore I assumed it was written about one month after Flash 8 Player was released and the author would have been using Captivate 1. Considering the age of the article I read it with caution.

According to Greene, Captivate turns letters into bitmaps, using Microsoft products such as MS Word as the benchmark for font rendering. The Captivate team chose to do this rather than use the Flash font rendering engine because Flash could not display small point sizes adequately. Greene would have preferred the Captivate team to just inform developers to stop using bitmap fonts. One additional issue with Captivate is that Captivate displays fonts 2-3 points larger than Fireworks, so a 9 pt Arial in Captivate looks like 12 pt Arial in Fireworks.

I requested help from Jacquez through Twitter (@rjacquez). At first he replied saying he would look into my problem and get back to me as soon as possible. He later replied that he is “not in documentation” but would share my query with the team. A dead end for me… and so it was time to sit down and do some testing to see if Greene’s insights would still hold true with the Flash Player 10 and Captivate 4.

The Testing

Initially I set up a font test in Captivate and one in Flash using Postscript, TrueType and OpenType fonts. Below is a screen capture of my results. Notice how all the fonts in Captivate have jagged, unaliased edges while the Flash fonts are smooth because they are aliased. The distortion of the Captivate fonts is worse for OpenType and TrueType fonts because Postscript fonts are meant to be rasterized for print, and therefore look better when they are rasterized and turned into bitmaps.

Although these were the results I should have expected after reading Greene’s article I was still surprised. The OpenType format was developed by Microsoft in partnership with Adobe, and Adobe has a set of OpenType fonts they distribute for use with their programs, so I never would have expected one of their products would do such a poor job of displaying those font types.

Lastly, take note of the variation in display size between the Captivate and Flash fonts, despite all fonts being set to 25 pts. I measured the difference between the first letter in the Captivate font and compared it to its Flash partner. For each font the Captivate display was 5-7 pixels larger!

This test reveals that the information in Greene’s article from 2005 still holds true. The basis of Captivate’s font rendering engine has not been improved since Captivate 1. The next step was finding a work around.

The Solutions

My mind first jumped to embedding the fonts in Captivate. There is no embed option in the program so I thought I might be able to place a Flash SWF embedded with the fonts in the Captivate project. When that didn’t work I searched the Adobe forums and tried many other potential solutions that involved changing settings in Captivate and on my computer. All I learned is that I’m not the only frustrated person, and there is no way to embed fonts in Captivate or make the fonts render better without Flash.

If you can use Flash for a project, there are two solutions. The first is to save your Captivate file as a Flash file, open the file in Flash, embed fonts in any dynamic text fields and then publish the SWF. This is the best solution if you need a font to be used throughout a project that does not render well in Captivate.

The second option is best if you plan to use a font that does not render well in Captivate on a limited number of slides. Simply create your slide in Flash, publish the SWF and insert it into Captivate. If you are using dynamic text fields in the SWF, ensure all text is embedded, because Adobe warns that Captivate does not display device fonts. This means that if you don’t embed your text in Flash, you won’t see any text at all. I also found you cannot allow dynamic or static text to be selectable because if a user selects it, the text may disappear.

The Summary

In summary, if you need to work in Captivate and cannot use Flash for a project, you are limited to carefully choosing your fonts. My general recommendation is to use Postscript fonts since they tend to look best. If you plan to have any dynamic text fields in your project (i.e., text entry fields) you will want to stick to common fonts since Captivate cannot embed fonts, and users who do not have the fonts installed on their computer will not be able to see them.

Controlling a Captivate Movie in Flash

Wednesday, July 1st, 2009

Many of our eLearning projects involve importing Captivate files into another Flash file, which usually serves as a wrapper file for the course that contains navigation. Recently I went looking for a way to better control the Captivate files from our custom Flash file and found a great list of Captivate 3 variables for playback control which I’ve copied below. This list can also be found in the Captivate 3 Live Docs.

rdcmndPrevious = 1: Go to previous slide.
rdcmndNextSlide = 1: Go to next slide.
rdcmndPause = 1: Pause the project.
rdcmndResume = 1: Resume showing a paused project.
rdcmndRewindAndStop = 1: Rewind and stop the project.
rdcmndRewindAndPlay = 1: Rewind and play the project.
rdcmndGotoFrame: Go to a specific frame.
rdcmndExit = 1: Exit.
rdcmndInfo: Display the information window (in Captivate 2 this variable is rdcmdInfodisplay).
rdinfoFrameCount: Total number of frames in the project (this is not the number of frames in the main Timeline, but the sum of all slide frames)
rdinfoSlidesInProject: Number of slides in the project (including hidden slides)
rdinfoCurrentFrame: Current frame
rdinfoCurrentSlide: Slide currently playing (zero based)
rdinfoSlideCount: Number of slides in the project (not including hidden slides)
rdIsMainMovie: Can be used to identify whether the SWF corresponds to the main Adobe Captivate project

According to Matt Maxwell’s blog post “Controlling an Imported Captivate Movie” there are three additional variables not published in the Adobe Captivate Live Docs, and those three are listed below.

rdcmndHidePlaybar: Used to hide or show the playbar 1= hide 0=show
rdcmndCC: Used to show or hide Closed Captions 1= show 0=hide
rdcmndMute: Used to mute or unmute the audio 1= mute 0=unmute