Newsletter: Learn More ||| Multimedia Presentation Software |||
Wildform Video/Audio Jukebox Tutorial
Note: Flix Pro will automatically output your video in a custom player or add a player to virtually any SWF produced by Macromedia Flash and any third party Flash exporting software.
Contents
Download .FLA
Top
Introduction
This tutorial will cover how to customize this jukebox so you can offer your users a custom-branded player that will handle both audio and video files. You can also use elements of the accompanying .FLA file to create your own audio/video player from scratch. You just need to understand the techniques used in the creation of this one.

This jukebox is much like the preloader shell that accompanies the Flix Video Preloader Shell Tutorial. It is essentially a mechanism for loading movies. However, it is a bit more advanced in the respect that it provides both additional information about the videos themselves using variables encoded by Flix and also more selections to choose from. In addition to three audio tracks and three videos, you also have a selection of bandwidth to accommodate users on both 56k and 256k connections.

It also offers a way for users to purchase the DVD of the movie featured by the player. In the case of this example, we are using Jonathan Blank's movie Sex, Drugs & Democracy, which was recently released on DVD as a basis for showing you how to integrate a theme into the player interface.
Top
Getting Started
In relation to the .FLA file that accompanies this tutorial, something I tried to do is make it a little easier to identify the most important elements that you will want to modify when customizing this jukebox for your own projects. I have placed three little arrows (">>>") before the names on the layers that contain things such as the information clips that return information on the loading selection, the Title, Author, and Description clips that display information about the currently playing selection, the bandwidth clips, the Links Clip, the layer that contains the loading animation so you can customize it if you wish, and so on.

You could also think of the layers marked with this symbol as those that I believe you would benefit from looking into to see how they function. This means going into the symbol itself, looking at the actions, determining their targets, and understanding why they do what they do. Many of these involve the use of variables to communicate with other parts of the Flash movie. Learning more about how these elements interact with one another will greatly increase your ability to make more complex and interactive experiences for your users. This jukebox in particular makes use of many different techniques that can be used over and over again to enhance all of your future projects. The ability to load movies into targeted clips and control their function, and being able to use variables to display and keep track of information will serve you well. By studying the .FLA and this tutorial you can also learn more about dynamic text fields, mask layers, and more.

The screenshot below depicts the main timeline of the accompanying .FLA. As you can see, most of the action takes place in the second half of the movie. The first 40 frames are just the various jukebox elements getting tweened in. This also a number of things going on behind the scenes, however, and this is why you will want to explore the .FLA and pull it apart to see what it's made of. If you are just looking for quick functionality though, you can just focus on changing the graphics and replacing the videos with your own. I provide a lot of extra information in the spirit of helping Flash designers to develop their skills, but it really is just that easy if you want it to be. In most cases, just keep double-clicking things on the stage, going through the hierarchy of symbols until you reach the root symbol. You can then make whatever modifications you require.
Main timeline of the FLA
Sit back, grab a cup of coffee and invest some time in your skills. Take a look at the techniques and methods used in this project and think about how you could apply them to other projects. Or just take the barebones approach and quickly customize the graphics of this player to get up and running right away. But most of all, have fun...revel in the grand quest for knowledge and Flash enlightenment! :)
Top
Using Flix to Encode the Videos
We'll jump right into it with a discussion of what we will be offering the user in the way of selections. Each one of the selections has two different versions...one for 56k connections and one for 256k connections. This means that each video was encoded twice from Flix, with each one using a different preset encoding setting. Other than adding the link info and other variables for the Title, Author and Description, there are a couple of other changes I made to the preset settings.

The first is found under the SWF tab. I checked the box that adds a black frame at the start of the video and I also checked the box next to "STOP action on first frame". What this does is to keep the video on the first frame until we are ready for it to play and explicitly tell it to do so. The "Insert black frame at start" prevents the first frame of the video itself from displaying while it is loading.

The other modification I made was to the 256k settings. I increased the "Maximum bitrate (kbps)" from 242 to 280. This made for a cleaner video and for high bandwidth users it should still stream much the same as the original setting.

