https://www.segasaturno.com/portal/viewtopic.php?f=33&t=4080
-----------------------------------
FacundoARG
13 Septiembre 2009, 06:40 AM

[Homebrew] [Sound] Cargando Y Ejecutando Un Sonido Wav
-----------------------------------
Bueno, hize un pequeño espacio para subir otro tutorial más :D .

Estoy medio complicado con el tiempo ultimamente, pero ya voy a tener un poco más :D .
Bien hoy toca el sonido. Sin sonido los juegos son muy aburridos, asi que les voy a mostrar como cargar un sonido en formato nativo [b]PCM [/b]directamente a la memoria de sonido. Tambien se puede cargar en la [b]RAM [/b]del sistema, como lo hize con los sprites
pero esa es otra historia. 

Bien, como siempre vamos a comenzar con el ejemplo [b]S_2_2[/b]. Si no sabes como configurar el entorno, [url=http://www.segasaturno.com/portal/viewtopic.php?f=22&t=3932]aca lo tenes.

Extraje con el emulador Kega, un sonido de [b]Virtua Racing [/b]  :wink: 

Primero que todo, hay que entender el Sonido. 
Como sabemos el sonido no es mas que una onda elastica si mal no recuedo que viaja a unos 1200 km/h  ( Como [b]Sonic [/b] :D  ) .
La propaga el ambiente, gracias a las particulas que tenemos (aire)  :wink:  . Bien basta de física.

Nuestra querida Saturn, maneja Sonido Stereo, un muestreo [b]44100kHz [/b]y tiene[b] 8 Canales[/b]. Y tiene [b]512kbytes [/b]para almacenar, las armoniosas musicas de los juegos. 

Además, podemos leer las pistas de audio [b]CDDA[/b]. Pero si leemos una de estas, logicamente no podemos leer los datos, entonces primero hay que hacer un gran loading y al ultimo dar play a la pista correspondiente.

Estamos pobres con el sonido, porque si usamos stereo ocupamos 2 canales, entonces podemos reproducir solo 4 sonidos al mismo tiempo, la memoria es poca también, ya que no es mucha, encima no tiene compresion por Hardware, que significa esto que al momento de cargar el sonido, se lo hacemos en crudo ó RAW (en ingles).

Como decia el archivo, originalmente ocupa 5 segundos, a [b]44100kHz[/b], 16bits de profundidad y es Stereo. Ocupa [b]535kbytes[/b], osea no entra :(  .
Bien le sacamos las partes mudas del final y el inicio, le bajamos la profundidad a [b]8bits[/b], el muestreo a [b]11025kHz[/b], y lo hacemos Mono. entonces ahora ocupa [b]17,5Kbytes[/b]. Ahora si es otra cosa.

Ahora convertimos el [b].wav [/b]en [b].PCM [/b]con el siguiente .bat file

[code]
COPY C:SaturnOrbitSET_COF.BAT .TMP.BAT
CALL TMP.BAT
DEL TMP.BAT
RB_SaturnPCM.EXE vr.wav
MOVE vr.pcm ../cd/vr.pcm
pause
[/code]

Guarden este archivo como [b]WAVTOPMC.BAT[/b] . Ejecutenlo y ahora van a tener dentro de la carpeta CD un archivo llamado [b]vr.pcm[/b].


Bien, ahora vamos de a poco. 
Primero, debemos inicializar el subsistema de sonido.
[code]
//incluimos los drivers.
#include <sddrvs.dat>
void snd_init()
{ 
  char sound_map[] = {0xff , 0xff};
  //Iniciamos el subsistema de sonido
  slInitSound(sddrvstsk , sizeof(sddrvstsk) , (Uint8 *)sound_map , sizeof(sound_map));

};
[/code]

Ahora el método para cargar el sonido en memoria.

[code]
char *vr_snd; 
//Este es el tamaño en bytes de sonido
Uint32 vr_size = 17296;
//Estas son las caracteristicas con las que se va a reproducir.
//Este numero 0x69ce no se que significa pero si lo cambian el sonido  se corrompe.
PCM vr_dat = {(_Mono | _PCM8Bit) , 0 , 127 , 0 , 0x69ce , 0 , 0 , 0 , 0};

void snd_loadSound_PCM()
{
vr_snd = NULL;
Sint32 load = GFS_Load(GFS_NameToId("VR.PCM"), 0, (Uint32 *)0x200000, 0x100000);
	if(load <= 0)
		slPrint("ERROR loading file vr.pcm!", slLocate(2, 11));
vr_snd = (char *)0x200000;
vr_size = load;  
};
[/code]

Para hace un play
[code]
 //Aca hacemos play al sonido, pasandole primero las caracteristicas, segundo la informacion y 
 //tercero la cantidad de bytes para que haga el offset de memoria ;)
slPCMOn(&vr_dat, vr_snd  ,vr_size);
[/code]

Luego dentro del main, debe llamar estas funciones snd_init() y snd_loadSound_PCM() antes del loop principal. 
En mi caso, cuando aprieto el botón A del PAD, se escucha el sonido

Pidanme la iso por MP.  :mrgreen:


-----------------------------------
Jean La Montarde
14 Septiembre 2009, 09:57 AM

Re: [Sound] Cargando Y Ejecutando Un Sonido Wav
-----------------------------------
Otro gran tuto , haber si a lo largo de la semana me pongo de nuevo con ellos y avanzamos todos xD

Por cierto tienes un MP :P


-----------------------------------
sergio-dreamer
28 Septiembre 2009, 05:13 AM

Re: [Sound] Cargando Y Ejecutando Un Sonido Wav
-----------------------------------
EY AMIGO YA VISTE COMO SI ERES TODO UN PROFECIONAL JAJAJA!!!! YA POSTEA ALGO DE DREAMCAST BUENO AMIGO TE MANDO UN ABRAZO CUIDESE


