theoratest.monkey2 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. Namespace myapp
  2. #Import "<std>"
  3. #Import "<mojo>"
  4. #Import "<theoraplayer>"
  5. #Import "konqi.ogv"
  6. Using std..
  7. Using mojo..
  8. Using theoraplayer..
  9. Class MyWindow Extends Window
  10. Field audiofactory:AudioInterfaceFactory
  11. Field vidman:VideoManager
  12. Field data:DataBuffer
  13. Field vidclip:VideoClip
  14. Field image:Image
  15. Field time:Double
  16. Field gain:float=1
  17. Method New( title:String="Simple mojo app",width:Int=640,height:Int=480,flags:WindowFlags=WindowFlags.Resizable )
  18. Super.New( title,width,height,flags )
  19. vidman=VideoManager.getInstance()
  20. audiofactory=New OpenAL_AudioInterfaceFactory
  21. vidman.setAudioInterfaceFactory( audiofactory )
  22. data=DataBuffer.Load( "asset::konqi.ogv" )
  23. vidclip=vidman.createVideoClip( data.Data,data.Length )
  24. ' vidclip=vidman.createVideoClip( AssetsDir()+"konqi.ogv" )
  25. If Not vidclip Print "Can't load vidclip!"
  26. image=New Image( vidclip.getWidth(),vidclip.getHeight(),PixelFormat.RGB24,TextureFlags.Dynamic )
  27. vidclip.play()
  28. time=Now()
  29. End
  30. Method OnRender( canvas:Canvas ) Override
  31. App.RequestRender()
  32. Local now:=Now()
  33. Local elapsed:=now-time
  34. time=now
  35. vidman.update( elapsed )
  36. ' vidclip.updateTimerToNextFrame() 'play full speed...
  37. Local frame:=vidclip.fetchNextFrame()
  38. If frame
  39. Local pixmap:=New Pixmap( vidclip.getWidth(),vidclip.getHeight(),PixelFormat.RGB24,frame.getBuffer(),vidclip.getWidth()*3 )
  40. image.Texture.PastePixmap( pixmap,0,0 )
  41. vidclip.popFrame()
  42. Endif
  43. If Keyboard.KeyPressed( Key.Up )
  44. gain=Min( gain+.125,1.0 )
  45. vidclip.setAudioGain( gain )
  46. Else If Keyboard.KeyPressed( Key.Down )
  47. gain=Max( gain-.125,0.0 )
  48. vidclip.setAudioGain( gain )
  49. Endif
  50. canvas.BlendMode=BlendMode.Opaque
  51. canvas.DrawRect( 0,0,Width,Height,image )
  52. canvas.DrawText( "Time position="+vidclip.getTimePosition()+", duration="+vidclip.getDuration(),0,0 )
  53. canvas.DrawText( "Audio gain="+vidclip.getAudioGain(),0,16 )
  54. End
  55. End
  56. Function Main()
  57. New AppInstance
  58. New MyWindow
  59. App.Run()
  60. End