Foros del Web » Programando para Internet » Javascript »

Script para interactuar con sonido

Estas en el tema de Script para interactuar con sonido en el foro de Javascript en Foros del Web. Hola, la verdad es que no sé mucho de javascript y creo que me estoy metiendo en algo un poco complicado de hacer pero bueno, ...
  #1 (permalink)  
Antiguo 04/04/2012, 03:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 22
Antigüedad: 13 años, 7 meses
Puntos: 1
Script para interactuar con sonido

Hola, la verdad es que no sé mucho de javascript y creo que me estoy metiendo en algo un poco complicado de hacer pero bueno, a ver si me podéis echar un cable.

Estoy tratando de hacer una página en la que haya un sonido de fondo y el usuario pueda cambiar el volumen en función de la posición del ratón. Es decir que elijo un punto de la página donde el sonido está al 100% y al alejarnos de ese punto el sonido baja.

Hasta ahora he creado el siguiente código:

Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  2. <title>Untitled Document</title>
  3. <script type="text/javascript">
  4.     function sonido1() {
  5.         var volumenup = document.getElementById(molinillo);
  6.         volumenup.volume = 100;
  7.        
  8.     }
  9.    
  10.     function capasAnidadas() {
  11.         for (var i=400; i>150; i--) {
  12.             inversa = (400-i)/2;
  13.             document.write('<div style="position: absolute; margin:' + (inversa) + 'px; ' + 'width:' + (i) + 'px; ' + 'height:' + (i) + 'px" class="cajas">' + '</div>');
  14.         }
  15.     }
  16. </head>
  17.  
  18. <embed id="molinillo" src="molinillo.mp3" loop="true" hidden="true" autostart="true" volume=0></embed>
  19.  
  20. <div id="padre" style="width:400px; height:400px; position:relative; left:200px; top:200px; background:#000" onmouseover="sonido1()">
  21. <script type="text/javascript">
  22. capasAnidadas();
  23. </div>
  24.  
  25. </body>


A través de javascript y css he creado 250 capas cuadradas que están agrupadas unas encima de otras. Estas capas van disminuyendo progresivamente su tamaño. La idea es que utilizando el evento mouseover en todas las capas, la última (la más pequeña) el sonido esté al 100% y vaya disminuyendo poco a poco hasta la primera capa (las más grande donde el sonido estará al 0%).

El primer problema que me encuentro es que haciendo pruebas llamar al sonido con la capa padre (contenedora de las capas que crea el script), la propiedad volume de la etiqueta embed no funciona. Es decir, que estando el volumen a 0 en el html, no consigo cambiarlo a 100 con un mouseover sobre la capa id=padre.



Bueno, vaya lío. Espero que me hayáis entendido.

Un saludo y gracias a todos.
  #2 (permalink)  
Antiguo 04/04/2012, 06:02
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Script para interactuar con sonido

El primer problema que tenés es que estás usando embed, y puede que no todos los navegadores tengan el mismo plugin asociado para la reproducción de mp3, y que a su vez el atributo volume no sea reconocido.
Lo más sencillo sería usar la etiqueta audio de html5.
Otro detalle es que no es lo mismo decir que al hacer over sobre una capa esta cambie el volumen a decir que lo que queres utilizar es la posición del mouse en las coordenadas x,y de la página, aunque presumo que es lo primero.
Para terminar me cuesta visualizar tus 250 capas anidadas.....
En fin, desarrollando un poco más lo siguiente quizás aclances tu objetivo

Código HTML:
Ver original
  1. <!DOCTYPE HTML>
  2. <html lang="es">
  3. <title>Html5 audio</title>
  4. <meta charset="utf-8" />
  5.  
  6. <style type="text/css">
  7. /*<![CDATA[*/
  8.  
  9. div{
  10. border: solid 1px #000;
  11. background-color: lime;
  12. margin: 10px 0;
  13. width: 120px;
  14. padding: 5px;
  15. font-family: arial, serif;
  16. font-size: 10pt;
  17. cursor: pointer;
  18. }
  19.  
  20. /*]]>*/
  21. <script type="text/javascript">
  22. function volumen(vol){
  23. var el_audio = document.getElementById("audio1");
  24. el_audio.volume = vol;
  25. }
  26. </head>
  27. <h1>Audio HTML5</h1>
  28. <audio controls="controls" preload="auto" id="audio1" autoplay="autoplay">
  29. <source src="pf.ogg" />
  30. <source src="pf.mp3" />
  31. <div onmouseover="volumen(0);">
  32. volumen 0
  33. </div>
  34. <div onmouseover="volumen(0.1);">
  35. volumen 0.1
  36. </div>
  37. <div onmouseover="volumen(0.2);">
  38. volumen 0.2
  39. </div>
  40. <div onmouseover="volumen(0.3);">
  41. volumen 0.3
  42. </div>
  43. <div onmouseover="volumen(0.4);">
  44. volumen 0.4
  45. </div>
  46. <div onmouseover="volumen(0.5);">
  47. volumen 0.5
  48. </div>
  49. <div onmouseover="volumen(0.6);">
  50. volumen 0.6
  51. </div>
  52. <div onmouseover="volumen(0.7);">
  53. volumen 0.7
  54. </div>
  55. <div onmouseover="volumen(0.8);">
  56. volumen 0.8
  57. </div>
  58. <div onmouseover="volumen(0.9);">
  59. volumen 0.9
  60. </div>
  61. <div onmouseover="volumen(1);">
  62. volumen 1
  63. </div>
  64. </body>
  65. </html>

