https://www.segasaturno.com/portal/viewtopic.php?f=19&t=8570&p=102610#p102610
-----------------------------------
Ryo Suzuki
17 Diciembre 2017, 08:24 PM

Re: Tutorial BennuGD de Indiket para Dreamcast
-----------------------------------
Bien hecho, ya postearemos por aquí de todos modos las equivalencias de los controles del mando de la Dreamcast.

Ahora os voy a escribir un pequeño tutorial de cómo usar música en BennuGD orientado a la Dreamcast. Imaginemos que queremos una banda sonora bonita que vaya sonando durante nuestro juego.

Quería hablaros antes de como usar efectos de sonido, imágenes y otras cosas pero como al amigo [b]KeiDash[/b] le puede venir bien esto para implementarlo en su homebrew llamado [b]'Beat Tendency'[/b] pues le escribo aquí un pequeño tutorial que le puede valer a todo el mundo.

Me voy a centrar en el uso de audio tracks. Como sabéis la Dreamcast puede reproducir pistas de audio ya sea en CDROM o en GDROM, el formato estándar de audio de los compact disc de toda la vida.

[b]
MÚSICA EN BENNUGD DE DREAMCAST (Y EN GENERAL ME TEMO QUE EN HOMEBREW DE DC)
[/b]
En el BennuGD de Dreamcast por lo que he ido probando yo podríamos usar tres formatos para reproducir música para el juego o proyecto homebrew que sea que tratemos de desarrollar. El ya mencionado [b]CDDA[/b], también podríamos usar archivos ligeros en plan secuenciadores de[b] tipo tracker[/b] y no olvidemos que podemos tirar de archivos de [b]audio con compresión[/b] y que la consola descomprimiría 'on the fly', como puede ser el conocido .ogg.

Todos tienen sus pros y sus contras. Por ejemplo, archivos hechos con tracker -por citar algunos con extensión[b] .mod[/b]- suelen ser ligeros y los cargas en el buffer de audio de la consola pesando muy poco y puedes reproducirlos al instante sin que tengan mucha exigencia para la máquina porque usan sus instrumentos o samples y para la CPU no suponen casi nada de esfuerzo consiguiendo una muy buena calidad y un particular feeling algo retro si están bien compuestos.

Archivos con compresión [b].ogg[/b] son buenos porque como los .mp3 y otros formatos con gran calidad y a la vez buena compresión pesan poco, dan buena performance y podemos exportar cualquier cosa a estos formatos sin tener que componer con trackers y similares. Lo malo es que le exigen a la máquina guardarse un hilo de ejecución podríamos decir para ir descomprimiendo el archivo y reproduciéndolo con un buffer determinado, a una máquina como la Dreamcast que es del 98 le cuesta (recordáis el reproductor mp3 que solo podía hacer eso?)

Y por último, la música que me voy a centrar es la de pistas de audio directamente o [b]CDDA[/b]. Lo bueno es que es la calidad máxima que pueda existir en DC podríamos decir (sistema PCM con una frecuencia de muestreo de 44 100 muestras por segundo y con dos canales, 16 bits, etc). Además no solo eso, ya que la Dreamcast ni se despeina reproduciendo esta música. Para ella es que como el que oye llover, es trabajo del lector y no le consume ningún recurso estar reproduciendo una canción desde su lector que sea una audio track.

No todo podía ser tan bonito, como sabéis. Uno de los problemas es el peso. Una canción depende de la duración se puede ir a los 60 megas o más. Aquí no existe compresión así que segundos es peso, y peso gordo. Los juegos comerciales en los que su música era CDDA si os acordáis normalmente no podían contar con muchos temas, una decena o algo así en, por citar algunos, juegos de coches y similares.

Otro de los problemas del CDDA es que exige total y completa dedicación del lector de la consola. Si estamos reproduciendo una pista de audio no podemos leer nada de datos, el lector se puede ocupar solo de la reproducción de la pista. Esto quiere decir que si necesitamos cargar algún gráfico, sonido o recurso que tengamos que usar lo tendremos que hacer antes de lanzar la reproducción de la pista de audio lo que limita bastante el control de cómo cargas las cosas en RAM...

