Forum Discussion
Can you speed up the player in Articulate 360?
I don't think this has been possible before, but can a user speed up the audio on the player in 360?
Hello Everyone!
I'm happy to share that we have released Storyline 360 version 72 (Build 3.72.29654.0).
Included in this release is a new feature where you can let learners explore at their own pace by choosing a course playback speed between 0.25x and 2x.
Now all you need to do is update Storyline 360 in your Articulate 360 desktop app on your computer. You'll find our step-by-step instructions here.
Please let us know if you have any questions by reaching out to our Support Engineers directly.
Have a great day!
- MarkRamsey-ad71Community Member
Hi,
My code that controls the speed of the video can also work with audio. Attached is a version of the code, where I changed out the JavaScript call of document.querySelectorAll('video') to document.querySelectorAll('audio') in the control buttons, and this seemed to work.
Like before, you have to sum up ALL the audio bits in the entire Storyline file, then set the variable "numberOfVideos" (I didn't change the name but you can if you want - probably "numberOfAudios" might make sense if you don't mind a little grammatical ugliness) to that summed number. For example, if you have 15 slides, all with a single audio layer, you need to set this number to 15. [It's really a constant & never changes value — Storyline doesn't allow for constants per se, nor arrays (grrrrr.)]
This isn't as nice as Matt's code using GSAP, but it does have the benefit of being a little more universal. I'm just wary of Articulate perhaps dropping GSAP like they did jQuery.
This code will still make the Seek bar fall out of sync with the audio playback, but perhaps you could use the play media triggers, and not use the player timeline. It all kind of depends if you really want to tie the audio to the slide timeline. If that's not a big deal, you could drop the Seek bar, use the Play Media trigger, and then put up an animated GIF (see attached) in the corner to inform the view that an indeterminate-length audio bit is playing back - then make it disappear when the audio is done playing. This approach is a little less intrusive IMO if you have a long audio monolog, which we have unfortunately many times in our courses.
HTH,
Mark
- MaryMicheliniCommunity Member
Mark, I think I can thank you on behalf of our forum community. I (we) have been searching for awhile for some kind of solution to this unfortunate shortcoming in Storyline.
I will try your code and see how it goes. I am new to Java script but plan to learn it now! It keeps coming up. I will let you know the results.
- MathNotermans-9Community Member
I dont think you have to be afraid of Articulate dumping GSAP. It is so deeply built into Storyline's code...do open slides.min.js and unminify it... you find dozens of traces of GSAP usage. All Storyline's default animation features including eases, motion paths and the alike...are build on GSAP. If they dump it, they have to rebuild Storyline from scratch as its now ( 360 at least )
- MarkRamsey-ad71Community Member
I agree that Articulate probably won't dump the use of SAP for awhile. In reviewing the GSAP tutorials, it makes me wish that they would build some extra editors in an enhanced version that could open up these more advanced animation tools for usage. Unfortunately, my current position probably wouldn't want me to investigate this, because in the main we generally "churn and burn". But I think if I could show something like a Ken Burns effect, which it looks like GSAP is already set up to do, I could interest a few people!
- AlheliRiosIxtaCommunity Member
Hi
Thank you very much for your contribution; however, I would like to know how I can add to the code so that the speed of the slide is saved and the next slide will respect the speed used in the previous slide.
Thanks Ali.
- LauraSeulCommunity Member
Hi Mark,
First, thank you so much for posting your workaround. There is probably an obvious answer to this but, I am not very familiar with javascript. If I have multiple videos, say 8 slides with different videos, where in the code would I change it to 8? What exactly do I need to put in there?
Thanks again,
Laura
- MarkRamsey-ad71Community Member
You count up all the videos, set "numberOfVideos" to that number, then whatever slide you want to control, you put that control layer in. Then, when the timeline starts, have a trigger that shows the layer.
The variable "numberOfLayers" you would set to 8 only once. Then in your case you would copy that control layer - the one with the buttons - into each slide with a video. Then on the main timeline of these slides you would put a trigger that will show the control layer.
- LauraSeulCommunity Member
Thanks Mark! I think I understand. I'll try it out.
- MarkRamsey-ad71Community Member
I’m not certain why it doesn’t work in Review 360 for you. It does for us. [I just checked it again because of self-induced paranoia.] I never publish to web — I publish to LMS or Review 360. But publishing to web is the same as to LMS except for the xml files & manifest that gets generated. If you have a SCORMCloud account, I'd upload the package there & run it, and read the logs to see if there were any errors thrown.
I'd also just recheck to count up ALL your videos that are contained within the course file (even if they are incidental) and set the "numberOfVideos" variable to that value. For example, we have a course template for simply putting a content video into a course, but we also have a brand video and a help video about captions that runs before we even get to the content. Adding the content video gives us 3 videos, so I set "numberOfVideos" to 3.
I can look at your code if you want.
- MaryMicheliniCommunity Member
Hello Mark,
When readying my file to send to you, I noticed that when I DUPLICATE the slide you sent (with your JavaScript controller inside), and build from there, your controller works in Review 360 (and in SCORM Cloud); when I COPY AND PASTE your slide into one of my existing scenes and build from there, it fails to work. If you happen to have an idea why, that would be most interesting.
Meanwhile, I'm fascinated by JavaScript and am studying it so that I can figure out how you did this! Thank you again for your contributions to our community of learners!
Best,
Mary
- MarkRamsey-ad71Community Member
Mary, I have time to look at your code -
- VanessaEk-64de7Community Member
Adding my name to the list of people that would like to see the feature added - the ability for the learner to change the play speed.
- MarkRamsey-ad71Community Member
In response to the idea of using the GSAP library to control audio or video:
I'll written to Articulate to ask them what their plans are for Greensock GSAP. [I probably will not get a response, but I had to try.] I am leery of working with a clearly licensed, third-party library that could change at any moment from either Greensock or Articulate (who knows, they might find a vulnerability & need to close it down.) However, I have delved into GSAP a little in the past week, and came up with a (similar to) "Ken Burns" slow-zoom animation effect. I see a lot of power in using this approach. If I lose this due to a change in animation libraries in the future, that won't change my layout that much. The GSAP model creates new timelines that run independent of Storyline, so my initial layout conditions won't change much.
My best advice right now is "let the user beware" & try to figure in your course's shelf life. If you think your course will last for 3 years, I think it's a good bet you can work with GSAP. Luckily HTML5 will be with us for a while & JavaScript is probably not going anywhere either. & Storyline uses Bootstrap & that's a standard. I don't think we have to worry about any large-scale Flash-conversion of courses for the next bit.
- CrystalCuci-b2fCommunity Member
This is a little crazy that this is a feature that MANY people have requested for more than 4 years. Is there a logical reason why this feature has not been added?
Clearly it can be something that is available in the player which can be turned off and on as needed. It's evident that many, many users will enable it. We get this request from our learners all the time.
- MathNotermans-9Community Member
Speeding up video or audio in Storyline with Javascript is actually quite easy. Biggest issue however is the timeline bar that isnot in sync with the updated speed of the changed values. Trying to fix this now.
- CrystalCuci-b2fCommunity Member
Thank you for the response, Math! I read through the comments and saw that it is possible with Javascript, which I know we could implement. However, as you mentioned, I have concern with the timeline, hence all animations, captions, etc. not syncing properly at that point. We could have a button that pop ups when the user clicks to speed it up the player that explains that, I suppose. However, I just want to see it all function properly like most modern players. :)
- MathNotermans-9Community Member
Agree with you... i now have a functioning audio speedup/slowdown function and it works nice... but as said... the timeline itself doesnot know of the speedup and gets out of sync. Trying to fix that now i did find in the frame.desktop.min.js files in the Articulate folder some code that does the progress on the bar...
key: "onTick",
value: function (e) {
var t = 100 * e;
(this.progressBarFillEl.style.width = t + "%"),
this.progressBarEl.setAttribute("aria-valuetext", Math.round(t) + "%"),
(this.progressBarEl.value = this.currTimeline.timeline ? this.currTimeline.timeline.currentTime : 0),
y.trigger(g.currTimeline.TICK, e);
},
the width and the aria-valuetext are the values that show the progress. Im now gonna try to add a variable into that code...that i can use to speedup/slowdown the timeline.
Added a console.log inthere... and indeed the t variable inthere is the elapsed percentage of the timeline. Going from 0-100...onTick t= 99.96249238126495
So if in some way i can influence that variable i can speedup/slowdown the timeline.
Actually the e passed to the function is a value going up from 0 to 1. So i indeed need to find a way to pass the playbackRate from the player to this part of the code.