Tutorial BennuGD para Sega Dreamcast – Apartado sonoro

No hay duda alguna de que BennuGD es un buen lenguaje de programación y framework para hacer videojuegos, pero deberías tener ciertas cosas en cuenta si vas a desarrollar para Dreamcast. Con esta frase quiero comenzar una serie de posts en la que describo, después de unos buenos meses trabajando con él, una serie de tutoriales que debes tener en cuenta a la hora de empezar a picar código para esta consola con este lenguaje.

BennuGD es muy sencillo de usar, de ahí quizás que me decantara por el. Sin embargo, hay una serie de matices que debes tener en cuenta si vas a desarrollar un juego para Dreamcast con dicha tecnología ya que, si tienes pensado hacer un juego de calidad media/alta, deberías de tener esto muy en cuenta, ya que es posible que realizarlo en otro lenguaje te sea más cómodo.

Con el desarrollo actual de mi juego BeatTendency, me he topado con ciertos temas técnicos que no estan descritos ni definidos en una documentación oficial (ni no oficial) y me han hecho descartar ciertas funcionalidades del propio juego por ello. Comenzamos por el apartado sonoro.

EL AUDIO

Si estás pensando usar audio en tu juego, ya sea a nivel de sfx o música de fondo, debes tener en cuenta lo siguiente:

  • Para efectos de sonido, se supone que deberías usar ficheros de tipo .wav. Ojo con ello porque no podrás cargar ficheros mayores de 1Mb aprox. En PC te funcionará perfectamente, pero en consola real o emulador, sólo podrás cargar ficheros .wav ya no solo de menos de 1Mb si no que también deben usar canal mono, por lo que los sfx de escucharán sólo por un único altavoz aparte de que tienen en consola real un retraso en reproducción de entre 0.5 y 1.0 segundos. La configuración más óptima que puedes aplicar a un fichero wav para ello sería la siguiente:
    • Bits de resolución: 16bits
    • Tasa de muestreo: 16bits
    • Canales de audio: mono

Ejemplo de carga en código:

	//Suponiendo que el fichero está en la raíz del disco
	soundId = LOAD_WAV("/cd/nombre.wav");
	if(soundId != 0)
	    gi_WAV_CHANNEL = PLAY_WAV(soundId, repetir);
	    RESUME_WAV(gi_WAV_CHANNEL);
	    SET_CHANNEL_VOLUME(gi_WAV_CHANNEL, 128);
	end
  • Para música de fondo o ambiente. Ya que no puedes usar ficheros .wav de más de 1Mb, tu alternativa es la de usar ficheros .ogg o .cdda. Con ogg tienes la característica de que tienes buena calidad de audio en consola y una compresión mayor, por lo que ahorrarás en memoria. Con .cdda tienes calidad CD perfecta, capaz de reproducir música de alta calidad. Los inconvenientes de estos dos tipos de ficheros es que:
    • Se cargan directamente de disco, por lo que hay un parón en el juego cuando se va a leer la canción.
    • No existen controles de ejecución sobre los mismos, es decir, se lanza un PLAY() pero en ningún momento puedes hacer PAUSE o un PLAY cuando tu lo desees (los métodos existen pero no funcionan)
    byte repetir = false;
    
    OGG_INIT();
    
    If(!OGG_IS_PLAYING())
	    OGG_INIT();
    End
	
    SET_OGG_VOLUME(255);
	
    OGG_PLAY("/cd/fichero.ogg", repetir);

Conclusión

Después de muchas pruebas, me decanté por usar otro tipo de música que me permitiese el lenguaje y que funcionara en Dreamcast. La mejor vía que encontré es la de usar ficheros .wav para sfx y música de tracker* (.xm .mod, etc) para la música ambiental. En este sentido BennuGD permite lanzar muy bien la música en la consola y tiene un buen tiempo de respuesta y de carga en RAM (quitando las pegas de .wav comentadas antes)

//CARGA DE TRACKER
byte repetir = false;

songId = LOAD_SONG("/cd/fichero.mod");

PLAY_SONG(songId, repetir);

SET_SONG_VOLUME(128);

 

*música de tracker: La música de tracker para la gente que como yo no sabía que era, es música que se genera informáticamente. El software interpreta las notas musicales del fichero (.mod, .it, etc) y las reproduce. Este tipo de música se genera con software específico para ello como por ejemplo OpenMPT

2 comentarios

  1. Buen articulo. Entonces lo ideal es usar archivos de tracker, no? Tendre que buscar alguna manera de pasar archivos midi a tracker, ayer estuve trasteando pero no di ni una.

    1. Pues si es lo ideal por lo menos para música de fondo/ambiente. El paso de midi a tracker no he visto nada que permita hacerlo pero, puedes montar un tracker “rápidamente” con el OpenMPT por ejemplo.

      Gracias por tu opinión!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *