Volumen.as

  1. /*
  2.   Volumen.as — Clip de control de volumen — ProInf.net 2010
  3.  
  4.   Sirve para cambiar el volumen de los sonidos reproducidos en el Flash.
  5.   Consiste en unas barras verticales que indican porcentajes de volumen: 100%, 90%, hasta 0%
  6. */
  7. package
  8. {
  9. import flash.display.*;
  10. import flash.events.*;
  11.  
  12. import flash.media.*;
  13. import flash.net.URLRequest;
  14. import flash.text.TextField;
  15.  
  16. public class Volumen extends MovieClip
  17. {
  18. // CONSTANTES ---------------------------------
  19.  
  20. private const NUM_BARRAS:int = 10; // Son diez barras sin contar la del 0%
  21.  
  22. // PROPIEDADES --------------------------------
  23.  
  24. private static var trans_sonido:SoundTransform = new SoundTransform();
  25.  
  26. private var volumen:Number; // Volumen entre 0 y 1
  27. private var pulsado:Boolean; // Indica si el ratón está pulsado
  28.  
  29.  
  30. // CONSTRUCTOR --------------------------------
  31.  
  32. public function Volumen() {
  33. volumen = 0.5;
  34. mostrar_volumen(false);
  35. activar_barras();
  36. trans_sonido.volume = volumen;
  37.  
  38. useHandCursor = true;
  39. buttonMode = true;
  40.  
  41. pulsado = false;
  42. addEventListener(MouseEvent.MOUSE_DOWN, pulsar_raton);
  43. addEventListener(MouseEvent.MOUSE_UP, soltar_raton);
  44. //addEventListener(MouseEvent.MOUSE_WHEEL, soltar_raton);
  45. addEventListener(MouseEvent.MOUSE_MOVE, mover_raton);
  46. }
  47.  
  48. // INTERFAZ -----------------------------------
  49.  
  50. // En el momento de reproducir un sonido podemos obtener su canal.
  51. // Al canal le aplicamos nuestra transformada de sonido para darle
  52. // así el volumen deseado.
  53. //
  54. // Por ejemplo:
  55. // var sonido:Sound = new Sound(new URLRequest("musica.mp3"));
  56. // var canal:SoundChannel = sonido.play();
  57. // canal.soundTransform = Volumen.soundTransform;
  58. //
  59. public static function get soundTransform():SoundTransform {
  60. return trans_sonido;
  61. }
  62.  
  63. // EVENTOS ------------------------------------
  64.  
  65. private function pulsar_raton (evento:MouseEvent):void {
  66. pulsado = true;
  67. mover_raton(evento);
  68. }
  69. private function soltar_raton (evento:MouseEvent):void {
  70. pulsado = false;
  71. mostrar_volumen(false);
  72. }
  73. private function mover_raton (evento:MouseEvent):void {
  74. if (pulsado) {
  75. volumen = ratio_xraton();
  76. mostrar_volumen(true);
  77. activar_barras();
  78. trans_sonido.volume = volumen;
  79. }
  80. }
  81.  
  82. // PRIVADO ------------------------------------
  83.  
  84. private function ratio_xraton():Number {
  85. var ancho_barra:Number = width / 11; // Son once barras contando la inexistente del 0%
  86. var valor:Number = 10 - int(mouseX / ancho_barra); // 10, 9, ... 0
  87. return Math.round(valor)/10; // Resultados: 1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0
  88. }
  89.  
  90. private function mostrar_volumen(mostrado:Boolean):void {
  91. porcentaje.visible = mostrado;
  92. porcentaje.text = int(volumen * 100) + "%";
  93. }
  94.  
  95. private function activar_barras():void {
  96. var indice:int = int(volumen * 10);
  97. for (var i=1; i<=NUM_BARRAS; ++i) {
  98. var barra:MovieClip = this["barra"+i];
  99. barra.gotoAndStop(i<=indice? "on": "off");
  100. }
  101. }
  102.  
  103. } // class Volumen
  104.  
  105. } // package

Proinf.net