Pero bueno, para un juego homebrew nos puede ir muy bien hacer uso de CDDA y voy a explicar aquí cómo hacerlo. Cómo mandar desde BennuGD que nos reproduzca las pistas y cómo generar correctamente la imagen del CD de la Dreamcast que contiene los datos y las pistas de audio para que luego suenen correctamente y en el orden que queramos.


[b]COMO USAR PISTAS DE AUDIO[/b]

BennGD nos viene listo con un mod para manejar pistas de CDROM. El mod_cd:

http://wiki.bennugd.org/index.php?title=Mod_cd

En principio en PC o en Linux, por citar dos sistemas en los que corre y pueden tener instalados CDROM y podemos hacer uso de la música, debería funcionar bien.
[b]Indiket[/b] portó mod_cd a la versión de BennuGD de Dreamcast (creo que en la de los Colombians no estaba o crasheaba) y en principio podríamos usar este modulo para controlar el CDROM de la Dreamcast y que reproduzca las canciones que queramos. Pues bien, ya os adelanto que no funciona del todo bien.

Me comentaron que incluso el PC el mod cd está algo roto. Funcionar funciona, pero hace cosas raras y no nos permite por ejemplo hacer loops en las canciones, algo que necesitamos si queremos lanzar un tema que esté sonando hasta que nos interese (nos pasemos la fase, nos maten, pase algo que queramos, etc...)

Así que vamos a usar [b]mod_dream[/b] que es un módulo que como habréis adivinado solo funciona en la Dreamcast y es para hacer cosas que sean solo para esta máquina. Los Colombians ya lo habilitaron para cosas como grabar en la VMU e Indiket ha ido introduciéndole funcionalidades que le he ido pidiendo cuando me han hecho falta.

Una de las funcionalidades que necesité es el uso de CDDA y hacerlo como si trabajaramos con KOS directamente. Para que me entendáis, con el mod dream podemos meterle funciones del KallistiOS que lanzamos directamente desde BennuGD. Un ejemplo sencillo que os pongo es en mi [b]Dreamcastnoid[/b], en la versión física, detecto en qué idioma está la consola Dreamcast para así poner el juego en inglés o en español depende de cómo el usuario tenga configurada la BIOS, algo que el BennuGD no tiene es algo propio de la DC.

Pero no me quiero ir más por la tangente. Aquí lo que vamos a hacer es usar el mod dream en su ultima versión de Indiket para reproducir pistas de audio CDDA.

Para ello vamos a empezar cargando ese módulo. En nuestro primer código de [b]Hello World[/b] habíamos cargado dos módulos aunque no los mencioné para no liar mucho en un principio:

[code linenumbers=false]
import "mod_video"
import "mod_text"
[/code]

El primero como habréis adivinado era para definir el modo de vídeo, los fps, etc. Y el segundo, como también habréis anticipado, era para trabajar con textos.

Ahora le añadiremos el módulo custom para hacer cosas específicas con la Dreamcast:

[code linenumbers=false]
import "mod_dream"[/code]

Como estamos reutilizando el ejemplo del Hello World simple de antes le pondremos música a este mismo ejemplo, si os parece bien.

Le añadiremos esto:

[code linenumbers=false]
    if (os_id == 5)
          dc_cddaplay(2,15);	
	end[/code]
Le estamos metiendo un condicional diciéndole que si está corriendo en Dreamcast ejecute esa orden del KOS para reproducir CDDA.

El comando [b]dc_cddaplay[/b] es la clave y los valores (2,15) significan lo siguiente. 2 es la primera track CDDA que le meteremos ahora cuando hagamos la imagen de CD. Para que no entendamos la 1 sería la falsa track con la que conseguimos el autoboot en la DC y la 2 será nuestra primera canción que usaremos.

15 significa que queremos que esa pista la reproduzca en bucle infinito, o sea que esa canción cuando llegue al final vuelva a comenzar de nuevo. 15 es el número de veces que queremos que se repita esta pista, 15 se considera infinito en KOS si quisiéramos que solo sonase una vez esta pista de audio entonces pondríamos (2,0) -o sea que repita 0 veces la track 2-

