sound.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. function myb64(bytes)
  2. {
  3. var binary = '';
  4. var len = bytes.byteLength;
  5. for (var i = 0; i < len; i++) {
  6. binary += String.fromCharCode( bytes[ i ] )
  7. }
  8. return window.btoa( binary );
  9. }
  10. function looped()
  11. {
  12. this.currentTime = 0;
  13. this.play();
  14. }
  15. var sound = {
  16. _handles:{},
  17. play: function(path, volume, loop){
  18. try{
  19. var data = FS.readFile(path, {encoding:'binary'});
  20. }
  21. catch(er)
  22. {
  23. return 0;
  24. }
  25. var b64data = myb64(data);
  26. var src = "data:audio/ogg;base64," + b64data;
  27. var a = new Audio();
  28. a.src = src;
  29. a.play();
  30. a.volume = volume;
  31. if (loop)
  32. {
  33. a.addEventListener('ended', looped, false);
  34. }
  35. var obj = {instance:a, looped:loop};
  36. return js2cpp.create(obj);
  37. },
  38. get: function(id){
  39. return js2cpp.get(id);
  40. },
  41. setVolume: function(id, volume){
  42. var s = sound.get(id);
  43. if (!s)
  44. return;
  45. s.instance.volume = volume;
  46. },
  47. pause: function(id){
  48. var s = sound.get(id);
  49. if (!s)
  50. return;
  51. s.instance.pause();
  52. },
  53. resume: function(id){
  54. var s = sound.get(id);
  55. if (!s)
  56. return;
  57. s.instance.play();
  58. },
  59. stop: function(id){
  60. var s = sound.get(id);
  61. if (!s)
  62. return;
  63. if (s.looped)
  64. s.instance.removeEventListener('ended', looped);
  65. s.instance.pause();
  66. },
  67. update: function(id){
  68. var s = sound.get(id);
  69. if (!s)
  70. return;
  71. var ended = s.instance.ended;
  72. return ended;
  73. },
  74. free: function(id){
  75. js2cpp.free(id);
  76. }
  77. };