Como ves el javascript neceario para controlar la etiqueta audio es muy sencillo
Demo:
http://foros.emprear.com/html5/audio...o-html5-v.html

Ah, te recuerdo que para hacerlo compatible en todos los navegadores tenes que subir tu audio también en formato ogg (FF/Opera/Chrome ), IE9 y Safari se las arreglan con el mp3
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 04/04/2012, 10:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 22
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Script para interactuar con sonido

Hola emprear. Gracias por tú respuesta. Sí, me he dado cuenta investigando por internet de que lo que estaba intentando hacer es prácticamente imposible con la etiqueta embed.
Así que desecho mi código ( me da rabia, con todo lo que me costó crearlo).

Voy a utilizar tú código (mil una gracias por él y por el link de demostración) a ver si desarrollándolo un poco llego a conseguir el efecto que quiero, el problema es que soy muy nuevo en javascript y tardo las mil y una, pero iré posteando mis progresos.

Saludos.
  #4 (permalink)  
Antiguo 04/04/2012, 10:13
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Script para interactuar con sonido

Cita:
Iniciado por peponks Ver Mensaje
pero iré posteando mis progresos.
Saludos.
Esperamos por los mismos
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 12/04/2012, 07:15
 
Fecha de Ingreso: septiembre-2010
Mensajes: 22
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Script para interactuar con sonido

Bueno, me ha costado pero lo he conseguido. Al final utilicé la opción de sacar las coordenadas del ratón respecto a una capa. Y en función de la distancia del ratón a esa capa, ir variando el volumen del audio.

La verdad es que ni yo mismo entiendo muy bien el código, lo he ido haciendo sacando partes de aquí y de allá, pero funciona.

Aquí está para quien lo necesite.

Código HTML:
Ver original
  1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
  2.  
  3. <script type="text/javascript">
  4. $(document).ready(function() {
  5.  
  6.     // offset for starting point
  7.     var sp_pos = $('#start_point').offset();
  8.  
  9.     // center point of shape is the starting point
  10.     var sp_X = (sp_pos.left + ($('#start_point').width() / 2));
  11.     var sp_Y = (sp_pos.top + ($('#start_point').height() / 2));
  12.  
  13.     // track mouse movement
  14.     $(document).mousemove(function(e){
  15.  
  16.         // figure out distance from mouse to div (http://www.mathopenref.com/coorddist.html)
  17.         var dx = (sp_Y >= e.pageY) ? (sp_Y - e.pageY) : (e.pageY - sp_Y);
  18.         var dy = (sp_X >= e.pageX) ? (sp_X - e.pageX) : (e.pageX - sp_X);
  19.         var distance = Math.floor(Math.sqrt(dx + dy));
  20.         var vol = (distance*(-0.05)) + 1.5;
  21.         // adjust audio volume
  22.         document.getElementById("audio1").volume = vol;
  23.  
  24.         // log status
  25.         $('#status').html(e.pageX +' / '+ e.pageY);
  26.         // log status
  27.         $('#coordenates').html(dx +' / '+ dy);
  28.         // log status
  29.         $('#distance').html(distance);
  30.         // log status
  31.         $('#vol').html(vol);
  32.     });
  33. })
  34.  
  35.  
  36.     <style type="text/css">
  37. #start_point {
  38.     position: absolute;
  39.     top: 200px;
  40.     left: 300px;
  41.     width: 100px;
  42.     height: 100px;
  43.     border: 1px solid #555;
  44.     color: #555;
  45.     background-color: #ddd;
  46.     padding: 5px;
  47.     text-align: center;
  48.     cursor: default;
  49. }
  50.     </style>
  51.  
  52. </head>
  53.  
  54.  
  55. <h1>Audio HTML5</h1>
  56. <div id="start_point">move cursor<br>away from<br>this shape<br>to change<br>volume</div>
  57.  
  58. <h2 id="status">
  59. 0, 0
  60. </h2>
  61.  
  62. <h2 id="coordenates">
  63. 0, 0
  64. </h2>
  65.  
  66. <h2 id="distance">
  67. 0, 0
  68. </h2>
  69.  
  70. <h2 id="vol">
  71. 0, 0
  72. </h2>
  73.  
  74.  
  75. <audio  preload="auto" id="audio1" autoplay="autoplay" loop="loop">
  76. <source src="sounds/ventilator.wav" />
  77. <source src="sounds/ventilator.mp3" /><!-- para ie9 -->
Saludos.

Etiquetas: funcion, html, sonido
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:00.