https://www.segasaturno.com/portal/viewtopic.php?f=33&t=4246&p=29858#p29858
-----------------------------------
FacundoARG
05 Noviembre 2009, 09:40 PM

[Homebrew] [Sound] Reproducir Una Pista De Audio.
-----------------------------------
Bueno les traigo un tutorial básico  a pedido de un colega, con colega me quedo chico es más bien un amigo metalero, [b]Saturn_worship[/b].
El tutorial se basa en reproducir [b]CDDA [/b]o mas comunmente las pistas de audio de Saturn.
He hecho las implementaciones de CD (para abrirlo y explorar los datos) y una implementación de sonido [b]CDDA[/b]. 

Esta última esta basada en el sound player de [b]Rockinb[/b] ya que no le encontre sentido alguno en modificarla, la verdad esta muy bien hecha y de esta forma prefiero que se concentren en el desarrollo del juego.

Los tracks deben estar en [b].wav con 16bits stereo a 44100khz[/b] de muestreo.

Ambas implementaciones están incluidas al final en un [b].zip[/b]

Como ya es un clásico, si no sabes cómo empezar, mira este [url=http://www.segasaturno.com/portal/viewtopic.php?f=22&t=3932]link primero. Como simpre usaremos el ejemplo [b]S_2_2[/b].

[hr]

La implementación tiene las siguientes funciones:
[list]
 [*] [b]CDDA_init()[/b]
 [*] [b]CDDA_stop()[/b]
 [*] [b]CDDA_pause()[/b]
 [*] [b]CDDA_Play(track Uint8)[/b]
 [*] [b]CDDA_getStatusName()[/b]
[/list]


[b]CDDA_init()[/b]
dentro de esta funcion encontramos otra, la más importante
[b]slCDDAOn(127, 127, 0, 0)[/b] los primeros dos parámetros son para el volúmen izquierdo y derecho respectivamente. Le podemos setear valores desde 0 a 127.
Los otros dos son para el LPan y RPan, sinceramente no he notado el cambio. Algún músico que me de una mano con esta explicación  :mrgreen: 

[b]CDDA_stop()[/b]
Obviamente, esta función detiene el reproductor y setea la posición en el track 1.

[b]CDDA_Play(track Uint8)[/b]
El parámetro que recive es el track mismo, si le pasamos un 2(dos) leerá el segundo track. El 3(tres) será el tercero y asi sucesivamente.

[b]CDDA_pause()[/b]
Pausa el track pero queda posicionado ahi.
[b]
CDDA_getStatusName()[/b]
Esta funcion devuelve un puntero char, para que podamos imprimir el estado del reproductor.




Bien para comenzar, debemos incluir ambas implementaciones dentro de nuestro [b]main.c[/b]

[code]
#include    "imp_sound_CDDA.h"
#include    "imp_CD.h"[/code]

Luego, debemos en este orden:
[list]
[*] [b]Iniciar el CD :: init_CD();[/b]

[*] [b]Activar el sonido :: init_SFX();[/b]

 [*] [b]Activar el CDDA :: CDDA_init();[/b]
[/list]

por último despues de hacer el loading de los escenarios, sprites, modelos 3d, texturas, sonidos sfx, etc. Debemos hacer un [b]CDDA_Stop()[/b]. 


[code]
    //Iniciamos el CD
    init_CD();
    //Iniciamos el sonido
    init_SFX();
    
    //Activamos el CDDA, seteamos el sonido y ademas tomamos la cantidad de tracks
    CDDA_init();
    
     CDDA_stop();[/code]

Por ultimo y gracias a [b]Saturn_worship[/b] me ha dicho que la consola solo reproduce la música si la ponemos dentro del [b]while[/b]; si lo hacemos fuera en [b]ssf[/b] funcionará, pero claro esto ya es un bug encontrado en el emulador. 
Supongo que la consola no lo reproduce porque necesita la sincronizacion [b]slSynch()[/b], que esta dentro del [b]while[/b].

[align=center]
[img]http://www.segasaturno.com/portal/files/images/1077/tuto_cdda.png[/img][/align]

PD: les dejo las implementaciones y el main.c  :D


