I’m happy to report that callbacks seem to be working with DirectShow in 
Windows in LC 8.1 RC2.

Basic:
Callbacks are a property of a player. They are basically are a list of numbers, 
each line followed by a message name. The number corresponds to a time in a 
movie/audio file loaded into a player. When the player reaches that time, it 
sends the message. This is useful to have things happen in time synced to the 
progress of a movie.

Advanced:
I already have these callback lists prepared while I was working with .mov 
files on Mac and Windows. With the deprecation on QT in Windows, I’m converting 
those files to wma/wmv.

Integral to the use of callbacks is the timeScale property of a file. The 
timeScale is a number of intervals or blocks per second in a movie. The files I 
had already created with the QuickTime player all have a timeScale of 600. So 
when a player plays, these are the numbers that correspond to the progress of 
time.

After converting a MOV file to WMV, I’ve found that the timeScale went from 600 
to 10,000,000.

So 10,000,000/600 yields a constant of 16,667. That's the number I use to 
multiply each callback number I already have to play in Windows. And it seems 
to work.

Panos suggested:
> Now, regarding your question, I am not 100% sure but I think that
> the Windows player reports always longer duration compared to OSX, but this
> multiplier is not constant, it differs depending on the audio/video file.
> This is why I suggest setting the callbacks as a fraction of the duration,
> since this will work cross platform. i.e.
> 
> (duration/8),callback1
> (duration/6),callback2
> (duration/2),callback3
> ...


I did not have to do anything with the duration. The cross-platform conversion 
where I know the original timeScale in QT, and the original callback in QT:

(timeScale as WMV / timeScale as MOV)  *  existing callback in QT = callback in 
DirectShow

To get the timeScale of a file, you have to first load it into a player and 
then issue:
        put the timeScale of player “Player” into tVar

However, the player in an existing stack reported a timeScale of not 10 
million, but 10,000. So there is variation in the timeScale which affects the 
duration correspondingly. So the algorithm above has to be used.

That existing stack also crashes in the runtime at the point in the script 
where the callback is set. It works properly in the IDE. I haven’t tracked down 
why, but the stack is part of a large project. If I run that stack in isolation 
in the runtime environment, it works properly, and now has a timeScale again of 
10 million. Perhaps when the player reports a timeScale of 10 thousand there is 
something wrong and it then causes a crash.

Otherwise… having callbacks working in native Windows is a huge deal for my 
multimedia application, Music In the Air, and I’m very grateful to Panos and 
the LC team for getting it working in LC8! 

I’m planning to move the app in the future to HTML5 and would love to see a 
player with callbacks working there… :)

Peter Bogdanoff
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to