Audio in Learning Interactions

Why?

A question posted recently pushed me at creating this short post: “....a way to stop the main slide audio when a tab on the interaction is clicked”. I pointed to an older blog where you can find some tips for using learning interactions. It offers a table, tells about their limitations etc. I want to explain why there is no simple solution for this question at all. The audio referred to in the question was slide audio, the used Learning interaction was Tabs. What I explain is also valid for Accordion and Timeline. As I explained in the mentioned blog post, the term ‘Learning Interactions’ was introduced to distinguish the widgets compatible with HTML5 output from the older ‘widgets’ which were created for SWF output. Both have however the same extension ‘wdgt’ and are sometimes both indicated as widget. Terminology can be confusing

Static and Interactive

It seems logical that Learning Interactions are interactive, because they allow the learner to click and interact, and they are listed under the Interactions big button. Indeed, they all have some of interactions internally. However not all are also ‘Interactive object’ in Capativate’s timeline. A Captivate interactive object can be recognized this way:

  • It has an Actions tab
  • Under the Actions tab you find up to two events (Success, Last Attempt)
  • A pausing point is automatically inserted at 1.5secs.

You know the common interactive objects: button, shape converted to button, Text Entry Box, click box. For those objects you’ll see the pausing point immediately on the slide timeline. Moreover the object timeline, when not selected will be green. Look at this screenshot, where I kept the original generic names to clarify the type of objects.

Learning Interactions are internally interactive but as objects in Captivate they also come in the two flavors: static and interactive. You can recognize them by the presence of the Actions tab, with the possibility of scoring and reporting. However the score in the game interactions are not linked with the game results (see article)

Interactive interactions can also be identified, based on the generic name in the Timeline panel. In this screenshot I have inserted two interactions: Tabs (static) and Jigsaw Puzzle (interactive). Look at the generic names:

Look carefully at this screenshot: you see that both interactions also have a colored timeline, but exactly the opposite of what you expect. Please, support me by logging this bug. You may also wonder about the presence of a pausing point? No pausing point for the interactions? The static interaction has indeed no pausing point, you need to add an interactive object like a button, to keep the slide paused. That is needed to allow time for the learner to explore the interaction. However the Interactive Interaction doesn have a pausing point which is not showing in the Timeline panel, you’ll find it in the Timing properties.

Audio Problem

The question was about avoiding having slide audio still playing when the user clicks one of the buttons in the Tabs interaction. That interaction allows  to add audio to a button, which is object audio.  Only object audio allows simultaneously playing of multiple audio clips, either from object audio or, in this case, slide audio. Pausing the slide audio, when a button is clicked in the Interaction would need access to the source code of the widget, which is not available. I can only propose two possible solution to avoid hearing two audio clips at the same time.  I will only explain the first solution in this article. The second solution, with a custom interaction will be explained in a later article.

Interaction available after Slide Audio

This is the easiest workflow. The learner would not be able to use the Interaction while the slide audio is playing. With a normal interactive object that would be easy: disable it for a certain time with and On Enter action for the slide and enable after a certain time corresponding with the audio length. However, even an Interactive Interaction cannot be disabled! You need a workaround.

Steps:

  1. Create a static image of the interaction, either using Captivate or another screen capture app like Snagit. Quality should be good to excellent.
  2. Resize that image to the exact size of the Interaction.
  3. Insert the image on the Timeline and time it for the duration of the slide audio.
  4. Move the learning interaction to appear just after the image.
  5. For a static interaction (like Tabs, Accordion….) you need to insert a button or click box to pause the slide. That is not necessary for an interactive Interaction.

Have a look at this screenshot of the Timeline, which illustrates the described steps:

The timelines from bottom to top:
  • Slide audio, about 3,5secs long
  • Tabs Interaction, starts at 3,4 seconds, extends till end of the slide
  • Image of the Tabs interaction, same location and size, starts from the first frame and ends at 3,8secs; overlap with the Interaction is meant to avoid seeing the transition
  • Click box – duration of the slide –  to pause the slide at its end; it could be a Next button as well.

Custom Interaction

