Nav apraksta

player.js 8.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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 channel = 0;
  12. $scope.current_channel = 1;
  13. $scope.changeChannel = function() {
  14. if(channel == 0){
  15. channel = 1;
  16. $scope.current_channel = 2;
  17. } else {
  18. channel = 0;
  19. $scope.current_channel = 1;
  20. }
  21. console.log("changing to channel " + channel);
  22. }
  23. var socket = io();
  24. socket.on('play', function(arquivo){
  25. console.log("Playing file: " + arquivo.url)
  26. $scope.playAudioFile(arquivo);
  27. });
  28. socket.on('stop', function(arquivo){
  29. console.log("Playing file: " + arquivo.url)
  30. $scope.stopAudioFile(arquivo);
  31. });
  32. socket.on('update playback', function(arquivo){
  33. console.log("Updating playback: " + arquivo.url)
  34. $scope.updatePlayback(arquivo);
  35. });
  36. $http.get('roteiro.json')
  37. .then(function(res){
  38. console.log("Loading data from file...")
  39. $scope.roteiro = res.data.estrofe;
  40. for (var i = 0; i < $scope.roteiro.length; i++) {
  41. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  42. $scope.roteiro[i].arquivos[c].playing = false;
  43. $scope.roteiro[i].arquivos[c].channels[0].seek = 0;
  44. $scope.roteiro[i].arquivos[c].channels[1].seek = 0;
  45. $scope.loadAudioFile($scope.roteiro[i].arquivos[c]);
  46. $scope.roteiro[i].arquivos[c].show = true;
  47. }
  48. }
  49. console.log($scope.roteiro);
  50. });
  51. $scope.loadAudioFile = function(arquivo){
  52. for (var i = 0; i < $scope.roteiro.length; i++) {
  53. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  54. if($scope.roteiro[i].arquivos[c].url == arquivo.url){
  55. var sound = new Howl({
  56. usingWebAudio: true,
  57. html5: false,
  58. src: [$scope.roteiro[i].arquivos[c].url],
  59. autoplay: false,
  60. loop: $scope.roteiro[i].arquivos[c].loop,
  61. volume: ($scope.roteiro[i].arquivos[c].channels[channel].volume/100),
  62. stereo: $scope.roteiro[i].arquivos[c].channels[channel].pan,
  63. onend: function(id) {
  64. for (var i = 0; i < $scope.roteiro.length; i++) {
  65. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  66. if($scope.roteiro[i].arquivos[c].id == id){
  67. $scope.roteiro[i].arquivos[c].playing = false;
  68. $scope.roteiro[i].arquivos[c].channels[channel].seek = 0;
  69. console.log('Finished: ' + id + " | playing: " + $scope.roteiro[i].arquivos[c].playing);
  70. $scope.$apply();
  71. delete $scope.roteiro[i].arquivos[c].sound;
  72. break;
  73. }
  74. }
  75. }
  76. }
  77. });
  78. }
  79. }
  80. }
  81. }
  82. $scope.playAudioFile = function(arquivo){
  83. for (var i = 0; i < $scope.roteiro.length; i++) {
  84. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  85. if($scope.roteiro[i].arquivos[c].url == arquivo.url){
  86. //$scope.roteiro[i].arquivos[c].volume = arquivo.channels[channel].volume;
  87. //$scope.roteiro[i].arquivos[c].pan = arquivo.channels[channel].pan;
  88. //$scope.roteiro[i].arquivos[c].seek = arquivo.channels[channel].seek;
  89. $scope.roteiro[i].arquivos[c].channels = arquivo.channels;
  90. console.log($scope.roteiro[i].arquivos[c])
  91. var channels = $scope.roteiro[i].arquivos[c].channels;
  92. console.log("received: " + $scope.roteiro[i].arquivos[c].url.split("public/audio/").pop() + " (" + channels[0].volume + "/" + channels[1].volume + " | " + channels[0].pan + "/" + channels[1].pan + ")")
  93. console.log("playing: " + $scope.roteiro[i].arquivos[c].url.split("public/audio/").pop() + " (" + channels[channel].volume + " | " + channels[channel].pan + ")")
  94. if($scope.roteiro[i].arquivos[c].sound) {
  95. $scope.roteiro[i].arquivos[c].sound.volume($scope.roteiro[i].arquivos[c].channels[channel].volume/100);
  96. $scope.roteiro[i].arquivos[c].sound.stereo($scope.roteiro[i].arquivos[c].channels[channel].pan/100);
  97. $scope.roteiro[i].arquivos[c].sound.stop();
  98. $scope.roteiro[i].arquivos[c].sound.play();
  99. } else {
  100. var sound = new Howl({
  101. //usingWebAudio: true,
  102. //html5: false,
  103. src: [$scope.roteiro[i].arquivos[c].url],
  104. autoplay: false,
  105. loop: $scope.roteiro[i].arquivos[c].loop,
  106. volume: ($scope.roteiro[i].arquivos[c].channels[channel].volume/100),
  107. stereo: $scope.roteiro[i].arquivos[c].channels[channel].pan,
  108. onend: function(id) {
  109. for (var i = 0; i < $scope.roteiro.length; i++) {
  110. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  111. if($scope.roteiro[i].arquivos[c].id == id){
  112. $scope.roteiro[i].arquivos[c].playing = false;
  113. $scope.roteiro[i].arquivos[c].seek = 0;
  114. console.log('finished: ' + $scope.roteiro[i].arquivos[c].url.split("public/audio/").pop());
  115. $scope.$apply();
  116. delete $scope.roteiro[i].arquivos[c].sound;
  117. socket.emit('play ended', $scope.roteiro[i].arquivos[c]);
  118. break;
  119. }
  120. }
  121. }
  122. }
  123. });
  124. $scope.roteiro[i].arquivos[c].sound = sound
  125. $scope.roteiro[i].arquivos[c].id = sound.play();
  126. }
  127. $scope.roteiro[i].arquivos[c].sound.stereo($scope.roteiro[i].arquivos[c].pan);
  128. $scope.roteiro[i].arquivos[c].playing = true;
  129. var d = $scope.roteiro[i].arquivos[c].sound.duration();
  130. var s = $scope.roteiro[i].arquivos[c].channels[channel].seek;
  131. $scope.roteiro[i].arquivos[c].sound.seek((d * s)/100)
  132. //console.log('Playing: ' + $scope.roteiro[i].arquivos[c].id + " | pan: " + $scope.roteiro[i].arquivos[c].channels[channel].pan + " | volume: " + $scope.roteiro[i].arquivos[c].channels[channel].volume);
  133. }
  134. }
  135. }
  136. }
  137. $scope.stopAudioFile = function(arquivo){
  138. for (var i = 0; i < $scope.roteiro.length; i++) {
  139. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  140. if($scope.roteiro[i].arquivos[c].url == arquivo.url){
  141. $scope.roteiro[i].arquivos[c].sound.stop();
  142. delete $scope.roteiro[i].arquivos[c].sound;
  143. $scope.roteiro[i].arquivos[c].playing = false;
  144. $scope.roteiro[i].arquivos[c].channels[channel].seek = 0;
  145. console.log('Finished: ' + $scope.roteiro[i].arquivos[c].id + " | playing: " + $scope.roteiro[i].arquivos[c].playing);
  146. }
  147. }
  148. }
  149. }
  150. $scope.updatePlayback = function(arquivo){
  151. for (var i = 0; i < $scope.roteiro.length; i++) {
  152. for (var c = 0; c < $scope.roteiro[i].arquivos.length; c++) {
  153. if($scope.roteiro[i].arquivos[c].url == arquivo.url){
  154. if(arquivo.channels[channel].seek){
  155. $scope.roteiro[i].arquivos[c].channels[channel].seek = arquivo.channels[channel].seek;
  156. var d = $scope.roteiro[i].arquivos[c].sound.duration();
  157. var s = $scope.roteiro[i].arquivos[c].channels[channel].seek;
  158. var v = $scope.roteiro[i].arquivos[c].sound.seek();
  159. $scope.roteiro[i].arquivos[c].sound.seek(s)
  160. console.log("seek: " + s);
  161. }
  162. if(arquivo.channels[channel].volume){
  163. $scope.roteiro[i].arquivos[c].channels[channel].volume = arquivo.channels[channel].volume;
  164. $scope.roteiro[i].arquivos[c].sound.volume($scope.roteiro[i].arquivos[c].channels[channel].volume/100);
  165. console.log("volume: " + $scope.roteiro[i].arquivos[c].sound.volume() + " | " + $scope.roteiro[i].arquivos[c].channels[channel].volume);
  166. }
  167. if(arquivo.channels[0].pan){
  168. $scope.roteiro[i].arquivos[c].channels[channel].pan = arquivo.channels[channel].pan;
  169. $scope.roteiro[i].arquivos[c].sound.stereo($scope.roteiro[i].arquivos[c].channels[channel].pan/100);
  170. console.log("pan: " + $scope.roteiro[i].arquivos[c].sound.stereo() + " | " + $scope.roteiro[i].arquivos[c].channels[channel].pan);
  171. }
  172. break;
  173. }
  174. }
  175. }
  176. }
  177. });