Y ya está. Básicamente está hecho. Si quisiaremos reproducir más pistas solo habría que tener en cuenta esos números a la hora de llamarlas y luego ponerlas en el orden correcto cuando generemos nuestra imagen de disco, que ahora os explicaré cómo se hace.

Así que el código actualizado esta vez con música de CD sonando de fondo sería algo tan simple como esto:

[code linenumbers=false]import "mod_video"
import "mod_text"
import "mod_dream" 


 process Main() 
 
 begin 

 
 set_mode(320,240,16);  

     if (os_id == 5)
         write(0,40,69,0,"Hola DC desde Bennu Game Development!");
    else
         write(0,40,69,0,"Hola PC desde Bennu Game Development!");
    end

 write(0,40,100,0,":-)");

 write(0,30,200,0,"By Ryo -Alfons- de wwww.segasaturno.com");
 
 
     if (os_id == 5)
          dc_cddaplay(2,15);
	end
     
      if (os_id == 5)
         write(0,40,120,0,"Con CDDA track sonando");
    else
         write(0,40,120,0,"Sin musica");
    end   
	
	
  loop
  frame;
  end
  
 end[/code]


[b]GENERANDO NUESTRA IMAGEN ALCOHOL 120[/b]

Pues ya estamos preparados para crear nuestro CD y probarlo en emulador o en consola real nuestro pequeño proyecto digamos que ahora es musical.

Volvemos a contar con el querido [b]BooDreams[/b] pero esta vez seleccionamos el icono de Alcohol 120:

 [img]http://www.segasaturno.com/portal/files/images/2/100.png[/img]  

En la pestaña Extras tenemos que mirar que esté activo [b]'Add CDDA tracks'[/b]:

Bien que no se nos olvide que necesitamos una pista de audio para que suene en nuestro proyecto. Coge cualquier .mp3 o wav o lo que tengas a mano que te de más rabia (algún tema de Joselito iría bien  :mrgreen: ) y copialo en el directorio CDDA que verás en la carpeta del Bootdreams.

Yo le he llamado a mi canción [b]02.mp3[/b] y la he colocado en ese directorio. Tranquilo porque el Bootdream la convierte automáticamente a formato WAV de calidad audio CD.

Le damos a [b]Process[/b] y se nos abrirá una ventana que nos dirá [b]'Select the CDDA tracks'[/b].

Bien, aquí lo primero que tenemos que seleccionar y añadir a la parte derecha es [b]audio.raw[/b]. Esta es la fake track muy ligera que consigue engañar a la consola y hacer el autoboot.

Luego añado mi pista que he puesto, en mi caso [b]02.mp3[/b], si la vuestra se llama de otra forma pues ya sabéis...

[img]http://www.segasaturno.com/portal/files/images/2/101.png[/img] 

Le damos a OK y vereis que empieza a procesar y convertir las pistas.

Luego os pedira un nombre para el .mds de Alcohol que os generará. Yo le he llamdado [b]cdda.mds [/b]por no ser muy original.

Y eso es todo, cuando acabe ya tenéis un[b] mds+mdf [/b]que podéis probar en[b] Demul [/b]y disfrutar del ejemplo Hello World esta vez con música CDDA sonando de fondo y en bucle infinito.

He intentado ir al grano y no liarme mucho pero me pilláis un poco espeso esta tarde y con un catarro de aupa.

Un saludo.


Descargad mejor la última versión del binario de BennuGD que me pasó Indiket. Está actualizado totalmente y os he metido también un IDE con la última versión de BennuGD de PC para que compiléis facilmente (tiene el mod_dream ready y actualizado, of course):

[align=center][url=http://www.segasaturno.com/Minerva-238/archivos/BennuGD_Dreamcast_Indiket-dic2017.7z][img]http://www.segasaturno.com/portal/files/images/2/sonic_boton.png[/img][/align]


P.D: Documentación: http://gamedev.allusion.net/docs/kos-current/cdrom_8h.html#a446b7e47d3c4d6e011f018e9a2b5fb57

https://forum.bennugd.org/index.php?topic=4319.0


