El sonido...

Started by Mr Matsusaka, May 31, 2011, 08:45:49 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Mr Matsusaka

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?

FreeYourMind

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.

Futu-block

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

BoMbErLiNk

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.  :)

Mr Matsusaka

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.

SplinterGU

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... :)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

ErPera

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.

Krammer

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.

Arcontus

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!
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

SplinterGU

el problema es que si usas fade_music_off y nunca haces fade_music_in, nunca volveras a obtener el sonido en el w7
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

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!
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

SplinterGU

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!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

es cierto lo de la lata, a mi tamien me pasa