https://www.segasaturno.com/portal/viewtopic.php?f=33&t=4246
-----------------------------------
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


-----------------------------------
saturn_worship
06 Noviembre 2009, 12:54 AM

Re: [Sound] Reproducir Una Pista De Audio.
-----------------------------------
Muchisimas gracias Facu....espero que sigamos consiguiendo más cosas...estoy ahí hardcore con lo de la resolución..poco a poco!!!!


-----------------------------------
Ryo Suzuki
10 Noviembre 2009, 10:01 PM

Re: [Sound] Reproducir Una Pista De Audio.
-----------------------------------
Gracias por otro gran aporte :putoamo: 

Una pregunta, ¿como se comporta la Saturn vs PSX en este aspecto? Cual es mas "amigable" para el coder en este sentido?


-----------------------------------
saturn_worship
04 Diciembre 2009, 01:34 PM

Re: [Sound] Reproducir Una Pista De Audio.
-----------------------------------
Sobre PSX no puedo opinar, ya que no he tenido un dev delante, pero supongo que será fácil fácil y detallado por Sony.

El código expuesto aquí es una "interpretaicón" personal de las SGL por parte del señor RockinB, por lo tanto estamos sujetos a ello. 

No he visto ningún manual por parte de SEGA al respecto, y seguramente funciona muy parecido, por el tema de que ambas cosas van con las SGL.

En cuanto a posibilidades , decir que esto no consume CPU para nada, y va independiente. Por lo tanto, configurado demanera diferente a las SGL, [u]intuyo[/u] que con una buena compresión de audio, y una correcta configuración de parámetros, podría quedar prácticamente medio chip de audio para libre disposición del programador.

Facu, el SCSP (Sega Custom Sound Processor) es el que se encarga de esto no? Ya que se que tiene además un M68000 y otro más para audio-fx.

La cantidad de posibilidades...es...enorme.

De todos modos, volviendo al tema, decir que aquí se nos atragantan aun algunos procesos y maneras para que suene en Saturn real o Yabause. (casi solucionado). , parece ser que este tipo de código es bastante asimilable por el SSF.


-----------------------------------
FacundoARG
08 Diciembre 2009, 10:36 PM

Re: [Sound] Reproducir Una Pista De Audio.
-----------------------------------
[quote user="saturn_worship" post="30940"]El código expuesto aquí es una "interpretaicón" personal de las SGL por parte del señor RockinB, por lo tanto estamos sujetos a ello. 
[/quote]

Además de tener razón, RockinB se a basado en los ejemplos que trae la SGL. 

[quote user="saturn_worship" post="30940"]No he visto ningún manual por parte de SEGA al respecto, y seguramente funciona muy parecido, por el tema de que ambas cosas van con las SGL.
[/quote]

Los manuales esta "casi" todos, pero son de assambler. Solo explican cuales son los registros del micro y los tipos de interrupciones. Luego en assambler uno tiene que hacer todo.

[quote user="saturn_worship" post="30940"]Facu, el SCSP (Sega Custom Sound Processor) es el que se encarga de esto no? Ya que se que tiene además un M68000 y otro más para audio-fx.
[/quote]

El M68000 es el que repoduce el Sonido verdaderamente. El SCP assigna la memoria y las instrucciones. En otras palabras es el que controla todo el sistema de audio.

[quote user="saturn_worship" post="30940"]De todos modos, volviendo al tema, decir que aquí se nos atragantan aun algunos procesos y maneras para que suene en Saturn real o Yabause. (casi solucionado). , parece ser que este tipo de código es bastante asimilable por el SSF.[/quote]
Nos falta el cartucho  :roll: , de a poco va mejorando la cosa.


