Con este thread me gustaria un poco comentar mis problemas con el sonido y al mismo tiempo recabar algo de informacion sobre el funcionamiento de el mismo, de trucos para conseguir determinadas cosas y preguntar un poco por los cambios en las ultimas versiones.
Desde tiempos inmemoriales (desde Fenix al menos) al llamar un play_sound/play_wav este devuelve el id del canal donde se esta reproduciendo.
Si hacemos un stop_sound y metemos el valor que el anterior play_sound nos dio deberia cortar el sonido de cuajo.
Si llamamos al stop_sound con el sonido ya terminado en teoria no deberia suceder nada.
El problema viene cuando llamamos al stop_sound cuando el sonido hace rato dejo de sonar, y su canal ya fue tomado por un sonido distinto. Resultando en que el stop_sound cortara a un sonido no deseado. Al final para evitar daños colaterales he optado por usar el stop_sound lo menos posible, aunque indudablemente hay casos donde quedaria mejor poder cortar determinados sonidos.
Alguien tiene algun sistema idoneo, o existe alguna funcion nueva con la que se pueda controlar los canales de sonido a nuestro antojo?
Te dejo mis tips:
1 - Primero me certifico que tengo canales de sobra para todos los sonidos y que no se mezclen por este motivo:
sound_channels = 32;
y hago tambien un reserve_channels si necesario
2 - Si pones id a todos los sonidos no deberias tener problemas con los id's, ya que los controlarias todos.
3 - Para no tener problemas suelo hacer esto al hacer un unload:
IF (Mus_Menu != null) unload_wav(Mus_Menu); Mus_Menu = 0; END
sólo lo descargo si existe y le pongo id 0 al ya no existir, si en todos los sonidos haces estos controles seguramente ya no tengas problemas de mezclas de id's entre sonidos.
o puedes poner que los sonidos se reproduzcan infinitamente y que se pare con un stop...
valdria para las melodias de fondo, a la hora de pasar pantalla reducimos el sonido progresivamente y queda de lujo; aunque nos corte la cancion por la mitad
Puedes usar los canales manualmente, el tercer parametro de play_wav :
play_wav(id,repetir,canal);
Lo ideal es que cada personaje tenga un canal único fijo, así puedes cortar dialogos o lanzar nuevos sin miedo a que escuches 2 voces del mismo personaje a la vez, con esto puedes cortar facilmente su voz, si es el canal 5, stop_wav(5);, lo mismo para explosiones y sonidos estridentes, agrupados en un único canal para no saturar los bajos y agudos, esto del stop_wav es solo para pararlo, si hay un sonido en el canal 5 y lanzas un play_wav con canal 5 lo cortaras igualmente a favor del nuevo.
El resto de sonidos que no creas importantes lo puedes dejar por control automatico sin el tercer parametro o bien usando -1 en canal, o en un rango de canales que no vayas a usar si lo que quieres es tener control absoluto de los canales y asegurarte de que ningun sonido se cuele por el canal 5.
Por defecto el sistema de sonido viene con 8 canales (0 a 7) y 22khz, pero puedes cambiarlo así :
sound_freq = 44100;
sound_channels=32;
reserve_channels(24);
Sound channels es solo para la estructura, si usas un valor diferente a 32 puede que no se escuche el sonido, reserve channels sera el número real de canales. :)
Quote from: BoMbErLiNk on June 01, 2011, 04:11:49 AM
Puedes usar los canales manualmente, el tercer parametro de play_wav :
play_wav(id,repetir,canal);
Esto es exactamente lo que estaba buscando! Muchas gracias BoMbErLiNk.
Quote from: BoMbErLiNk on June 01, 2011, 04:11:49 AM
Puedes usar los canales manualmente, el tercer parametro de play_wav :
play_wav(id,repetir,canal);
Lo ideal es que cada personaje tenga un canal único fijo, así puedes cortar dialogos o lanzar nuevos sin miedo a que escuches 2 voces del mismo personaje a la vez, con esto puedes cortar facilmente su voz, si es el canal 5, stop_wav(5);, lo mismo para explosiones y sonidos estridentes, agrupados en un único canal para no saturar los bajos y agudos, esto del stop_wav es solo para pararlo, si hay un sonido en el canal 5 y lanzas un play_wav con canal 5 lo cortaras igualmente a favor del nuevo.
El resto de sonidos que no creas importantes lo puedes dejar por control automatico sin el tercer parametro o bien usando -1 en canal, o en un rango de canales que no vayas a usar si lo que quieres es tener control absoluto de los canales y asegurarte de que ningun sonido se cuele por el canal 5.
Por defecto el sistema de sonido viene con 8 canales (0 a 7) y 22khz, pero puedes cambiarlo así :
sound_freq = 44100;
sound_channels=32;
reserve_channels(24);
Sound channels es solo para la estructura, si usas un valor diferente a 32 puede que no se escuche el sonido, reserve channels sera el número real de canales. :)
bomber ? ? ? ? ya sabia yo que no se iba a ir... :)
Es lógico, que si ejecuto el juego a pantalla completa, el sonido suene a "lata"? Si juego sin pantalla completa suena bien, pero en el momento que pongo a pantalla completa el juego, todo el sonido de mi PC empieza a sonar mal, no es algo que se note demasiado, pero se nota la diferencia de calidad de sonido.
Interesante BUG, ya decía yo que sucedían cosas extrañas y no sabia porque..
Aunque no puedo ayudarte con una respuesta, tu me has ayudado a comprender lo que le sucede a mi programa.
Gracias.
En mi caso no he tenido problemas en mi proyecto con el audio, ni pantalla completa, ni ventana y a distintas resoluciones y con muchas pistas simultaneas.
Es muy extraño lo del sonido, pero en el pasado a mi también me sucedió con ciertos programas o juegos, mucho antes de conocer Bennu. En aquel caso lo solucioné cambiando de PC, pero probablemente con nuevos drivers o nueva tarjeta de sonido quizas se solucione.
Estoy pensando que también puede ser que el problema esté relacionado con el número de canales reproduciendose simultaneamente, ya que cada tarjeta tiene límites distintos y puede ser que por algún motivo se sobrepasen los de vuestra tarjeta y provoque el problema. Antes de hacer nada, probaría en otro PC vuestro proyecto, para descartar.
Saludos!
el problema es que si usas fade_music_off y nunca haces fade_music_in, nunca volveras a obtener el sonido en el w7
Quote from: SplinterGU on June 09, 2011, 07:05:33 PM
el problema es que si usas fade_music_off y nunca haces fade_music_in, nunca volveras a obtener el sonido en el w7
Creo que se refieren a "sonido en lata" no que se apague este.
Saludos!
Quote from: Arcontus on June 09, 2011, 07:12:24 PM
Quote from: SplinterGU on June 09, 2011, 07:05:33 PM
el problema es que si usas fade_music_off y nunca haces fade_music_in, nunca volveras a obtener el sonido en el w7
Creo que se refieren a "sonido en lata" no que se apague este.
Saludos!
jejeje, me confundi de hilo, cierto, gracias!
es cierto lo de la lata, a mi tamien me pasa