---
title: WWDC1997 Session 308
framework: wwdc
role: article
path: wwdc/wwdc1997-308
---

# WWDC1997 Session 308

## Transcript

Kind: captions Language: en good afternoon my name is Peter hottie this is over here is Kevin Calhoun which is somebody moved my slide yeah gay Kevin welcome to the quick time future session also known as hyper card session I should start off by saying quick time has many many different facets and the future quick time is going in lots and lots of different directions of course we're going to keep working on all the stuff that you know and love about quick time but every once in a while we need to add some sort of new features to it that just sort of twist the idea of what quick time is just a little bit further than we have before we showed you a little bit about quick time interactive and what we're doing with HyperCard last year we're still on target with that plan our dates keep sliding around but we still think it's a great idea and what we're going to do during this session is really concentrate on the interactive future of quick time technology we call quick time interactive and how that fits together with a number of different tools quick time interactive the most important thing to remember is it's adjusted quick time it's just building on the idea of a platform for delivering media click time has always been a great container for putting media and as you've seen we can really add some complicated behaviors for that media even today with QuickTime two-five and QuickTime 3 Oh with the ability to animate things to have special effects just all kinds of things going on QuickTime Interactive will add one more element to that which is behaviors so it's really a pretty at some level it's a very simple addition and yet the implications are really profound because QuickTime has all this great multimedia technology built into it all the different aspects of the QuickTime media layer we get to take advantage of all of those in QuickTime Interactive and because quick times always been modular and open you'll be able to plug into everything you're seeing here today to enhance it in all sorts of different ways so you'll remember one of the things that made HyperCard great was that you could plug in your own X commands your own X objects the QuickTime interactive you'll be able to plug in all kinds of different things much richer set of functionality with a much tighter level of integration we use the same file format HyperCard is now just a quicktime movie editor it's a little bit strange but i HyperCard stack is just a quicktime moving you're seeing a little bit more of that the same api's you know and love-- still work there's some new ones of course I'm the only thing we really need you to be able to do that was different with the movie is feed events to it we needed to be able to give it mouse click so that when you click on it it would know to respond and so forth fortunately we have some experience doing this already in the media layer with QuickTime VR which is another example of a mildly interactive QuickTime movie we're just taking it one step further of course we have really fantastic services in QuickTime to do all sorts of things you need in interactive media we have really great timing services as you saw we have special effects and transitions we have built into QuickTime 300 over 130 different transitions it's more than most multimedia packages have animation facilities sprites music so forth so a really rich environment to build on now one of the things that people always sort of comment on if these demonstrations of Apple technology is well you know how are you going to get people to adopt this it's great if Apple shows the tools it's working on but you know it can't just be an Apple only solution and you said it's open well how open is it as you know we showed this technology last year there were a bunch of you in the audience who saw what we were doing and said you wanted to get involved even though you know it looked like it was a little early one of those people was a company in Israel that makes a product called quick works it's a little it's a multimedia authoring tool with a really fantastic user interface that fits very nicely into the QuickTime interactive model so we've been working together with the tango with a engineer there by the name of Reuben Sherwin and rather than starting out by showing you what we had Apple are able to do with QuickTime interactive what I'd like to do is invite Ruben up to show you for a little bit here exactly what he's able to accomplish with QuickTime interactive and what his tool can do with it Ruben thank you well I've heard it's right they never know what they mean and okay so Peter gave me a great introduction so so I'll just start with some demo and it's a good practice to start with it then I'll show you some cook time interactive which we've pre created from click works [Music] [Applause] okay what you've just seen is not only a QuickTime movie it's a Heinlein's interactive promo we've prepared in click worth fully interactive it responded to my mouse interactions and obviously to launching it and it's behavior was fully controlled by whatever I did at the tango we consider clip work and right click what's actually to be a very good authoring tool very easy to author and last year when we saw a custom interactive itself there the concepts include some interactive map very easily and very comfortably into the concepts we have in click works so let's just go through some demo I've prepared we'll build some simple demo and click work and we've written worked in click works is a extensible application it once and a lot create extensions to it and pickle applause and we've created such an extension which exports our internal format in to put some interactive and click works is very easily in lets you very easily author media base in interactive and multimedia base the files part okay so I'll just open the first thing I prepared here we'll get rid of some of the pallets to begin with okay we'll pick some background image button in the background you can see it here will take a move into this box as you can see down here I have my media pallet so all media that I add to the movie is immediately added into that media pallet we can control some of the aspects of the media here so we'll do that in order to achieve the nicer performance will control for example this BMW movie or requested to play directly to screen as well as there the our movie I just drag okay so we have here one thing we just finished the layout for it let's add some interactivities I'll open our events palette which lets you with no programming only pop-up menus do whatever it is you want to do so I'll select the background block and I'll say as you click you'll release the mouse mouse up then you go to the second screen which I prepared I'll select this BMW movie and I'll say that I'm mouse up or start playing it start playing myself actually I'll toggle it if that movie is not currently playing is not playing then start myself else and myself and the VR movie will request it to have a controller visible in order to control the VR movie with a standard movie controller and let's not move on to the second screen and put some interactivity we have already the background from before since we have some template mechanism which in which case when you alter one scene you have the other scenes inherited interactivity will place in a nice blend in the background of one of the boxes here and I'll want to bring some media from the web so what I'll do is I'll open our web link extension this lets you offer web CDs file presentations I'll copy some URL we prepared previously I'll paste it into the screen and you can see it pops into the box that's all we'll do for this box and again once one click the background box now stop then we'll go to the third screen we've prepared and in the third screen going there we'll take one of our transitions were actually will take a random transition I don't know I don't want to know what your transition will actually have okay we'll move on to the third screen and the third screen will again have some nice blends in the background in here we'll add some text to this and we'll set the need there so we'll set the attributes of the text so and select the text will change it to be something more visible so one can read it from the background from the back okay and let's add there's a text-to-speech object in the equip them interactive but we'll say that as the mouse enters this box then speak with the good old roll wherever he might be hiding there you go start speaking myself again and as a mouse leave this box we'll stop speaking Rolfe actually myself and once we click in the background box let's see some more transitions now stop then go back simply to wherever it is we're saying from this time I want to know I like the dissolve transition so we'll select the dissolve transition okay basically this is all I've authored this is our internal format and all that's left to do is actually export this as a custom interactive movie and the export process started what this does now is moves over the iterates the clips internal file format it reads the geometry the layout of the movie of our presentation and translate that into quick and interactive object and then the look and feel the pictures it plugs in the movies that they are plugged in and then the interactivity we concatenate pieces of code that's that represent our inter activities in the QuickTime interactive format and compile them there's a built in compiler in QuickTime Interactive which lets you compile high-level style code into quick QuickTime low-level style code and we're finished we open this movie where here it is it will launch the standard movie player which was actually launched from the last time where I show the promo promo which was already good time okay so we see basically the exact same looking feel we have the movie controller here we can navigate this VR movie we can zoom in and zoom out anything standard for your movie does first click on this movie starts playing it and the next click stock stops playing it actually set the curses if they did that too fast for you to see I'm sorry I forgot all about that but you can see we have different cursors for this box we have the standard VR in this box we have the some blueish cursor here we have the hand cursor next click moves on to the second scene and you can see the text you haven't seen before this this was brought up from an HTTP server you can also download FTP and do some information I wanted to provide about why we actually did this effort we have our own runtime environment for Macintosh and PC but once we combine click works and put them interactive it provides us a very easy way to deliver click works titles over the web in basically any web browser or whatever other application that supports a good time at let us export clip books titles to a state of the art or so we say multi need a standard solution QuickTime which we all know and love by now and we sometimes as a multimedia develop right until it sometimes you get heat for not being fast enough not being good enough well it's not my problem anymore I did this QuickTime movie now peter has to run it fast [Music] he does I mean not only Peter I mean this is the next part if we harness the ease of use the fast powerful multimedia authoring of click words and we made it to be the first third-party tool for a QuickTime interactive and actually I'd like to take this chance to take this to thank the QuickTime team for all the help they gave me except for the developers specifically and especially I'd like to thank David Burnham who saved my disk from crashing last Friday and as I move onto the next thing to see one of these transitions you moved on and as the mouse enters always listen to experts they will tell you what can be done and why then do it and obviously when we make often a crowd starter next time I click we go back and another I think one of the nicest renditions of this ugly found Audi very nice and thank you so basically very fast to do all together I say three to four man programmers nights a week weeks of programmers a nice I'm sorry and we'll expect to have this working shipping by the time cook time interacted with working in shipping thank you very much thanks ring so I think I just want to point out a couple things from what you've just seen one of the things that was always requested of hypercard was for other applications to be able to create hypercard stacks please publish the format please support that well Reuven is the first third-party application to do that in the supported way because I told you hypercard is just a movie editor so that's kind of neat also we could open the same project that was just made and continue to do scripting and add other elements using hyper card or other tools the other thing that Rueben showed you which I can't believe he got through in the time he did was about a thousand different features of the runtime including things like text-to-speech transitions the ability to pull in data live from the internet you even went out there and pulled text and directly from the internet and so there's just all kinds of different capabilities in here as well as great video and VR support which you'd expect with that I'm going to do is turn this over to Kevin Calhoun is going to guide you through the rest of this presentation and a deeper look at what QuickTime Interactive is I guess known as QuickTime for Oh sometimes hyper pardon some other tools as well Kevin okay Peter mentioned that nothing has essentially changed in the quick time model in order to support interactivity that's really true the abstractions that you use to describe movies movies tracks and samples in QuickTime are still valid for a QuickTime Interactive in a video track in a QuickTime movie that you're probably most familiar with if you go to a particular time in the movie collect I needs to do is to fetch a sample which is essentially a bunch of bits that are compressed on disk that have to be uncompressed and rendered that's a video sample in the case of an audio track what it is is at a particular time there'll be a sample that represents a waveform that needs to be played in the case of QuickTime Interactive there's a new type of track it's called an interactivity track or container track and samples of those tracks contain trees of objects that are instantiated and they can display content and interact with the user we'll be talking about these qti objects and what they can do essentially when you saw Reubens demo you saw a movie controller object playing a video movie you saw a VR object playing the VR movie and you saw a text-to-speech object or you heard effective speech object reading some text there are lots of teach eye objects in the system and the system is open to yours as well these objects can communicate with each other and they can respond to user interaction by means of messages and actually there's a complete messaging system built into qti so objects can be told when the user clicks on them or so that one object until another object to redraw itself or something like that we'll be talking about messages and message handlers which is another way for you extend quick time interactive these objects where you probably want to sequence their behavior and play back their behavior very good ways to describe sequence of behavior have already been invented they're called programming languages or scripting languages there's complete support for any number of languages in qti as well you can plug in compilers or you can plug in compilers and essentially executives or interpreters that run the compiled form we'll talk about that in a moment finally another area in which qti is open is that you probably want to get data into system you want objects to be able to display images etc different kinds of import are possible and you can write your own importers finally Reuben and the Peter have both mentioned that it's possible to pull data live off the internet any kind of data access is possible in qti by URL via alias in memory or any other forum that can be defined and supported in a protocol or in any way to resolve references I'll show you a way to plug in a reference into qti okay so let's take a deeper look at all of this working together I'd like to introduce Ron Peters of the quick time team Ron is going to come up and show you some objects wired together CGI objects wire together in QT I make [Applause] alright if any of you we're at the quick time keynote yesterday morning you might have seen a couple of movies a Martian shooting and running and George of the jungle where a slider and a controller were controlling the rate and speed of the movie and so today I'm going to show you how easy it is to do that kind of thing in in qti with a minimal amount of code going to use an application we use in-house called QT I make which is basically like a cross between movie player' dumpster and rez edit for qti movies but may not have the prettiest user interface but at least it does allow you access to just about all the qti features so I'll just make a new QT iMovie and I can even find my media I'll drop in the George of the jungle movie and a knob so the first thing about Katie I make is that it allows you access to things like message handlers for an object so all the code that's attached to the object as well the properties which brings you up an inspector for all the different properties of an object and as well as the resources now the resources are a list of assets for that object so you can see here are the different knob positions for that knob and it's pretty much like the resource manager which means you can put any kind of data you want into the resource map and it will travel with the object and the data can be completely internal to the object or can be externally referenced like file alias or anything like that any of the data reference mechanisms that QuickTime supports so when I pull up the inspector on actually I'll pull up the hierarchy so here you can see the movie object the qchat container track and all of its children so the background picture in the movie so just to show you that all this is really going on live I'll grab the rate property of the movie and start it playing in a bird now you can control the door to the jungle and while I'm here I'll set the looping property of it as well so to connect I want to connect the knob to control the speed of the movie the rate of the movie dynamically so I'll just grab the rate property of the movie drop into the patch Bay then grab the control value of the knob connect the two and now very simple in very little code I've dynamically hooked together there we go I've dynamically hooked together the properties of the objects and spirit it's very simple but it's not quite good enough I've got it stopped and I've got it going full speed what if I want to shuttle where on one end goes fast rewind on the other end goes fast-forward and there's a gradient in between patch beam mechanism allows you to do range mapping so I can take the fact that the knob goes from zero to one and translate those values from say negative 3 to 3 and Qt I will do that range mapping for you dynamically and leave and convert between data types so do it from fix to float so now when I grab this light [Music] and patches can also be bi-directional so I can connect multiple sliders together and they can control each other and we also do make sure that if you do have a cyclic loop we don't go into an infinite loop it'll stop and do the right thing so that's a patch beam mechanism and it's it's very simple page of code thank you very much thanks Ron yes we the difference definitely okay help me with my slides I'd like to introduce Chris flick who works on the equip time interactive runtime Chris is going to come up and help us step through these slides while I stand back here in case the thing blows up all of you behind the desk you'll be out there okay we talked about the architecture of qti we did a quick demo I'd like to dig a little bit deeper on the subject of qti objects objects in the system obviously objects have properties you saw ron open up a property editor and Coogi i make for the movie controller object rate and looping or properties that it has properties can be persistent they can be saved to disk or they can be ephemeral if you just need something at runtime you need to throw it away that's fine to cute.i objects also respond to messages we talked about that a little bit earlier two of the obvious messages that you'll want to support our get and set property so for example a script could set your rate property if you were a movie or you're looping property but there are other classes of messages as well defined in the system the event classes messages for example allows you to respond to mouse clicks what happens is that the movie controller receives a mouse click from the application that's playing the movie and it synthesizes a message from that mouse click that it then sets sends to the target that's the message that you'll get to respond to a click and you can do whatever you need to do there a similar thing is true if you're the key target you can get key presses for other kind of event messages as well you'll probably see a few of them scroll by a little later when you do some scripting spatial class timer class things that you'll need to do if you take up space on the screen or if you pay attention to clocks as time goes by but a last class of message that I wanted to mention is the user-defined message obviously there are things that the user is going to do with your object that are not implemented by you and it's possible for the user to add behavior to your object user-defined handlers of messages for example on foo do something that falls under this collapse of messages so your objects can be extended through scripting and other means finally the obvious thing that objects do is manage content they display it they play it they manipulate it whatever have you I want to show you a demo now using the API of qti objects it was possible for us on the hypercar team to add to quick time without any support from peter Hadi whatsoever that's not what I meant he give us the the header file it was possible to create a hyper card button object which we needed for compatibility support with the old hyper card stacks that we're going to be able to translate to this new format so we were able to create this button object as a quicktime component using the API to component API for a few key objects and obviously we were able to define all of the classic properties that hyper card buttons have always had and used the same user model for them if we can set the style to default or a standard or all those other wacky things whoops didn't redraw sorry and but because we are in quick time instead of in hypercard the runtime actually supports full color so we're able to support more properties than just that we're able to support such things as well what color should the frame be let's make it a nice blue here obviously the user interface needs a little tuning we'll get there what color should the outline be oh let's make it this one what color is that so many I'll make it want to do so you can see that it really does change so not only thing we support the classic set of behavior on this object we can extend it as well all by means of the component API ok if I go back to slides a second way that QuickTime interactive can be extended less interesting than objects are message handlers and the reason that I mentioned this in this session knowing now that I as I know that it's the hypercard session and not the quick time future said I thought it was called the quick time hidden agenda session mentok handlers are important to HyperCard because in particular because this is the way that you would extend the reach of quick time interactive if you want to do a simple subroutine call you don't need persistent storage you don't need to draw to the screen you want to do something that an X command would typically do I don't know reach out to the currently chosen printer and get the printer name or something like that a message handler is a difference of component ATI the nice thing about this is that it's possible to package many message handlers together into a single component instead of having separate resources for rejects command way they've used to do this also it's possible because components can own resources for us to define a way for a message handler to declare its own parameter list and even some help on how to use it that an authoring tool would allow a user to browse this is something we've never had a standard way to do with X commands in the past so this this mechanism exists I'd like to show you a very interesting method channel that we wrote late one night when Jin Batson said we're doing all these visual effects but we're not gonna have time to do the visual effect to max bugs so I'm wondering if you could write for us a message handler that supports it so if you go back to the demo machine here's the same button that's been sitting here all this time live in chatting away let me write a hyper talk script here on mouse up debug stir and debug stir is of course a message handler that we introduced into QuickTime by means of a separate component it's not to actually integrated with the system so those of you who require this functionality be available in the shipping version send email to Peter but of course so now that I have this message handler I can use it anyway even though it wasn't implemented by QuickTime I can go to max bug and back just imagine all the useful things you can do with that and go back to slide please all right so we talk about objects we talked about message handlers those are ways to get interesting behavior interesting things first-class things into the system but of course you want to be able to extend the reach of those objects those metrics handlers by sequencing what they do etc language is good for this hyper talk see other languages as well are very good at describing what objects should do over a period of time or in sequence so because we're the QuickTime team instead of defining a single solution that you could use for scripting the system is entirely open to any language that you should choose to use there are two levels at which languages can plug in the first level in the most portable way for languages to plug in is to use the D byte code format that QuickTime is defined it's called cue code there is a byte code format format and an interpreter of that byte code that will be deployed wherever clicked on interactive is deployed so if your language compiles to this byte code format wherever it's compiled on a Mac or Windows or anywhere it will run everywhere and that's the strategy that we're using for hyper talk in HyperCard 3.0 it compiles the two code that will run on Windows it will run on Rhapsody it will run wherever QuickTime is deployed it's also possible for languages to plug in and perhaps the less portable manner but nevertheless there are valid reasons for doing this if you already have your own VM for example there's a language called Java is an a-lister which of course is a complete solution and so therefore you want to be able to attach Java code directly to a QT object and that is possible what you would do is write some glue essentially a compiler component for a quick time that would allow an authoring tool like hyper card to call through that component to a Java compiler then you would also supply what's known as a QuickTime interpreter component really all that does is take the executable code that's loaded and hand it off to some runtime and what you can do of course is invoke the Java VM in order to do that we've already done that in the lab I won't show it to you today but it can work it's also possible to support this of same mechanism for OFA scripts such as Apple script or user talking we've done a proof-of-concept implementation of that as well what we are committing to support our hyper talk and see a Peter once revealed in the in a weak moment perhaps or unguarded moment that the reason that he is working so hard in this project is in order to do multimedia titles entirely in C however you might choose a different language if you should prefer so let me show you that a language component is as portable as any one of these other components let me go back to the demo machine here and show you that hyper talk is usable in any qti tool you've seen two authoring tools here on this machine that operate directly on QuickTime data formats one of them is cute I make and the other is hyper card you would expect hyper talk to be available in hyper card but what if it were available in your application as well here is the hyper talk compiler available as a standalone component what I should be able to do then is open QT I make and script objects in hyper talk why not let's create a new interactive movie in QT I make will give it the creative name of two-time movie don't we already have one of those let's make another one and just for demo purposes I will grab a picture object here and open up the message handlers for this this is the way to get into the scripting or programming environment here what I want to do is stay o on event click I want to use the hyper talk language and let me open up this clipping which I so cleverly prepared in advance and now there are some odd things about the syntax here such as on nay never mind that this is a demonstration I should be able to compile this and having done so well I guess that was painless I'll put it away and click here and sure enough hyper talk works inside another authoring tool [Applause] okay back to slides I'm just pounding through these demos ten demos count them ten demos in one session okay now objects can do things they can draw to the screen they can play sounds they can do stuff now what do you want to get data into them you want to get images in you I get stuff in obviously QuickTime has support already for various kinds of data import you might be aware in QuickTime 2/5 of the introduction of grips or graphics importers we're going to use that facility also in QuickTime 404 getting image data into objects in CGI but there may be types of data that QuickTime has never heard of or types of data that are defined after a release of QuickTime becomes available it's still possible to provide support for importing that data into these interactive movies by means of something we call resource importers Ron showed you earlier that objects have resource maps resource maps just are groups of stuff content that the object can own and do things with draw them play them or just own them for whatever purpose whatever nefarious purpose it might have in order to get the data in you can supply a resource importer that knows how to import a particular data type the QuickTime itself doesn't know about we've been watching the QuickTime 3.0 demos that Jim and Peter have been doing and we were really eager to use those special effects that they've been showing fire and clouds and ripple stuff we thought now would it be great if we could import those rendered images into a picture object and script it in HyperCard so we did now all this requires is a little bit of ingenuity and perhaps some late night though hacking by Chris flick who wrote what's known as the sfx hack resource importer we're still working with product marketing to determine whether this will be the final name now this is a separate file I've loaded it I've registered with the component manager and now if I should launch hypercard 3 oh if all goes well I should be able to create yet another untitled movie rather than doing a typing demos for you I will simply stick with the default this time going to create a picture object in fact nearly every time I create picture objects but in this particular case instead that instead of having a picture object render a static image I want it to render an effect that changes over time so you saw in QT I make the realest of resources in hypercard we're calling that the media panel of the info window doesn't that sound more mellifluous and we have the ability to import data into this these files are on disk representations of those effects that you saw let's go for a little fire here I'll import some fire into this object now I have fire in here and I should be able to make this the default a Content that the object displays and so there I go I have an object that that essentially draws fire but now what I wanted to do is to change over time so I'll open up its script and I can script fire the script that I want to use is not particularly pretty right now essentially I just want it to redraw itself as often as possible so I'll compile that hyper TOC script one of the bizarre ones I've ever seen and if I enter the mouse into here I just burn now of course what you might want to do here is set a property on there for it to be to use a particular graphics mode to superimpose it on top of another object all that support is here as well I should mention I'll show you more demos that are particularly focused on the features of hyper card in a moment but one of our philosophies here is to provide two levels of access one is more comprehensive especially for people who are coming to this from using hyper card before so here is a view of the properties of picture objects which is not as rich as it will eventually be but it's still simpler and then if you go if you click more here you see all of the properties that are available to find in QuickTime or by the object so you have complete control but you don't necessarily have to understand it all to use it ok back to slides so you can get data in and you can operate on the data you can display it wear it for the day to be anywhere on the internet in your database it could be under your chair right now since QuickTime 1.0 was released it has supported a component type called a data handler which is what's in document is immediately there's documentation for data handlers in the QuickTime 2.0 SDK and presumably it will also be in the two-five SDK hasn't changed except to be expanded upon but essentially data handlers are quick times abstraction for how to fetch stuff the abstraction is more or less based on the model of files but it doesn't have to be a file that it fetches stuff from already in QuickTime it supports fetching stuff out of handles in memory or out of macintosh' resources on the Macintosh you've already seen demoed if you've been to the internet session the URL data handler so you can fetch data off of the internet live I'll show you that in a moment the reason that I am making such a big deal out of data handlers right here is that we know that this QuickTime interactive technology will be useful for building front ends to data no matter where it resides because it's so powerful for display for combining objects for for doing things that people would like to look at here's a here's a demo of grabbing some data out of a database this is pretty weird so stay with me what I have here is a filemaker pro database and it's a very simple database it just contains two records one record while each record contains one field obviously I cracked earlier but in any case each record has one field it contains a picture pretty simple now what I wrote was something called an OS a data handler OS a is the open scripting architecture what that would allow me to do is to use OS a scripts to fetch data this is pretty strange but essentially I'm using in this particular case Apple script has a data access language so once again I'll drag out a picture object here and this time I'll bring up the media panel and go to the add reference dialog instead of dragging some media in here directly I'm going to say that I want to refer to external media so hit this guy up comes this dialog you can see that one of the forms of reference is URL another is OS a script tell whoops told you I shouldn't the gentleman typing he'll application FileMaker Pro cell 1 and tell that of course is a simple script that tells FileMaker to return the data that's contained in cell 1 so click OK and I created a resource well hang on how district no problem I'm going to look for my OS a data Handler and register it again just to show you that it's really component I'm registering on the fly let's try this again okay there it is that's the picture out of all right let's try it again just because I'm tempting fate this time I'm going to type better and say that I want cell ID record to field one that should be the second picture let's click OK here now say that we want that lemon why is that breaking every single time oh did I hit it wrong okay let's make another one I have a real aim in mind which is to exhaust the Q&A time at the end of the session don't worry I'll change it I will not make the same mistake twice okay and of course the reason that URL didn't work was that wasn't in valid URL however is a valid OS age grid [Applause] okay back to slides clearly what we have here is a very powerful system and what it begs for is not just your objects and your message handlers and your data importers or resource importers and your data handlers although that's great that we'll all of those things will make the runtime more comprehensive and more powerful what it begs for especially is offering tools there are already great authoring tools on the market what we want you to do if your authoring tools is take advantage of all this technology that we're providing its open it's available it's going to be there cross-platform wherever you need to deploy so instead of having a right of player for your authoring tool for Mac and Windows and port it's Rhapsody and wherever else you can simply deploy to QuickTime and we'll write your player for you and as Reuben said Peter will tune it for performance now I told you that the abstraction for these interactive movies is identical to QuickTime has ever been movies tracks and samples but this abstraction can be adapted for a broad range of content models actors and scenes for example such as the director or cards and stacks such as hyper card or similar tools of controls and forms such as other tools which might not be immediately identified with multimedia but nevertheless it's the content model which might very well be useful on top of this stuff architecture not only different content models but different usage models are possible as well how should objects work in the hierarchy which objects should be able to share media with other objects how should messages propagate to the system should they be propagated according to hyper cards message path or some other form all of these things are open and you can decide what you need to do as you authors a movie where the message should go where the media lives and where it comes from it's all open you've seen click works can use this I'm going to do a demo just a little bit later amt can also take advantage of this technology finally there are different ways for assigning behavior to objects in differ offering tools configuring is one way to do it setting properties or using a feature like using click works to use a graphical interface user interface to specify behavior wiring is also possible such as you saw in Ron's demo of QT I make or perhaps there's wiring available elsewhere at the show finally scripting or programming is also a good way to assign behavior all these different ways of assigning behavior can be adapted for QT I let me do some demos now of different authoring tools you saw CCI make you saw a hyper card and then show you little more you saw click works let's do some AMT let's see I'm running low on time so I instead of just actually launching a project in AMC I will show you converting an AMT project life here's a folder that contains a project and a MT project apparently AMT was never loaded on this machine so you don't see the icon they'll have to trust me on this one but what I'm going to do is launch an application that's capable of converting that a MT project to a QT I formatted the way that's very similar to what Rubin has done with click works let's go ahead and convert it okay guys find the media since some of the different drive that's easily accomplished ok now as this converter grinds through the project it's in the format defined by Apple media tool AMT what it will do of course is to create the interactivity track for a movie add the samples to the track add the media to the samples and so forth and what it's also doing and what's interesting to mention is that it takes actions that were assigned in AMT and expresses them in C code then it compiles that C code using the C to Q code compiler that's available in QT I and then when it's done not only will the movie run as an interactive movie it's also possible to open it up with another authoring tool such as QT I make look at the C code and edit it and change the behavior or add new behavior to it so let's take this movie which was just created let's open it with QT I make some of you may recognize this it's one of the samples that comes on the AMT CD type of louder than I do so some basic features here are some rollover buttons change the picture over there I'll click on the picture go to a different screen and this particular screen we have some ambient sound we have a VR movie we have a scrolling map this goes faster name key right now than it does in Nook you see I here I can rollover the other guy and this will follow the mouse around maybe I want some more behavior that's not possible in AMT here so let's go to authoring mode and to catch that guy there stop doing that and go to the message handlers what I want to do is add some behavior that isn't possible by AMT actions so what I'm going to do is come back over here and let's see that is the folder I have a text clipping here alright open in simple text knock yourself out and I have some C code that I can add to this particular object on mouse-over what I want to do is something that I can't do in AMT I want to make this object follow the mouse around anywhere on the screen not just in a particular direction so let's go ahead and add that code let's see we want to use the c2q code compiler and that ought to do it let me compile this and having done that I should be able to have this guy follow me around there you go can't do that okay so believe it or not I got through all of those demos and I still have some time left to talk about hypercard so let's talk about HyperCard last year we got up and said that we were going to rebuild hypercard on top of QuickTime interactive obviously we have continued to do that and we are committed to completing that implementation at the moment a couple things have affected our delivery schedule one of them is the absolute requirement to deliver as a portable version of QuickTime on Windows and Macintosh before the interactive piece comes out I'm sure you'll agree with me that the interactive features of QuickTime are a lot less interesting to the market if they're not available in their full splendor on Windows as well as Macintosh so we've made it a priority to complete the windows implementation of QuickTime 3.0 before putting this through the product shoot so here we go hypercard what I want to do I want to build a movie except I want to use stack like content model and HyperCard like ways to do I'm going to call this whole movie mom why because Steve Jobs told me to actually the reason I'm doing that is because of a limitation that we will shortly remove we open some media up here I haven't had some media that that was created with really high tech tools I have a JPEG image that was created using our quick take quick take camera at home and I have some movies that we did with our home video camera and simply digitizing them using Apple video player so no fancy stuff here we the rule for this demo was not to do anything you couldn't do on a Performa as configured so let me grab a picture of my son in his early stage of learning to dance then one in his early stage of locomotion and finally an early stage of elocution open up some info for this last movie because what I want to do is to give it behavior by means of the hypercar tasks feature that we introduced in HyperCard two three this is a way for objects to have behavior without scripting this particular case whoops when the mouse is entered when the mouse enters the object I want the thing to play and I want to hear what the movie is doing obviously the user interface needs some tuning then when the mouse exits I want it to stop playing and I want it to stop sounding like anything so I'm just having done that without any scripting whatsoever I should be able to put the mouse in there Oh draft mount Center at test pardon mounts internet test now enter no I click that I know what this is can't fool me I have to find that QuickTime component so once again live in Cupertino whoops sorry in San Jose oh really your hair point and play now if only we're possible for you to do point and play on your web pages lens that'd be great okay let's try it say for Internet so what I will do with our safer internet command and HyperCard 3.0 is merely save an HTML document that embeds this movie by means of the QuickTime plug-in let's quit HyperCard here I have my HTML document hanging around here somewhere should be able to open it in Netscape Navigator oh I forgot Java sorry see the key and here's that very same movie inside of Netscape Navigator and now point play okay I'm really running low on time so I have to talk to the cops right now okay let's go I needed to QuickTime media scripting so we're going to do some scripting and HyperCard 3.0 and what its gonna look like first of all what we want to do is import a VR movie we can just drop it in there inside of Hydra car to get a VR object certainly that's very easy however perhaps what you want to do is some scripting with the subject on mouse within set the pen angles to pen angles plus or widen oh how about 20 degrees where's the plus sign on a keyboard thank you very much now compile and Link to cue code enter the mouse then dump it up thumb thumb but that's not all how about some 3d let's put a teapot inside of the hyper card card which is card number two in the sticker stash and drag it in there when you get a VR object let's go back to play mode and of course just move it around like that but perhaps what you want to do is script it so let's go to the script editor and say on Mouse within a very similar thing except in this particular case set the oh I don't know why rotation to Y rotation plus I have a three degrees which of course we need Express in radians this is quick to our quick draw 3d of course what we'll do is we will we'll create a rotation abstraction in QuickTime interactive so you can use degrees or radians whatever you like so now let's go back to play mode and stick your mouse in there and there it goes but wait there's more what I want to do is add a file of my alias you have to does Julian fries it cuts it straight just falls down and goes bang okay let me find my media file there it is let me open it up now I want to import another 3d model via Illiad via alias let's do that unless we create another one let's change it to make the default the airplane instead of the teapot that's kind of boring let's script now again and say on Mouse up set the resource ID - this is kind of weird 3 - resource ID why because it works now if I put the mouse in it will certainly spin but if I click it will change to the other 3d model okay so we really do integrate QuickTime technologies how about that internet stuff all right I want to Mack my launch Netscape Navigator five minutes ago will it crash what I want to do is go to my local web page QuickTime com I'll try this on your browser at home now I want to go to one of these guys here I'm going to grab some images live off the web how about from this nice Apple page how about an option key press thank you so I'm loaded this page naturally have JPEG and gif images here but I really want to use them inside of paper cards so what I will do is drag the JPEG image off of the server live I don't know if the jet who cares drop it into hyper card which one is it in I am an offering mode but I'm waiting for is the data to be downloaded live off the internet what I've done is just by dragging out of Netscape I created a picture object and if I take a look at the media panel you see that I'm doing this by reference and what's the reference it's the URL it's the URL there it is okay I'll just do one more of those if I can hit the M please there we go so from a different website I can grab a different logo and do the same thing okay the question then can we do this without the browser all right let's get rid of the browser let's take this particular movie that I've been so assiduously creating for you as you can see it has a number of cards it has the VR card it has a 3d card and it has the card with live images off the web but I'm going to do since I'm at a time I was going to script some digital effects you saw Rubens visual effect so trust me we can do them in hypercar too and yes the command is digital effect what I'll do to save this movie without recourse to the browser I should be able to open this movie inside of movie player' and all the same things should continue to work pulling the data off the internet live there it is okay we got two minutes left so let's call up Tom Becker of the hypercar team he's going to show you some basic oh I don't know what do you need in a scripting language how about debugging Tom Lopez running here so that's just just make a stack here and let's create an object so we can script I've got a nice hypercard button and I really don't like a blank buttons okay and let's bring up the script and that's got it has some scripts around here somewhere let's see as you can see typing and hypercard is very fast now I was going to actually demonstrate the max bug debugging approach well first off let me show you what we got right here this is user-defined handler and then here this is an override of a hyper card system message which is defined by the system so what I should be able to do is go back here and run the thing get two beats okay so it actually is working let me turn on message trace and watch what's happening okay you see the mouth enter Mouse leaves okay so I got how there's the mouse out and there's the user message call now QuickTime is busy that's why we have these check boxes here is so that you don't see all the messages that are actually going on here however at least it's very efficient and okay now the other thing is let's go back to the script editor and let me set a breakpoint and run the thing actually let me close the window it's more dramatic that way one be okay here I am Emma I'm at the break and it's even selected the right line and now I can say go and I'll do get Abbey okay obviously we'll support the other features that you're used to in hypercard debugging I'm sure tom is going to mention that yeah I actually wanted to mention is we have things like we support multiple compilers and and so if you're going to do a compiler for two code you know will tell you what the symbol format is and then you can just horse debugging so okay as much as I'd like to show you more we're out of time the big bomb is up in the back of the room so come to the quick time feedback forum which is at 4:30 in room j4 and we'll answer your questions thanks very much [Applause] [Music] to make it
