Problema con los sonidos en Java...(Consulta para experimentados en videojuegos)

Iniciado por Z@@K, 3 Agosto 2014, 02:35 AM

0 Miembros y 1 Visitante están viendo este tema.

Z@@K

Hola colegas,

tengo una consulta...

Estoy haciendo mi primer juego en Java, un juego sencillo, y hoy es el primer día que comienzo a agregarle sonido a los programas...

Bueno, según lo que he aprendido, creé la siguiente clase:

Código (java) [Seleccionar]
package sources;

import java.applet.Applet;
import java.applet.AudioClip;

public class Sounds {
   
   public static final AudioClip normalShoot =Applet.newAudioClip(Sounds.class.getResource("../sources/normalshoot.wav"));
   public static final AudioClip fastReload =Applet.newAudioClip(Sounds.class.getResource("../sources/fastReload.wav"));
   public static final AudioClip outOfAmmo =Applet.newAudioClip(Sounds.class.getResource("../sources/outofammo.wav"));
   
}


Esta clase la hice para utilizar esos tres sonidos.
El sonido "normalshoot.wav" lo quiero utilizar cada vez que el jugador preciona y suelta la tecla "x", por lo tanto en la clase llamada "Player" que es la que implementa KeyListener agregué el siguiente codigo en el metodo keyReleased:

Código (java) [Seleccionar]
       if(e.getKeyCode() == KeyEvent.VK_X && !gp.isPaused()){
           if(bullets>0){
               shootTime = 0;
               bullets--;
               sources.Sounds.normalShoot.play();
           }
           else
               sources.Sounds.outOfAmmo.play();
       }


donde pueden ver que utilizo sources.Sounds.outOfAmmo.play() para que suene cada vez que se dispara.

Bueno, el problema es que al correr el programa y disparar suena, pero no siempre... suena la mayoría de las veces, pero aveces no se por que no...

que piesan que debería hacer para asegurar que siempre suene? debo de crear un hilo por separado para estos sonidos?

cualquier tipo de sugerencia sería agradecido.


Saludos,
Zaak

Z@@K

#1
Hola,

he modificado un poquito el código,
pero sigo teniendo el mismo problema... los sonidos no siempre se activan : (

es esto normal?
de cada 20 disparos los sonidos no se activan en 6 o 7.

el archivo de sonido de normalShoot.wav pesa 355KB, es muy pesado para correrlo cada ves que disparo?
tambien lo tengo en mp3 y pesa mucho menos (13KB) pero no se como cargar archivos mp3 en Java.......

Aquí les dejo el link donde pueden descargar el código de el juego que estoy haciendo, compilarlo y correrlo, para que ustedes mismos verifiquen que no siempre se acciona el sonido:

https://onedrive.live.com/redir?resid=514EA8E9FEC43C45%21560

nota: el archivo Game.java es el que tiene el "main". Las teclas que se utilizan en el juego son X,C, Espacio y las direccionales.

Saludos,

Z@@K

Hola..

desde que comencé este post no he escrito una linea mas de código en java.. XD

bueno, sigo con la duda de si esto tiene solución o si tendré que utilizar únicamente sonidos muuuuy cortos y no muy pesados... ya que al parecer los sonidos largos no siempre funcionan cuando son accionados repetitivamente durante el juego :(

Aun sigo a la espera de que al menos me digan si a ustedes les pasa lo mismo, o es mi compu la que no funciona XD, les agradecería muuuuuuucho.


Saludos a todos!!!

l3ad Programmer

Quizás no conoces JMF. JMF o Java Media Framework es un framework para manejar recursos multimedia: Vídeo, Audio, Streaming, etc. No es difícil de usar.

Aquí tienes un buen ejemplo.

Z@@K

Hola!!!

gracias "l3ad Programmer", créeme que he tomado en cuenta tu sugerencia, pero antes de descargar e instalar otro Framework más, quería probar otras alternativas.

Creo que he solucionado mi problema :). He estado leyendo y leyendo. buscando en Internet de arriba para abajo. He estado probando mi semi-juego una y otra vez hasta mas no poder... Y mis conclusiones son las siguientes:

1) CREO que mi problema se puede solucionar con la sincronización de hilos (algo que aun no he aprendido y seguramente sea uno de los siguientes pasos en mi aprendizaje autodidacta), digo esto debido a que he leído una que otra cosa al respecto (ejemp: http://docs.oracle.com/javase/tutorial/sound/playing.html)

Además esto tiene sentido ya que al hacer pruebas en mi semi-juego he descubierto que las veces en que no se emite el sonido es precisamente justo cuando otro sonido esta terminando (seguramente dos sonidos no pueden comenzar al mismo tiempo o también un sonidos no pueden comenzar al mismo tiempo que otro termina, supongo que esto es debido a que distintos hilos no deben manipular simultáneamente este proceso o algo por el estilo, solo estoy suponiendo...). Creo que la Sincronización sería una solución a esto :).

2) Debido a que quiero hacer este juego poniendo en practica lo que hasta el momento he aprendido (y aun no quiero meterme a sincronizar hilos) entonces tuve que idear otra solución:

Sí lo expuesto en el inciso 1) era correcto, entonces tenía que terminar el sonido que estaba activo antes de iniciar un nuevo sonido (en otras palabras, no reproducirlos paralelamente) y así evitaba accionar un sonido en el momento en que otro terminaba.

Entonces para activar los disparos puse estas dos lineas:

Código (java) [Seleccionar]

sources.Sounds.normalShoot.stop();
sources.Sounds.normalShoot.play();


Y listo!
Lo puse a prueba y funciona!!!!!, siempre suenan los disparos, sin importar que tan rápido presione "el gatillo" : ))))))

Bueno, muchísimas gracias por la atención prestada. Tal vez este problema me tomó mucho mas tiempo del que debería haber sido ya que la solución ha sido algo tonta y fácil jajajaja... pero al fin logré darle una solución :) y créanme, la recomienza al que persevera es enorme! ya que aparte de la satisfacción que siento, me he dado cuenta que al intentar buscar una solución he adquirido en el camino muchos otros conocimientos :)

Espero algun día saber lo suficiente de programación para poder ayudar a otros.

Pasen un agradable día!
Les saluda,
Zaak.

Debci