Using shared actions, multistate objects, it is perfectly possible to recreate this interaction on a slide. At that moment you have full control over all objects. To avoid multiple audio clips playing at once, the easiest way is to use only audio started with ‘Play Audio’ command.  If you start a second audio with that command, the first one will be stopped automatically. For this example:

  1. Use Play Audio with the On Enter event to replace the slide audio.  That is possible if you don’t need Closed Captioning.
  2. Use Play Audio in the actions triggered by the Tabs buttons. Clicking the button will automatically stop the previous audio, whether it is the audio started On Enter, or the Audio started with another Tabs button. Object audio would also be possible, if you use the command ‘Stop Triggered Audio’ to stop the first audio clip started On Enter.

Do you want to see the setup for such a custom interaction? Post a comment, please.

Play Audio once on First Visit

Intro

In a previous post I explained the possible workflows to force the learner to view a slide completely before the Next button appears, but only on first visit. This new use case is similar but for another goal. Most courses will have narration explaining how to use the functionality of the course: how to navigate, how to use the TOC, how to pop up extra information, how to use a dashboard/dynamic menu etc.  When the learner is free to come back to those slides, it can be annoying if she/he has to listen to the audio again. To avoid this I will explain two possible workflows:

  1. Using the On Enter event to trigger an advanced action, which will use the Play Audio command based on checking which visit it is to the slide. It is an easy workflow, with one drawback: for the Play Audio command it is not possible to use the Closed Captioning feature packed with Captivate.
     
  2. Since Closed Captioning is only possible with Slide audio, this alternative workflow will use micro-navigation to jump to a frame after the end of the audio timeline. If you didn't read my introduction to Micro-navigation, please use this link

Both workflows can be watched in this interactive movie. Be sure to check out later visits by using the Back button. As explained in the previous post, we'll need a tracking user variable. It starts with a default value of 0 and is incremented with each visit to the slide. 

Workflow 1: Play Audio

For each slide where you want to use this action, you'll need a tracking variable. For the slide in the movie where this action was used, the variable was labeled v_visit_PlayAudio. Look at the Preview of the action, which is triggered by the On Enter event of the slide:

It has two decisions:

  • TrackVar is not conditional, will increment the tracking variable (which started at 0).
  • CheckVisit checks the value of v_visit_playaudio. If the value is greater than 1, which means it is not the first visit, nothing will happen (Continue), if it is not greater than 1, which means the first visit, the audio clip will be played.

Workflow 2: Skip frames

Look at the timeline of the slide with the Touareg salt caravan (Ténéré desert):

The Next button appears at 16,5secs. If the visit is not the first, all frames in 16,5secs have to be skipped. We need a tracking variable, which will be labeled v_visit_SlideAudio. It is not possible to reuse the variable which tracked the visits to the previous slide where workflow 1 (Play Audio) was used. I suppose  free navigation is possible, hence tracking visits will need a variable for each slide where you want to use the workflow. However, the variable v_skip, which is used to store the number of frames to be skipped, can be reused for each slide where you want to use this second workflow. It doesn't matter if you want to skip part of the slide to avoid an audio clip to be played the second time, or to avoid that animatios are playing the second time. As you see in this screenshot, the advanced action looks very similar to the one in the first post 'Force first view'.

It is so similar that it was possible to create this action as a duplicate from the one in the post 'First View'. If you are not familiar with duplicating an action, have a look at  Advanced Actions Dialog Box

Afterthoughts

Such a situation with two (or maybe more) similar actions,  immediately triggers this question for me: can I make this easier, can I save time if using this action multiple times. Two possibilities:

  1. Change the advanced action so that the same action can be applied to both situations? There are two differences in the situations: the literal which is the duration in seconds to be skipped (was 10sec in the first post, 16,5sec in this timeline) Second difference is the tracking variable. For the literal a solution could be found, but that is not the case for the tracking variables because they have to be unique for each slide. This approach is not possible for the present situation.

  2. Convert the advanced action to a shared action, with as little parameters as possible. That would also make it much easier to transfer the action to future projects, and as you learned from my webinar (see summary in this interactive movie) due to the presence o the shared action in the Library, much easier to manage. How to do the conversion and use the shared action, will be the topic of my last post in this sequence.