In order to get your clip information to show up in the jukebox when each selection is played, you will need to encode variables for TITLE, AUTHOR and DESCRIPTION into each of your movies. This is an easy process, you simply type in the variable name and corresponding value and then hit the Add button. You want to do this for each of the three variables for each movie.
Wildform Flix Pro SWF Tab
Another thing you will notice if you use the standard settings is that the 56k setting and the 256k video setting have different default custom SWF dimensions. This is to account for the smaller "pipe" that low bandwidth users have for transferring data from the internet. The smaller size of the 56k video setting allows for a higher quality while still retaining the ability to stream efficiently over slower connections. This will come into play more a little later when we discuss the Bandwidth Clips and what they do to account for the difference in size between the two bandwidth selection possibilities.
Top
Preparing the Audio Tracks
Two different movies were created for each audio track...one for 56k playback and one for 256k playback. There are a couple of things that make these two files different from one another. If you add any graphics to your audio tracks, you will probably want to change the movie dimensions to match the smaller size of the 56k video. This is to account for the fact that the 56k video needs to be encoded at a smaller size to retain quality while streaming the video at the lower bandwidth. We also center the loaded video in the playback window of the jukebox, so if you don't change the size of your 56k audio tracks, your graphics will be offset down and to the right inside the playback window. I have included just a very simple animated line form, but I'm sure you can impress me with something far more creative. You can display a logo or perhaps some additional information about the track and a link to buy the selection on CD.

The second thing I changed was the compression settings for the Audio Stream found under the Flash tab in the Publish Settings. For the 56k audio, I used lower quality settings than I did for the 256k version. I recommend that you experiment with the settings until you get a good balance between file size and sound quality. You can see the sound export settings that I used in each movie by hitting Ctrl+Shift+F12 to bring up the Publish Settings. The settings for the sound are found under the Flash tab near the bottom where it says "Audio Stream". You can check the box next to "Override sound settings" to have these settings take precedence over any settings you have made to the sound itself by double-clicking the sound in the Library.

Your bit rate is also a major factor in both the quality and size of your published movie. Depending on how your movie streams though, simple file size may not be a factor. When you set a sound to "Stream" using the Sound Panel, Flash breaks up the sound into individual frames.

This allows you to do a couple of things. First, it lets you set up actions to stop your movie at any point during playback and it will resume playing exactly where it left off when you tell it to start playing again. Secondly, it allows you to efficiently "stream" your movie over the internet. What this means is that instead of waiting for an entire sound to load, as is the case when you have the sound set to either "Start" or "Event" in the Sound Panel, you can start playing your movie right away. This is because the sound has been broken up into small chunks that can easily be fed to users on slower connections.

The same can be said for any Flash movie. That is why Flix comes with presets for different connection speeds. Flix will optimize the video during the encoding process so that it will stream efficiently over the desired connection speed.
Top
The Preloader
This would be a good time to discuss the part that streaming plays in the preloading process. Set up properly, a Flash movie will stream over even slow internet connections without any delay whatsoever. It is, in fact, primarily what Flash was created for...to stream compact graphics and animations (and now with Flix you can easily incorporate video as well) over even 28k and 56k connections. This is accomplished by making sure that each individual frame does not exceed a certain size. The amount of information that each frame can contain and still stream efficiently is determined by the bandwidth of your users.

The screenshot below shows you the Bandwidth Profiler that can be accessed while in Test Movie mode in Flash. This will show you how your movie will stream over whatever connection speed you specify. You can hit Ctrl+Enter to go into Test Movie mode and then hit Ctrl+Enter again to "Show Streaming". If you can't see the Bandwidth Profiler, then hitting Ctrl+B will bring it up.
Flash Bandwidth Profiler
Like everything else though, there are some other things to consider. In the case of Flix-encoded videos that include play controls, there can sometimes be a problem if a user holds down the fast forward button while the movie is still loading because they have now effectively requested that the speed of data transfer be increased by about four times what it is when streaming normally. When the video reaches a point where there is no information because the rest of the movie hasn't loaded yet, it can sometimes cause the Flash Player to crash. Since your users are usually viewing your video on the internet through the Flash Player plug-in for Netscape or the Active-X Control for Internet Explorer, this means that it can also bring their browser down with it.

In an effort to avoid this occurrence, (you never know what people are going to do and when they might press what) many of the example FLAs found on the Wildform site in the tutorial section do not begin playback until somewhere between 60 and 90 percent of the movie has loaded.

