説明なし

player.js 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. 'use strict';
  2. /**
  3. * @ngdoc function
  4. * @name infernoQuadrifonicoApp.controller:AboutCtrl
  5. * @description
  6. * # AboutCtrl
  7. * Controller of the infernoQuadrifonicoApp
  8. */
  9. angular.module('infernoQuadrifonicoApp')
  10. .controller('PlayerCtrl', function ($http, $scope, $interval, $localStorage) {
  11. var socket = io();
  12. socket.on('play', function(arquivo){
  13. console.log("Playing file: " + arquivo.url)
  14. $scope.playAudioFile(arquivo);
  15. });
  16. socket.on('stop', function(arquivo){
  17. console.log("Playing file: " + arquivo.url)
  18. $scope.stopAudioFile(arquivo);
  19. });
  20. socket.on('update playback', function(arquivo){
  21. console.log("Updating playback: " + arquivo.url)
  22. $scope.updatePlayback(arquivo);
  23. });
  24. $http.get('roteiro.json')
  25. .then(function(res){
  26. console.log("Loading data from file...")
  27. $scope.roteiro = res.data.estrofe;
  28. for (var i = 0; i < $scope.roteiro.length; i++) {
  29. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  30. $scope.roteiro[i].arquivos[c].playing = false;
  31. $scope.roteiro[i].arquivos[c].seek = 0;
  32. $scope.roteiro[i].arquivos[c].surround_x = 0;
  33. $scope.roteiro[i].arquivos[c].surround_y = 0;
  34. $scope.loadAudioFile($scope.roteiro[i].arquivos[c]);
  35. $scope.roteiro[i].arquivos[c].show = true;
  36. }
  37. }
  38. console.log($scope.roteiro);
  39. });
  40. $scope.loadAudioFile = function(arquivo){
  41. for (var i = 0; i < $scope.roteiro.length; i++) {
  42. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  43. if($scope.roteiro[i].arquivos[c].url == arquivo.url){
  44. var sound = new Howl({
  45. usingWebAudio: true,
  46. html5: false,
  47. src: [$scope.roteiro[i].arquivos[c].url],
  48. autoplay: false,
  49. loop: $scope.roteiro[i].arquivos[c].loop,
  50. volume: ($scope.roteiro[i].arquivos[c].volume/100),
  51. stereo: $scope.roteiro[i].arquivos[c].pan,
  52. onend: function(id) {
  53. for (var i = 0; i < $scope.roteiro.length; i++) {
  54. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  55. if($scope.roteiro[i].arquivos[c].id == id){
  56. $scope.roteiro[i].arquivos[c].playing = false;
  57. $scope.roteiro[i].arquivos[c].seek = 0;
  58. console.log('Finished: ' + id + " | playing: " + $scope.roteiro[i].arquivos[c].playing);
  59. $scope.$apply();
  60. delete $scope.roteiro[i].arquivos[c].sound;
  61. break;
  62. }
  63. }
  64. }
  65. }
  66. });
  67. }
  68. }
  69. }
  70. }
  71. $scope.playAudioFile = function(arquivo){
  72. for (var i = 0; i < $scope.roteiro.length; i++) {
  73. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  74. if($scope.roteiro[i].arquivos[c].url == arquivo.url){
  75. $scope.roteiro[i].arquivos[c].volume = parseInt(arquivo.volume);
  76. $scope.roteiro[i].arquivos[c].pan = parseInt(arquivo.pan);
  77. $scope.roteiro[i].arquivos[c].seek = parseInt(arquivo.seek);
  78. console.log($scope.roteiro[i].arquivos[c])
  79. if($scope.roteiro[i].arquivos[c].sound) {
  80. $scope.roteiro[i].arquivos[c].sound.volume($scope.roteiro[i].arquivos[c].volume/100);
  81. $scope.roteiro[i].arquivos[c].sound.stereo($scope.roteiro[i].arquivos[c].pan/100);
  82. $scope.roteiro[i].arquivos[c].sound.stop();
  83. $scope.roteiro[i].arquivos[c].sound.play();
  84. } else {
  85. var sound = new Howl({
  86. //usingWebAudio: true,
  87. //html5: false,
  88. src: [$scope.roteiro[i].arquivos[c].url],
  89. autoplay: false,
  90. loop: $scope.roteiro[i].arquivos[c].loop,
  91. volume: ($scope.roteiro[i].arquivos[c].volume/100),
  92. stereo: $scope.roteiro[i].arquivos[c].pan,
  93. onend: function(id) {
  94. for (var i = 0; i < $scope.roteiro.length; i++) {
  95. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  96. if($scope.roteiro[i].arquivos[c].id == id){
  97. $scope.roteiro[i].arquivos[c].playing = false;
  98. $scope.roteiro[i].arquivos[c].seek = 0;
  99. console.log('Finished: ' + id + " | playing: " + $scope.roteiro[i].arquivos[c].playing);
  100. $scope.$apply();
  101. delete $scope.roteiro[i].arquivos[c].sound;
  102. socket.emit('play ended', $scope.roteiro[i].arquivos[c]);
  103. break;
  104. }
  105. }
  106. }
  107. }
  108. });
  109. $scope.roteiro[i].arquivos[c].sound = sound
  110. $scope.roteiro[i].arquivos[c].id = sound.play();
  111. }
  112. $scope.roteiro[i].arquivos[c].sound.stereo($scope.roteiro[i].arquivos[c].pan);
  113. $scope.roteiro[i].arquivos[c].playing = true;
  114. var d = $scope.roteiro[i].arquivos[c].sound.duration();
  115. var s = $scope.roteiro[i].arquivos[c].seek;
  116. $scope.roteiro[i].arquivos[c].sound.seek((d * s)/100)
  117. console.log('Playing: ' + $scope.roteiro[i].arquivos[c].id + " | pan: " + $scope.roteiro[i].arquivos[c].pan + " | volume: " + $scope.roteiro[i].arquivos[c].volume);
  118. }
  119. }
  120. }
  121. }
  122. $scope.stopAudioFile = function(arquivo){
  123. for (var i = 0; i < $scope.roteiro.length; i++) {
  124. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  125. if($scope.roteiro[i].arquivos[c].url == arquivo.url){
  126. $scope.roteiro[i].arquivos[c].sound.stop();
  127. delete $scope.roteiro[i].arquivos[c].sound;
  128. $scope.roteiro[i].arquivos[c].playing = false;
  129. $scope.roteiro[i].arquivos[c].seek = 0;
  130. console.log('Finished: ' + $scope.roteiro[i].arquivos[c].id + " | playing: " + $scope.roteiro[i].arquivos[c].playing);
  131. }
  132. }
  133. }
  134. }
  135. $scope.updatePlayback = function(arquivo){
  136. for (var i = 0; i < $scope.roteiro.length; i++) {
  137. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  138. if($scope.roteiro[i].arquivos[c].url == arquivo.url){
  139. if(arquivo.seek){
  140. $scope.roteiro[i].arquivos[c].seek = arquivo.seek;
  141. var d = $scope.roteiro[i].arquivos[c].sound.duration();
  142. var s = $scope.roteiro[i].arquivos[c].seek;
  143. var v = $scope.roteiro[i].arquivos[c].sound.seek();
  144. $scope.roteiro[i].arquivos[c].sound.seek(s)
  145. console.log("seek: " + s);
  146. }
  147. if(arquivo.volume){
  148. $scope.roteiro[i].arquivos[c].volume = arquivo.volume;
  149. $scope.roteiro[i].arquivos[c].sound.volume($scope.roteiro[i].arquivos[c].volume/100);
  150. console.log("volume: " + $scope.roteiro[i].arquivos[c].sound.volume() + " | " + $scope.roteiro[i].arquivos[c].volume);
  151. }
  152. if(arquivo.pan){
  153. $scope.roteiro[i].arquivos[c].pan = arquivo.pan;
  154. $scope.roteiro[i].arquivos[c].sound.stereo($scope.roteiro[i].arquivos[c].pan/100);
  155. console.log("pan: " + $scope.roteiro[i].arquivos[c].sound.stereo() + " | " + $scope.roteiro[i].arquivos[c].pan);
  156. }
  157. break;
  158. }
  159. }
  160. }
  161. }
  162. });