Here you will find Steve's comments, based on his previous experience with timelines in Sophie 1. The new Sophie 2 timelines design eliminates most of the issues mentioned below.
Overview
Timelines allow Sophie objects to be animated over time. Examples of Sophie objects include Sophie frames, audio files and pages. Example frame content include text, images and video frames.
Timelines can control the visibility of a frame, or if a movie is playing or not. The author can use Timelines to control a movie that is on a template spanning pages of a book, and also to change the current page of the book as the movie plays.
Referencing Objects
Sophie 1 timeline events kept hard references to frames and audio. This meant that if a timeline that spanned 1000 pages were to be loaded, every page and thus every object on those pages were loaded. This could cause severe memory issues. Sophie 2 should use a lazy approach to referencing objects, maybe through the ResourceRef class.
Timeline Scope
There are two types of timelines in Sophie 1, normal and page timelines. The difference is that a page timeline had a page channel. A page channel was a special channel that could only contain page events for changing the current page.
A normal timeline would only reference objects on one page, or should have but Sophie never enforced this. It was very easy to create a broken timeline. In a large project, an Author should be able to attach a timeline to a particular page or template and thus, only see those timelines when filtered. This will help in timeline management on huge books.
UI Issues
Boyan mentioned that we may want to ditch the page timeline concept and allow any object to be placed on any channel. We'll have to decide if an author can understand the ramifications of coalescing timeline events in this manner.
How will be handle a timeline with page events and now allow a user to drag an event for a frame that exits on page 1 into the area of the timeline that corresponds to page 15?
Design issues
- Events should be pluggable
- Events should weak reference the objects they control
- Examples of events include:
- hide/show a frame
- Start/stop media
- Go to an object (page, maybe a frame also?)
- Animate a frame
- translate
- tween?
- Synchronizing - Sophie should make sure media on timelines remain in sync
- When an object that a ResourceRef points to is removed from a book, those references need to be notified (spoke with Gogov about this, we don't have this functionality yet)
- Media Events should have a inPoint and duration. inPoint is where in the media the event starts at. This allows for clipping larger media into smaller events.
- In Sophie 1, events kept which time on the timeline they occurred at. This meant an event could only be used once. I'm not sure if we want to think about doing it differently, where channels keep a list of events and what time the event happens. This might allow for re-use of events, but I am not sure how useful that is.
Use Cases
The most popular use cases involve the creation of a slideshow.
- Author wants to create a slideshow of images with sound.
- Author wants to play a simple audio file.
- Author wants to play a portion of a simple audio file.
- Author wants to play a movie on a single page.
- Author wants to play a portion of a movie.
- Author wants to play a movie that spans several pages.
- Author wants to synchronize pages with portions of a movie or audio.
- Author wants to play an animation.
- Author wants to change the rate of an animation or video.
- Author wants to create a book with sidebar annotations that are slideshows related to content on the page.
- Author wants to create 5 annotations that show in a window when triggered by a text link, and these annotations automatically start playing a slideshow with audio.
- Author wants to create an animation changing pages over time in one channel, starting and stopping movies in another channel at various times, and animating images in other channels at even other times.