However, in light of the information above pertaining to the streaming capabilities of Flash, making your users wait is not strictly necessary. You can, if you wish, have your video start playing right away. This is the case with the Wildform video banner ads that you may have seen. If you use the preset settings that are in the Presets drop-down box on the File tab in Flix, then Flix will automatically encode your video to stream fluidly over the indicated connection speed. Not taking into account any of the graphics or elements associated with the player itself, this means that in a perfect world you can have your video start playing right away and it will stream in a manner that enables even low bandwidth users to have a seamless viewing experience.

All you would have to do in order to get the video to start playing right away would be to clear the keyframe that contains the action that checks to see if the movie has been 30 percent loaded or not. The frame that contains this "if" statement and the statement itself are discussed in more depth a little later on under the subheading of "It's All A Matter Of Timing...".

The Solution
We have also added another little piece of functionality that addresses the fast forwarding issue. We have made it so the fast forward button is grayed out and inactive until the movie has fully loaded. The fast forward button is actually a button inside of a movie clip. This was accomplished by inserting a frame at the beginning of the timeline for the fast forward movie clip and adding a stop action. I also adjusted the alpha settings for the button and the arrows to indicate that the button was inactive and removed the actions from the instance of the button itself.
Fast Forward Button
Once the movie is 100% loaded, a separate movie clip (the "Fully Loaded Check Clip" as it is named in the layers of the .FLA on the main timeline) with a simple set of actions that checks that one property will do two things. First it will target the fast forward movie clip and send it to the second frame where the button becomes active. The second thing it does is to target the main timeline and send the playhead to the next frame. To reset the fast forward button back to the inactive state, I have placed an action on each one of the selection buttons that targets the fast forward clip and tells it to go to frame 1 and stop.

I have also added a keyframe to the timeline where it begins playback of the video on the layer that houses the information clips. In this new keyframe I have deleted the File Size Clip and made the Percent Loaded Clip somewhat transparent.  This allows you to see how much of the movie has yet to load while keeping the information discreetly in the background. If you wish, you can modify this so the Percent Loaded Clip does not exist after the video starts, just remove all of the frames after frame 77 in the "Info Clips" layer.

You will have to make the call, though.  Consider the scope of your project and the use to which it will be put. I would recommend preloading only the minimum amount to ensure consistent quality playback. Experiment with preloading different amounts until you find the optimal setting for your particular project.

The Loading Mechanism
Below is a screenshot of the main timeline and it depicts the part of the timeline that loads and checks the progress of the videos and audio tracks as they are loading. Everything that happens before frame 40 where the screenshot starts is just the jukebox elements loading. The first two frames that contain actions that you can see in the screenshot are only "stop" actions. They first stop the playhead to allow the user to select a bandwidth, and then stop it again to allow them to choose one of the selections.

Frame 50 is where the command to load the selected movie is issued. Below is the code that strings together the two variables..."selection" and "band"...and then loads the appropriate movie. In order for this to work, it is important that the URL that is specified in the Actions Panel is checked as an expression. That is the little box just to the right of where you input the URL itself. You have to tell Flash that it needs to put together several elements to get the complete URL. Also, don't forget to include all the required quotes.

The URL in the example starts out with the address to the folder on the Wildform server where all of the files related to this jukebox are posted. They are in a directory called "Rush", which is in a directory called "videos". You are going to want to change this to reflect the location of the files on your server.

The next part is where the values for the variables "selection" and "band" are added together and appended to "juke_", then we stick the ".swf" file extension onto the end of that. So, if a 56k user has chosen video number one, then the file that would be loaded would be "juke_video1_56k_.swf".

loadMovie ("http://www.wildform.com/videos/Rush/juke_" add selection add "_" add band add".swf", "screen");

Since this jukebox makes use of videos that were encoded using the standard presets from Flix, you can encode your own videos using the same settings and just name your movies appropriately and point the jukebox to the ones on your hard drive or server to have them working right away.

"It's All A Matter Of Timing..."
The frame that is highlighted in the screenshot contains the actions that determine when the video will start playing. What this set of actions is doing is checking the value of the "percentLoaded" variable that resides in the "percentLoadedClip".

The percentLoaded variable is being determined by another set of actions inside the "percentLoadedClip". Both the "percentLoadedClip" (instance name of the clip) and the actions below are on the main timeline, while the variable itself is scoped (active in only the specified timeline, which in this case is the percentLoaded Clip) to it's own timeline, so the variable is addressed by first specifying the instance name of the clip and then the name of the variable itself.

