The Adobe Captivate, Presenter and eLearning Suite Product Management team will meet with customers in the US during the weeks of March 21 and March 28. These are amazing opportunities to participate Continue reading…
Posts in Category "Under the hood"
Further to Shameer’s post on “Publish to iPhone from Captivate and eLearning Suite“, here are the next steps to generate the iPhone app. from your Captivate SWF.
These are manual steps and you need to use the terminal/shell to execute the command on a Mac machine where you have your Apple Developer Certificate and Provisioning Profile installed: Continue reading…
Over the last few months, a few users have reported that they have observed an audio cut in the published output of their Captivate projects. This can happen when a continuous audio* is present on all slides of the project and also in the case of discontinuous audio^. If you have observed this issue in your published projects and this is happening even after installing the patch, don’t worry, here are three simple steps you have to follow to get rid of this problem.
Install Adobe Captivate patch from here: http://www.adobe.com/support/captivate/downloads.html
You can also initiate the update process from the application by navigating to Help >> Updates. This will bring up the Adobe Update manager and list the updates available for Captivate.
Read the release notes for the patch here: http://kb2.adobe.com/cps/881/cpsid_88142.html. Follow the instructions mentioned in the “Using the AudioOptions.ini file to obtain the fix for the audio issue” section in the release notes to place the “AudioOptions.ini” file in the Installed folder of Captivate.
Step1 can be skipped if you have already installed the patch. Captivate build number after installing the patch should be 188.8.131.524
Now launch Captivate and open the project which has Audio cut issue. Select all the slides in the project. (Select the first slide and Shift+Select the last slide). In the Slide PI change the “Slide Exit” action from “Go to Next slide” to “No Action”
In the “Publish dialog” tick in the check box “Force re-publish all the slides” and then Publish.
Now the published output should play entire audio present on slides and no audio cut issues should be seen.
* Continuous audio – Audio, with duration equal to slide timing, present on all the slides of the project
^ Discontinuous audio – Audio present only on certain slides of the project
Captivate playbar swfs have a complicated structure. Though you can create a playbar from scratch, its advisable to duplicate an existing playbar FLA file and make changes in it to suit your needs. You can find the source FLA files for the canned playbars in the following location:
<Adobe Captivate Installed Directory>\Templates\PlaybackFLA\AS3
Height of the playbar:
To change the height of the playbar, adjust the height of pbcBk_mc movie clip inside cpPlaybar symbol in Library. Also to get correct height, you need to change the height of the shape present in pbcBkHeight symbol in Library. pbcBkHeight symbol should contain a single shape (without stroke) and its height should equal to that of the background height set in pbcBk_mc.
Each playbar button except slider should follow this structure:
- icon_mc – A movie clip on which Button Icon color will be applied
- btn_mc – Each btn_mc movie clip should follow this structure:
- color_mc – A movie clip on which Button Face color will be applied
- glow_mc – A movie clip on which Button Glow color will be applied
- mouse states – Need frames with these labels – up, down, rollover. Whenever a mouse up event (or normal state) occurs on this playbar button, it will be asked to jump to the frame with label “up”. Similarly for “down” and “rollover” frames when mouse down and mouse over events occur respectively.
- actions – A layer with action script in its first frame. It should have the following actions:
- btnTipsId – a variable which specifies the index of the tooltip array to be picked up when mouse is hovered over the playbar button [More about this array in Tooltips section below]
- onClicked – A function which calls parent.onPBCBtnClick() with a valid action. These are the list of valid actions – “rewind”, “back”, “play”, “pause”, “forward”, “cc”, “audioOn”, “audioOff”, “exit”, “info”, “TOC”, “FastForward”, “FastForward1″, “FastForward2″ and “print”. – Based on the functionality of the button you need to give appropriate name.
Slider should have the following structure:
- thumbBase_mc –background movie clip of the slider (Button Face color)
- proClr_mc – a movie clip to show the completed progress of the movie (Button Glow color)
- thumb_mc – a movie clip which indicates the play head (Button Icon color)
- actions – mouse up and mouse down listeners which will call parent.onSliderMouse(false) on mouse up and parent.onSliderMouse(true) on mouse down.
All the colors (Button Icon, Button Face, Button Glow) can be applied in Captivate Skin Editor. Background color in Skin Editor will be applied to the movie clip named pbcBk_mc inside cpPlaybar symbol.
Playbar movie clip is the movie clip which contains all the playbar buttons, background movie clip and a background height movie clip. It should have the following movie clips (specified below are instance names):
- pbcBk_mc – Background movie clip
- pbcRewind_mc – Rewind
- pbcPause_mc – Pause
- pbcPlay_mc – Play
- pbcBack_mc – Backward
- pbcForward_mc – Forward
- pbcFF_mc, pbcFF1_mc, pbcFF2_mc – Fast Forward
- pbcSlider_mc – Slider
- pbcAudioOff_mc – Audio Off
- pbcAudioOn_mc – Audio On
- pbcTOC_mc – Table of Contents
- pbcCC_mc – Closed Captioning
- pbcExit_mc – Exit
- pbcInfo_mc – Info
- pbcPrint_mc – Print
- pbcBkHeight_mc – a movie clip to determine the height of the playbar [See Height of the playbar section for more details]
pbcBk_mc and pbcBkHeight_mc should be placed compulsorily. The rest of them are optional. However if all of them are present, user can choose either to have/not have them from Skin Editor.
pbcPlay_mc and pbcPause_mc are mutually exclusive at runtime. Only one of them can be visible. Similarly pbcAudioOn_mc and pbcAudioOff_mc are mutually exclusive.
Finally place the playbar movie clip on the main timeline with the instance name as pbcBar_mc. You can have an optional auto play button placed on the main timeline with the instance name autoPlay_mc.
To change the tooltips, find the MovieClip named Localization in the library. Open this symbol and go to its Frame 1. Here you can find the tooltips for the playbar buttons. Change them based on the requirement. Apply caution while changing the tooltips. Changing the order of the array elements will result in incorrect tooltips. If you want to change the language of the playbar, assign the appropriate array variable to pbcBtnTips variable. btnTipsId variable inside playbar buttons refer to the index in this array (pbcBtnTips).
Reordering Playbar buttons:
Playbar buttons will always be placed in the following order:
There is no direct way in which you can change this order.
Auto Reordering trick: However you can change atleast the order/layout of some of the buttons in this way: Renaming the instance names of pbcRewind_mc as pbcExit_mc and vice versa will swap the position of Rewind and Exit buttons.
However you might not be able to do this for every button because of some linking buttons play/pause, audio on/off and Fast Forward buttons.
Manual Reordering trick: If you want to hard code the positioning values, you can do so by adding an event like OnEnterFrame in background movieclip and then set the values for the button positions.
The code below will move positions for either Top or Bottom stretched. If you are using the playbar positioned on either side then you can change the x to y and play about with the values until the buttons are in the position you want. You need to check the registration point of the buttons and accordingly adjust the x and y positions.
Open the desired skin template FLA and open the symbol pbcBarBkColor in the library and add the following script in its first frame.
I’m also attaching a couple of sample playbars where the ordering is changed.
If you have created a new playbar swf, you need to place it in the following location for Captivate to pick it up:
<Adobe Captivate Installed Directory>\<lang>\Gallery\Playbars\AS3
Just close the Skin Editor if it is already open and open it again. You can check your new playbar in the playbar drop down.
Adobe Captivate customers have always been very active on the forums. It has been a great place to interact with customers, resolve their issues and learn more from them. Recently our customer Paul Thrippleton raised a CPTX file size bloating issue in forums. Thanks Paul for raising the issue. We worked on it and have found out that the issue is seen because of the audio files (.wav and .mp3 files). Although we will be surely fixing it in the next release, the good news is we have an easy workaround to overcome the problem.
Let me first explain the problem:
One of the ways to insert audio file in Captivate, is to insert it on slide and using the “Audio Split Options” dialog, spread it across another slides.
Insert an audio file on slide or directly in library. Then duplicate the audio file in library
Insert an audio file on slide or directly in library. Then “Update” the audio file in library.
In above scenarios the file size of the CPTX file increases more than normal. This issue is not noticed if the audio files are smaller in file size because then the increase in CPTX file size too will be not so noticeable.
Note: This issue happens only if you have inserted audio in Captivate and performing any of the above scenarios without editing the audio file.
We have a simple workaround to the problem.
-Once the audio is inserted into the Captivate project, go to library.
- Right click the audio file and select “Edit with Captivate”
- Make a minute modification in audio file waveform. (Delete small portion of audio) and save the changes.
Now you can apply any of the scenarios mentioned above and they will work without increasing the CPTX file size.
- This issue is not noticeable when audio files are of smaller sizes.
- This issue affects only the CPTX file size and cannot affect SWF file size.
- Issue is seen only if you perform above scenarios using an unedited imported audio file.
- This issue is only in Captivate 5 and not in any other releases of Adobe Captivate.
Have you ever used Adobe Captivate widgets? Widgets can enhance the type of content you can create with Adobe Captivate. You can leverage the complete capabilities of Adobe Flash via widgets. Once created, widgets can be used any number of times just like any other Captivate object. This really helps in creating engaging rapid elearning content. Captivate ships with a number of useful widgets. Captivate widgets are basically swf files which follow certain rules. One rule being (the blog is about this rule), the widget swf should register certain callbacks via External Interface. These callbacks should be made in the first frame of the swf.
Most of the widgets created for Captivate are Adobe Flash based widgets. Creating widgets using Adobe Flex/Flash builder is a little tricky. But once you get to know that, creating really powerful widgets takes no time. With Flex, you can leverage the vast set of inbuilt components which are powered by Flex framework to create rich and engaging Captivate widgets.
If you had ever tried creating a Captivate widget in Flex, I guess most of you wouldn’t have succeeded. You might have tried adding the External Interface callbacks either in applicationComplete or creationComplete handlers of the Application class in Flex. This method doesn’t work because Flex creates the Application in its second frame, where as Captivate expects the callbacks to be added in the first frame.
So, here we are providing a hassle free way to create Flex based widgets for Captivate. Follow these four simple steps and you can create your Flex based Captivate widgets in no time.
Step 1: Include the two ActionScript files provided below, in your Flex project.
Step 2: In your main mxml file, Change the mxml application start tag from
<s:Application to <cp_widget:CPWidgetApplicationBase xmlns:cp_widget="*"
And the end tag from
</s:Application> to </cp_widget:CPWidgetApplicationBase>
Step 3: Open CPWidgetSystemManagerBase.as and set the properties marked in TO BE SET BY WIDGET DEVELOPER section, according to your requirement.
- Set this to true, if you are overriding IsReadyForSnapShot function in your main application, else keep it false
- mWidgetType :
- To create a static widget, set mWidgetType to 0
- To create an interactive widget, set mWidgetType to 1
- To create a question widget, set mWidgetType to 2
- If you want a specific Edit Mode width, set this parameter, else set it to -1
- If you want a specific Edit Mode height, set this parameter, else set it to -1
Step 4: Override the widget specific methods provided in CPWidgetApplicationBase.as file in your main mxml file. For example, if you are trying to create a static widget, add these methods in your main mxml file and build the logic.
- override public function getInspectorParameters():Object
- override public function setInspectorParameters(inParam:Object):void
- override public function setParameters(inParam:Object):void
- override public function cpSetValue(inVariable:String, inValue):void
- override public function IsReadyForSnapShot():Boolean
Overriding all the functions is not a must. Choose which functionality you want in your widget and proceed accordingly.
That’s it!! It’s not difficult at all.
Optionally, if you want to mute further calls from Captivate, which might be required when you do state changes in Flex, call setCanDelegateCall(false) in your application class. When you want to unmute, call setCanDelegateCall(true).
If you are using mx:application, then you need to do these changes in CPWidgetApplicationBase.as: Uncomment, Import mx.core.Application; and comment out import spark.components.Application;
In case you are having issues with getting the flex widget to work, you need to merge the Flex framework into the swf. To do so, Goto Project > Properties > Flex Build Path > Library Path > Select the Flex SDK and choose ‘Merged into Code’ as the linkage type.
Provided below are sample flex based widgets for Adobe Captivate 5 created in Flex along with the source.
MyFlexWidget is a static widget, which displays whatever is entered into it in widget properties.
MyInteractiveWidget is an interactive widget; you can select which button is the correct one among the given two, and that one will act as the correct answer
MyQuestionWidget is a question widget; which has similar functionality as that of the interactive widget.
Try them for yourself!
Update: To compile the samples, you need to update the class path.To update the path, Goto Project > Properties > Flex Build Path > Source Path > Edit.
Just update the path to the following.
[Adobe Captivate Installation Directory]\ActionScript\export\as3
[Adobe Captivate Installation Directory] is the directory where captivate is installed. Typically it will be C:\Program Files\Adobe\Adobe Captivate 5
Many trainers start their eLearning content authoring from MSPowerPoint. And then use tools like Adobe Captivate or Adobe Presenter to covert these PPTs into elearning courses. Captivate automatically adds click based navigation to progress from one slide to another when you import a PPT slide deck into Captivate. But some of us prefer to provide something more fancy, with custom navigation buttons to move back or advance forward thru an imported PPT slide deck. A popular way to do this is to add text buttons or click boxes using Captivate.
Now if your PPT slide deck had custom animations that advanced based on a mouse click (or keyboard shortcut), this tends to interfere with the Captivate navigation buttons added to the same slide. If the ‘on success action’ for your Captivate button is set ‘Continue’, it doesn’t go to the next slide all the time. If you set it to ‘go to the Next Slide’, it then skips the PPT animations on that slide.
This problem can be resolved using this workaround:
1. When importing the PPT slide deck, choose -> ‘advance slides automatically’.
2. Insert text buttons on the slides that require navigation. Label them appropriately as ‘Next’ or ‘Previous’.
3. Set the ‘on success action’ for the ‘Previous’ button to ‘go to the previous slide’.
4. Choose ‘execute advanced action’ as the on-success action for the ‘Next’ button.
5. Create an advanced action with only “Continue” as the action in it and attach it to “Next” button as sown below
This now ensures that all PPT animations are triggered one after the other based on the user click (or a chosen shortcut key-like ‘enter’). Also, like the original PPT flow, the user navigates to the next slide on clicking the ‘Next’ button after all the animations on the current slide are completed.
Sometimes Captivate 5 fails to open a project file (.cptx). This might have happened due to some corrupt data structure. The preferred way to avoid data loss is to enable project backup in captivate through Preferences (Edit (on Windows)/Adobe Captivate (on Mac) > Preferences > Global > General Settings > Generate Project Backup). This will create a .bak file for your project (from second save onwards), which will contain the previous saved state of the project.
However, you may try out the following steps to recover full data (up to the latest state of the project). If the data files in the project cache are intact, then this workaround should restore your full project.
1) Go to http://blogs.adobe.com/captivate/2010/09/new-utility-for-deleting-adobe-captivate-project-cache-folders.html, download the “dcache.zip” and install the air app inside the zip (as mentioned in the blog).
2) Start the air app and select your “project cache location” using the “Browse” button (the default location is” My Documents\Adobe Captivate Cached Projects”). Now click the “Refresh” button. This will list all the project names for which the project cache folder is available.
3) Check if you can see your project (which is not opening in captivate) listed there. If yes, then double click on that row in the air app, this should display a dialog containing the “Cache Path” as shown in the image below.
4) Now go inside this “Cache Path” folder and inside the “db” sub-folder, check whether the following exist in it:
a) compressed_data (folder)
b) objects (folder, this should contain an objects.cpo file and its size must be > 0 KB
c) uncompressed_data (folder)
d) audio.cpad (file, size > 0 KB)
e) info.cpi (file, size > 0 KB)
f) text.cptd (file, size > 0 KB)
g) thumbnails.cpth (file, size > 0 KB)
If these folders and files are present, then select them and create a zip file. Now rename this .zip to .cptx.
Note that there may be other files/folders inside “db” (e.g. already_in_use.lock, backup_data, etc.). Don’t include them while creating the zip, just include the ones mentioned above
5) Open the .cptx file in Captivate 5.
Note: This workaround may not work always.
In some scenarios the newly created cptx (created in step 4 above) might have some unsaved changes also (e.g. when the project had some unsaved changes and Captivate crashed, you may see those unsaved changes in the cptx sometimes).
Project cache in Adobe Captivate 5 helps you save and open projects faster. When you create a project in Adobe Captivate 5, a corresponding project cache folder is automatically created. This folder is saved in the project cache root folder specified in the project Preferences.
For more information on project cache in Adobe Captivate 5, see http://blogs.adobe.com/captivate/2010/07/cp5_project_cache_behind_the_s.html.
Over time, these cache folders may use up your system resources and you may want to delete the folders to optimize the resources. You can delete the folders using the ‘Clear Cache’ option in the project Preferences. However, this method can be time consuming if you want to delete multiple project cache folders simultaneously.
The new utility from Adobe, Clear Cache Application, lists all the Adobe Captivate 5 project cache folders on the system along with the corresponding project name, size, status of the project (opened or closed), date modified, and cache size. Using this information, you can decide which cache folders you want to delete and quickly delete multiple cache folders with a single click.
To install and use this utility, perform the following steps:
- Download dcache.zip and unzip the contents
- Double-click the file dcache.zip and follow the on-screen instructions to install the utility.
- After the installation, the Clear Cache Application opens and lists all the project cache folders in the default cache location.
- To view the cache folders in a different location on your system, click Browse, and navigate to the location of the folder.
- To delete a cache folder, select the check box that corresponds to the folder and click Clear. To delete all the folders, click Select All, and then click Clear. Please note that currently opened projects cannot be selected for deletion.
Audio makes your elearning content more engaging and useful to learners. You can add audio to your Adobe Captivate project either by recording yours or somebody else’s voice directly or by inserting a previously recorded audio file (.AVI, .WAV). When you add audio to a slide, it appears as a separate ‘element’ in the timeline. You can synchronize the audio with the slide by adjusting its timeline.
When you publish the project, Adobe Captivate embeds the audio within the output file. The embedded audio can be a single file or multiple files based on the timing and type of audio. Adobe Flash Player that plays the Adobe Captivate movie also plays the audio along with the movie.
Sometimes, you may notice a lag in the audio timing and that it is not synchronized perfectly with the movie. The audio that must ideally end with a slide spills over to the next slide. In this article, let’s examine why such issues occur and how they can be solved.
Why does this issue occur? Before understanding the reason for this issue, let’s first understand how Adobe Captivate publishes audio.
Whenever an audio starts and ends at the same time as that of the slides, Adobe Captivate ‘stitches’ up the audio objects on the contiguous slides into a single file when the project is published.
Suppose the audio on slide 1 runs till the end of the slide as shown below:
The audio on the next slide, slide 2 starts right from the beginning of the slide as shown below:
In such a case, the audio files on both the slides are ‘stitched’ and published as a single audio file. Similarly, if all the slides contain audio that start at the same time as that of the slides and spread till the end of slide, Adobe Captivate creates a single audio file in the published output.
Note: If the audio on the contiguous slides are of different types (mono and stereo), Adobe Captivate generates separate audio files for each of the types even if the audio starts and ends at the same time as that of the slides.
Adobe Captivate is designed to do so to logically stitch up users’ narrations that are done during or post-recording of a screen or application. A single audio file helps to keep the continuity in the narration intact.
Adobe Flash Player plays the Captivate published audio and stops only when the specified duration elapses or when you intervene and stop it. Therefore, with a single audio file in an Adobe Captivate movie, the audio and video run parallelly at their own pace resulting in synchronization issues.
Is there a workaround? Yes, a very easy one. Tweak the audio timing in such a way that Adobe Captivate generates and embeds multiple audio files in the output. To do so, extend the duration of the slide a little more than that of the audio. For example, if the current slide and audio duration is 4 seconds, extend the slide duration by another 0.3 seconds, and retain the audio duration at 4 seconds.
The following illustration shows the difference between the audio and the slide duration:
Now, Adobe Flash player can control the beginning of each audio file at the specified time in the movie.
Captivate 4 introduced text to speech (TTS) technology in Rapid eLearning authoring. Given the adoption and feedback, in Captivate 5 we’ve introduced more voices. Tweaking these voices seem to be one of the most discussed topics on our forums. There were a couple of blog posts last year on tweaking the Captivate 4 voices (VTML tags, User dictionary). These continue to be applicable in Captivate 5 for the NeoSpeech voices. Our other partner, Loquendo, also offers the ability to insert commands in the input text to modify the way words are pronounced. In the next week, we will have a few posts detailing this. But prior to that, here are some best practices to follow when using text-to-speech:
The TTS process exploits only a subset of the complex knowledge base on which a human reader implicitly relies. While it can access grammatical and phonetic knowledge, the artificial system does not come to a true comprehension of the text, lacking the necessary semantic and pragmatic skills. This is why the system cannot deal with ambiguous or misspelled text, nor give different emotional colors to its voices according to text semantics. The system tries to pronounce exactly what is written, applying the standard orthographic conventions for interpreting characters, symbols, numbers, word sentence delimiters and punctuation. The cues to a proper intonation are mainly punctuation marks and syntactic relationships between words.
This means that the best synthesis results will be obtained with well-formed sentences, correct and standard orthography, unambiguous contexts and rich and appropriate punctuation. If you are able to prepare or select in advance the texts that will be fed into the TTS system, then the main rule to follow is: “Write texts according to the standard orthographic and grammatical rules of the language”
Loquendo suggests that you keep to the following simple guidelines:
- Spell words carefully (using the correct character set for the language)
- Use capital letters when grammatically appropriate and apply standard conventions for representing numbers and abbreviations
- Separate words according to the standard orthographic conventions (insert blanks between words and after punctuation marks, when appropriate)
- Avoid ambiguities
- Write short sentences with correct syntactic structure
- Insert punctuation marks frequently and carefully
Some captions and parts of images might have a dark background when published in CP5 with slide quality set as JPEG. The same project seems to work fine when published with CP4 with the same setting. This is because the mechanism to publish images has changed significantly from CP4 to CP5. In this two part blog series we look at information that you can use in Adobe Captivate 5 to parallel decide the quality of an image and the SWF file size and bring forth the differences between the publishing of images in CP 4 and CP 5.
Size of SWF output files is an important consideration for many content developers as it takes longer time for end users to download larger files. Many factors, such as, recording area, colors in the application that is recorded, FMRs, and background noise contribute to a large output file.
Images are one of the factors that impact the size of a project to a large extent – the higher the quality or the resolution of the image, the larger is the size of the project. Most images appear clearly in the output with low resolution; however, in some cases, your projects may warrant high resolution images. Keeping the file size reasonably low with high resolution images can be quite a challenging task.
Note: General tips to tweak the other factors that affect the file size are at
Adobe Captivate 5 lets you choose the level of quality for an image, based on the number of colors and transparency levels you need in the output. These settings can be specified at the slide-level, which makes it convenient for you to have different resolution settings for different images in the project. For example, you may choose to publish the images on the introductory slides with low resolution and those on the core slides with a higher resolution. The different quality levels you can choose for a project are
Low 8 bit – Publishes the images with the smallest size possible. When an image is published as low quality, Captivate tries to determine the optimal 256 colors with which to display a bitmap. This bitmap may contain more than 256 colors.This option works well for most images and for all the screen recorded content, but can fail if the image contains too many colors or many colors with different transparencies. This is usually the case with high fidelity PNGs or imported Photoshop files. JPEG images are still published as JPEG; their compression is controlled by the JPEG quality percentage set in the SWF size and quality preferences.
High 24 bit – Publishes images as bit bitmap images with the highest possible fidelity and no loss of quality. Selecting ‘high’ for all slides results in a large SWF output file. JPEG images are still published as JPEG and their compression is controlled by the JPEG quality percentage set in the SWF size and quality preferences.
Optimized – Publishes all images including JPEG images as high quality bitmap images. This option is similar to ‘high’ . This can drastically increase the file size.
JPEG – JPEG is the jpeg-equivalent of the ‘optimized’ option. This option publishes all images including non-JPEG images as JPEG images. Note that JPEG does not support transparency and transparent images such as PNG images do not appear clearly if published with this option.
In part 2 we will look at the changes from CP4 to CP5 in the way we publish images and how this is causing the dark backgrounds around captions