audiotest.monkey2 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. Namespace myapp
  2. #Import "<std>"
  3. #Import "<mojo>"
  4. '#import "fine_morning.wav"
  5. #import "fine_morning.ogg"
  6. Using std..
  7. Using mojo..
  8. Class MyWindow Extends Window
  9. Field sound:Sound
  10. Field channel:Channel
  11. Method New()
  12. ' sound=Sound.Load( "asset::fine_morning.wav" )
  13. sound=Sound.Load( "asset::fine_morning.ogg" )
  14. channel=New Channel
  15. ' SineWave()
  16. End
  17. Method OnRender( canvas:Canvas ) Override
  18. App.RequestRender()
  19. canvas.DrawText( "1:Play, 2:Loop, 3:Pause, 4:Stop, 5/6:Volume 7/8:Rate 9/0:Pan",0,0 )
  20. canvas.DrawText( "Playing="+Int( channel.Playing ),0,24 )
  21. canvas.DrawText( "Paused="+Int( channel.Paused ),0,40 )
  22. canvas.DrawText( "Volume="+channel.Volume,0,56 )
  23. canvas.DrawText( "Rate="+channel.Rate,0,72 )
  24. canvas.DrawText( "Pan="+channel.Pan,0,88 )
  25. canvas.DrawText( "PlayheadSample="+channel.PlayheadSample,0,104 )
  26. canvas.DrawText( "PlayheadTime="+channel.PlayheadTime,0,120 )
  27. End
  28. Method OnKeyEvent( event:KeyEvent ) Override
  29. Select event.Type
  30. Case EventType.KeyDown
  31. Select event.Key
  32. Case Key.Key1
  33. channel.Play( sound )
  34. Case Key.Key2
  35. channel.Play( sound,True )
  36. Case Key.Key3
  37. channel.Paused=Not channel.Paused
  38. Case Key.Key4
  39. channel.Stop()
  40. Case Key.Key5
  41. channel.Volume-=.125
  42. Case Key.Key6
  43. channel.Volume+=.125
  44. Case Key.Key7
  45. channel.Rate*=1.125
  46. Case Key.Key8
  47. channel.Rate/=1.125
  48. Case Key.Key9
  49. channel.Pan-=.25
  50. Case Key.Key0
  51. channel.Pan+=.25
  52. End
  53. End
  54. End
  55. Method SineWave()
  56. #if __TARGET__<>"emscripten"
  57. New Fiber( Lambda()
  58. Const len:=1024
  59. Local sine:=New UByte[len]
  60. Local sineData:=New AudioData( len,AudioFormat.Mono8,22050,Cast<UByte Ptr>( sine.Data ) )
  61. For Local i:=0 Until len
  62. sine[i]=Sin( Float(i)/len * Pi*2 * 16 ) * 127.5 + 127.5
  63. Next
  64. Local sineChan:=New Channel
  65. Repeat
  66. If Keyboard.KeyDown( Key.Up )
  67. sineChan.Rate*=1.00125
  68. Else If Keyboard.KeyDown( Key.Down )
  69. sineChan.Rate/=1.00125
  70. Endif
  71. sineChan.Queue( sineData )
  72. Forever
  73. End )
  74. #Endif
  75. End
  76. End
  77. Function Main()
  78. New AppInstance
  79. New MyWindow
  80. App.Run()
  81. End