Note: The previous information about scoping variables to specific timelines is one to snake away in a conveniently accessible corner of your mind. If you have tried working with variables with little success in the past, then this may have been one of the more confusing aspects of variables that contributed to your failure and subsequent inevitable frustration.

As an example, if you were to scope a variable to the main timeline, then it would be specified thusly: "_root.yourvariable" or "_level0.yourvariable". Scoping your variables to the main timeline can sometimes make it easier to keep track of and target them.

If you were targeting a variable that has been scoped to a specific timeline, then you would do so in this fashion: "_root.clipinstancename.yourvariable". If the clip in which your variable was scoped was on the main timeline and the action that targeted that variable was also on the same timeline, then you could lose the "_root" part of it and just specify "clipinstancename.yourvariable".

To further assist you in troubleshooting your variables, you can enter Test Mode by hitting Ctrl+R and then hitting Ctrl+Alt+V to list all of the variables currently active in your movie.
Frame Actions
The playhead then enters a sequence where it will check to see if the movie has actually begun loading before continuing on to check and display exactly how much has loaded. It does this by checking the "_width" property of the empty clip that the movies get loaded into. Once the _width is greater than zero, it means that the movie has begun loading. This is based on the fact that as far as Flash is concerned, the _width of an empty movie clip is zero, and once the movie has begun loading this is no longer true.

Now the reason we have to do this is to account for the meaningless values that are returned to the Information Clips that gather the info on how much of the movie has loaded. If there is no movie to return information on, as is the case in the brief seconds between the time the loadMovie command is issued and the when the movie actually starts loading, then Flash returns a value that is interpreted as "NaN", or "not a number". Apparently Flash takes this for a valid argument that the movie has been sufficiently loaded and continues on before we are prepared for it to do so. Thus we make the movie wait until the movie has actually begun loading to start the next sequence on the timeline that contains the Information Clips, which can now function as they should.

So now we have told Flash which selection to load and at what bandwidth, and we have made sure that there is a movie cued up in the empty clip. The next thing that happens is that if 30 percent of the video has loaded, then the playhead will be sent forward to the frame label "turn_on" and the cover for the play controls will slide up. In this jukebox I don't expose the play controls until the selection is ready to play. I don't see any point in confusing people with non-existent functionality and there is the possibility of code conflicts if you try to target something that is not there at the time the command is issued.

If the loading movie has not yet reached 30 percent, then the playhead will be sent back to the frame label "showStatus" and it will continue to show the progress in both the percentLoaded text field and in the progress bar. Depending on how you set up your movie, you may not want to include the progress bar at all. I have included it for those who want to use it, and as I am fond of saying, the elements included in these tutorials and the accompanying .FLAs can be used in just about any project, not just for preloading video and a progress bar is something that every Flash designer should have in his toolbox.

As far as preloading the graphics and other elements of the jukebox itself, I chose to use layers and frame placement to determine how much of the movie loads at what time and in what order. The order that the layers load in is determined in the Publish Settings under the Flash tab. It's the first thing you see at the top of the dialogue box and the default setting is for it to load from the bottom up. Also, since the layers load from the bottom up, you want to have the layer that contains your actions to be the bottom layer. That way your actions are the first thing that will execute when the playhead enters any given frame.

There were several chunks that couldn't be broken up into small enough pieces to stream perfectly, though. At these points I added a small "loading" animation that gives users an indication that something more is coming down the pipe for their viewing pleasure.

As mentioned in the Preloader section, you can see the file size of each individual frame by hitting Ctrl+Enter while in authoring mode to test your movie. Hitting Ctrl+Enter again will "Show Streaming", and depending on the setting you choose in the Debug menu, it will show you how your movie will stream over the desired connection speed. If the Bandwidth Profiler is not visible, you can show it by hitting Ctrl+B or going to View>Bandwidth Profiler. It is the Bandwidth Profiler that has the breakdown of each individual frame in your movie and it's file size. You will also note that the little arrow indicator at the top of the timeline will simulate the progress of your movie as it streams at the chosen bandwidth.
Top
The Selection Buttons
These are pretty self-explanatory. They allow the user to choose between six different selections...three videos and three audio tracks. You can set up pretty much as many buttons as you like, however. Just keep naming them sequentially as far as which video that load...video4, video5, video6, etc. That value will be set as the variable "selection" and it will load the appropriate movie.

