Well, been scripting, sketching and testing. The pathway to date has been:
- make a diptych
- mouse into either video increases volume of audio for that track
- you should be able to pause either video
- mouse out returns video to original (approx 10%) volume
- include time based links in each of the videos
Then it also became
- let either of the videos (in either pane) able to be accelerated or slowed
This has raised all sorts of interaction questions and issues. For example, mousing into either video to change soundtrack is not intuitive, and depending on the video it may not be clear that mousing actually does anything. Now I prefer mouse over and mouse enter to mouse click for making things happen. It makes the videos more like touch movies, things you have to caress, rather than these bloody clicky things. However, in adding the buttons to speed up and slow down the movies it seemed that a mouse click made more sense since I can imagine people just not getting what goes on when things happen just because you mouse into something. Of course changing content or style as a direct response to the mouse in helps (like the way you can make links change when you mouse over them in HTML using hover in your CSS), but that is different to actually having the work do something qualitative (eg change speed) because you mouse into something. The bigger issue that this then produces is inconsistency – you mouse into the video to effect a volume change, but you have to click other things to make other things happen. This is not good.
Then to compound it once you start speeding up or slowing down the video then mousing to change the volume becomes irrelevant. Once the video is going faster you just get very fast sound, and conversely when it is going slow you don’t get much at all – who cares and what does it matter if you can, or can’t hear it?
So right now I think I will remove the sound change sprites. I will also remove the soundtrack from the video and actually run that as a separate, third childmovie. What this means is that the sound will play, at normal speed and volume, regardless of the playback speed of the video windows. I haven’t implemented this yet, but particularly like it (well, until I test it). This way you can slow down, accelerate, stop the videos but the sound track (and possibly commentary?) will continue. Of course I then might need to stick a mute button on there too. mmm.
As usual with me the scripting is slow. I’m not what you’d call a programmer. I got the faster and slower buttons working fine, basically it counts mouse clicks and the faster does an argument where the film speed is set to multiply by the number of clicks, up to a maximum of 5. Therefore it plays at normal, twice, triple and so on up to five times normal speed. The slower button I divide normal speed (what QuickTime thinks of as a rate of ’1′) by the number of clicks: so 1/1, 1/2, 1/3, 1/4 and 1/5 and after 5 the variable (mouse clicks) is returned to 1. This though causes problems, since you can speed the film to 5 times normal, then 2 clicks in the slow and the movie is now 1/2 normal speed, not 1/2 of what it was before. eg If I click 4 times the video (lets assume it is 24 fps) will not be running at 96 fps, so clicking on the slow button you’d think should say, half the current speed.
The problem with all of that is that if I’ve made the video faster and it seems that this button should make it slower, then that’s what it should do. So, the first attempt at this I counted mouse clicks and saved them to a variable and used this in both sprites. Quickly figured out that was pretty stupid, clicking the faster one 4 times to get a video 4 x normal speed would mean clicking once on the slow button the video is not 1/5 of normal speed. That just seemed rather a large change. So I spent a lot of time trying to work out ways to do all of this, and the solution I’ve finally got to is not ideal, but is a bit clearer from a user experience pov. Basically for each sprite I now check for current film speed. For the go faster sprite if the film speed is less than ’1′ then it has been slowed down, so I then make the film speed 1 then start counting mouse clicks to accelerate it. This means if you’ve got the video at 1/5 normal speed and you go to click the go faster button then it restores playback speed to normal, then starts going faster.
Similarly for the go slow sprite it checks to see if the film speed is more than ’1′. If it is then the user has been clicking the go faster sprite and so again if you click the go slow button the first thing it does is restore the film speed to normal and then start counting mouse clicks to slow the video down. I tried to work out a more elegant solution, for example simply multiplying current speed by mouse click to accelerate the video, but the maths doesn’t work. For example if the video is playing at 1/4 normal speed and you then click the go faster sprite, then I need the video to now be 1/2 normal speed, the calculation to get that would be 1/4 x 2, and I could get the mouse count to 2 for this, but then click go faster again and the calculation becomes 1/2 x 3 so instead of getting to normal playback it is 1 1/2 times. This might not matter that much (though once you start playing with the work you’d never get normal speed again), but then when you start slowing it down (and so dividing it by the mouse count) you just get all sorts of variations – 1.5 normal speed divided by 1, then 2, then 3…
Ah, but you see I’m such a poor programmer that in writing this out I see that I’m doing this all wrong! All I need to do is to divide or multiply speed by a constant (say 2) and just make sure it doesn’t work past, say 5 iterations (5 times acceleration) and things would work. Sheesh, I really struggle with this stuff because now I can see just how bleedin’ simple and obvious that is. OK, let’s return to the kitchen and try that one out.
UPDATE FROM THE KITCHEN
Bugger. The two actions available are SetRateTo(x) and SetRateBy(x). The first is an integer that just sets the playback rate (1 for normal, 2 for double, etc). The second you’d think might be a multiplier, eg if you entered 2 then it would double, but the ‘By’ in SetRateBy just adds, so if you put in 2 then it just adds 2 to the current playback speed. If it were at 1, then you’d get 3, 5, 7 etc. This makes it good for the go faster sprite (SetRateBy(1)), but for the go slower sprite there aren’t any numbers I can add to 1 to end up with less than 1! Also if the number becomes negative the video plays backwards, which is not the effect I’m after.
Tags:
Lifes Little Pieces,
Vogging