The actions that are placed on the buttons is very simple and straight forward. Each button does three things.  The first is to set the variable "selection" to the appropriate value for the chosen selection. The second thing they do is send the playhead to frame 50 on the main timeline by targeting the frame label "loadSelection".

This is also the frame that has the actual command to load the movie, so make a mental note because this is where you will have to specify a new path to your videos on your server instead of the one on the Wildform server. The last thing the buttons do is reset the fast forward button so that is will once again be disabled until the next video has been fully loaded. This is done by targeting the instance name of the clip and then telling the playhead to stop on the frame labeled "off", which is the first frame of the clip.
Change Bandwidth
Top
Changing the Bandwidth
You can see the Change Bandwidth Clip in the screenshot above that allows users to change their desired connection speed. There are actually two different bandwidth clips. The one pictured above, called the "Change Bandwidth Clip" and the one that appears before they have made their selection, which is appropriately enough called the "Select Bandwidth Clip". There are two different clips because depending on where you are on the timeline, each needs to have a slightly different behavior and a separate set of actions.

Each one of the bandwidth buttons does several different things. One of the things they do is to set the x and y position of the empty clip to account for the difference in size between the videos for 256k users and the videos for 56k users. The size of the 256k encoded video is 240x180 and the size of the 56k encoded video is 150x112. It looks a lot better for the smaller video to play in the center of the viewing area than it does for it to be pushed up in the upper left hand corner. In regard to using this technique in general, keep in mind that all loaded movies in Flash get positioned with their upper left corner lining up with the center of the empty clip that they are getting loaded into.

The next thing they do is to set the value for the variable "band". This will be either "56k" or "256k". Finally, the last thing they do is to target a frame on the main timeline and tell it to play. Which frame is targeted depends on where you want them to go and at what time. In the case of the Select Bandwidth Clip, I take the user to where they can make their selection. In the case of the Change Bandwidth Clip, I have the playhead move to the frame that actually loads the movie because at this point they have likely already made a selection and they just want to change their bandwidth. On the off chance that they have not yet made a selection and are just pushing buttons for the sheer love of doing so, I have set the variable for "selection" to "video1" on the main timeline so there will be a default value for when Flash is looking for which movie to load.
Select Bandwidth
The Change Bandwidth Clip does much the same thing as the Select Bandwidth Clip, but it sends the playhead to the frame label "loadSelection" and tells it to play, which will automatically load the current selection at the new bandwidth instead of sending it to the frame label "selectMedia" and having it play, which opens up the cover over the selection buttons.

These next couple of screens show you the actions associated with the two buttons in the Change Bandwidth Clip. You'll notice that the timing of when these actions execute is such that the first thing that happens is that we set the value for the variable "band". This happens first because we have it set to occur "on(press)". This means that the action will execute as soon as the user clicks down on the button. The other actions do not occur until the user releases the button. You want to be careful about giving Flash too many commands all at once if there is any chance of them conflicting with one another. Since the next set of actions take me to the frame on the timeline that has the action that loads the video, and that action is dependent on the "band" variable, I wanted to make sure that the variable was set to the proper value before it got to the action that required it.
Change Bandwidth
Top
Playback and Volume Controls
The playback and volume controls allow the user more control over their viewing experience. Each of these is a separate movie clip, but they all reside on one layer. These are placed beneath a cover that will slide up once the movie has begun to play. The mask for the cover was made by copying and pasting the symbol of the cover itself in a layer above it, right-clicking and choosing "Mask". I then animated the cover so that it slides up to reveal the play controls.

This jukebox has another distinctive feature that relates to providing your users with a reliable viewing experience.
Play Controls
These are modular play controls, which means that you can copy and paste these controls into another Flash movie and they will function exactly as they do in this one. They just need to be on the same timeline as the empty clip that you load the movies into, and the empty clip needs to have an instance name of "screen".
Top
Displaying Clip Information
Displaying Clip Information
Inside the jukebox console, which has an instance name of "console", there are several movie clips that display the descriptive information about the selection that is currently playing. These are the TITLE, AUTHOR, and DESCRIPTION clips.  Just keep double-clicking these to get into the symbols where you can edit the text and the accompanying text fields if you want to change the information that is displayed
Top
The Links
The Links Clip is a separate movie clip that slides up to cover the Wildform logo on the bottom right of the jukebox console. I did it in this fashion to make the most of the available screen space in the player. This will allow you to link to external sites so your viewers can purchase the videos and CDs that the trailers represent. This one includes a link to buy the DVD at amazon.com, a link to visit the web site that is dedicated to the movie, a link to the production company that produced the movie, and a link to the company that is actually releasing the movie. This allows viewers to not only purchase the DVD, but also to get more information and read some reviews before making their decision.
The Links
The placement of this clip could present a problem if you are not careful. What we are working with here is the way Flash handles buttons in movie clips. There is nothing wrong with their function, rather the opposite, they function perhaps too well. If a button is on the timeline at any given point, then it is always going to be active, even if it is completely obscured by other elements on the stage. So, the problem we run into in this project is that the Wildform logo has an invisible button (that's what the turquoise-colored thing is that you see when you open up the .FLA file) behind it that links to the Wildform web site. The hit frame, or active area, of this button covers pretty much the exact same space that the Links Clip occupies when it is active. When it is inactive it is positioned lower, outside the masked area, and thus does not interfere with the Wildform logo button.

However, when the Links Clip opens up, we now have buttons covering buttons and this could get ugly if you are not careful in how you set up the hit frames for your buttons. To access the Links Clip and see how they are set up you first need to find either the little white circle if it is inactive, or the crosshairs if it is active, that represents this clip and either double-click it or right-click it and choose "Edit in Place". This will be in the approximate center of the Wildform and jukebox logo. Since there is nothing but a stop action in the first frame, this will be the only indication of this clip's existence on the stage. If you have trouble finding it, you can select the layer that contains this clip and toggle the visibility on and off while you watch the stage.

Once you get into the first movie clip, which has an instance name of "linksclip", you will see a timeline that represents the opening and closing animations of the Links Clip sliding into place. The symbol that is tweened in this timeline does not have an instance name since we don't have to target it, but the name of the symbol in the Library is "Links Clip Parts". Select frame 8 where the links have slid up into place over the Wildform logo. This is so you can see the relationship between the hit frames of the two buttons. I have taken you into the symbol this way, by editing it in place, because I usually like to see the symbol that I am editing in relation to everything else on the stage.

I have set up the hit frames for these buttons in such a way that they completely cover the hit frame for the Wildform logo and still don't interfere with one another. I have left only the smallest of gaps between the hit frames to ensure this.

If you are using clips from more than one source and you want the links to always pertain to the currently playing selection, you can either create multiple clips and use variables to determine which links clip opens up at any given time or you can use dynamic text fields with urls that link to the appropriate site. It would be the same process for setting a variable, checking to see which one is active, and displaying the appropriate information, much like the way the jukebox determines which video to play depending both on which bandwidth was chosen and the actual selection that was made.

It is my intention with these tutorials to empower you to use Flix and Flash to create innumerable projects using a toolset of useful techniques along with a healthy dose of personal creativity and ingenuity.  It is my hope that you take the time to understand the concepts at work in this jukebox and apply them in a new and inventive fashion. This is the beginning of the path. Where it leads is up to you.
Top
Note to Flash MX Users
This tutorial and .fla was written for Flash 5. The .fla will work in Flash MX with minor modifications.

Flash MX does not like the name of the variable "selection". So you will need to change the name of this variable. This is the variable that determines which file to load. There are eight places that you have to change this variable.
  1. Frame 40 in the "Variables" layer - this frame action sets the variable "selection" to the default value of "video1". Select that frame in the timeline and then change the value in the Actions Panel (F9).
  2. Each of the six buttons also sets the value for this variable. Select each of the buttons on frame 40 and change the value of the variables to the same one you selected in step 1.
  3. Frame 50 in the "Actions" layer. This frame action loads the user-specified selection, using the variable "selection". Select the frame in the timeline and then find the part that says "selection" and change it to the new name of your variable.
Good luck!
Top
 
©2008 Wildform, Inc | Policies | Contact Us | Newsletter Options
 
Wildform provides a 100% satisfaction guarantee on all our Flash software. If you are not completely satisfied with our Flash multimedia software for any reason you may request a refund within 15 days of purchase.