[Homebrew] [Sound] Cargando Y Ejecutando Un Sonido Wav


Objetivo: [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 PCM directamente a la memoria de sonido. Tambien se puede cargar en la RAM del sistema, como lo hize con los sprites
pero esa es otra historia.

Bien, como siempre vamos a comenzar con el ejemplo S_2_2. Si no sabes como configurar el entorno, aca lo tenes.

Extraje con el emulador Kega, un sonido de Virtua Racing :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 Sonic :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 44100kHz y tiene 8 Canales. Y tiene 512kbytes para almacenar, las armoniosas musicas de los juegos.

Además, podemos leer las pistas de audio CDDA. 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 44100kHz, 16bits de profundidad y es Stereo. Ocupa 535kbytes, osea no entra :( .
Bien le sacamos las partes mudas del final y el inicio, le bajamos la profundidad a 8bits, el muestreo a 11025kHz, y lo hacemos Mono. entonces ahora ocupa 17,5Kbytes. Ahora si es otra cosa.

Ahora convertimos el .wav en .PCM con el siguiente .bat file

Código: [Descargar] [Ocultar]
  1. COPY C:SaturnOrbitSET_COF.BAT .TMP.BAT  
  2. CALL TMP.BAT  
  3. DEL TMP.BAT  
  4. RB_SaturnPCM.EXE vr.wav  
  5. MOVE vr.pcm ../cd/vr.pcm  
  6. pause  
  7.  


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


Bien, ahora vamos de a poco.
Primero, debemos inicializar el subsistema de sonido.
Código: [Descargar] [Ocultar]
  1. //incluimos los drivers.  
  2. #include <sddrvs.dat>  
  3. void snd_init()  
  4. {  
  5. char sound_map[] = {0xff , 0xff};  
  6. //Iniciamos el subsistema de sonido  
  7. slInitSound(sddrvstsk , sizeof(sddrvstsk) , (Uint8 *)sound_map , sizeof(sound_map));  
  8.  
  9. };  
  10.  


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

Código: [Descargar] [Ocultar]
  1. char *vr_snd;  
  2. //Este es el tamaño en bytes de sonido  
  3. Uint32 vr_size = 17296;  
  4. //Estas son las caracteristicas con las que se va a reproducir.  
  5. //Este numero 0x69ce no se que significa pero si lo cambian el sonido se corrompe.  
  6. PCM vr_dat = {(_Mono | _PCM8Bit) , 0 , 127 , 0 , 0x69ce , 0 , 0 , 0 , 0};  
  7.  
  8. void snd_loadSound_PCM()  
  9. {  
  10. vr_snd = NULL;  
  11. Sint32 load = GFS_Load(GFS_NameToId("VR.PCM"), 0, (Uint32 *)0x200000, 0x100000);  
  12. if(load <= 0)  
  13. slPrint("ERROR loading file vr.pcm!", slLocate(2, 11));  
  14. vr_snd = (char *)0x200000;  
  15. vr_size = load;  
  16. };  
  17.  


Para hace un play
Código: [Descargar] [Ocultar]
  1. //Aca hacemos play al sonido, pasandole primero las caracteristicas, segundo la informacion y  
  2. //tercero la cantidad de bytes para que haga el offset de memoria ;)  
  3. slPCMOn(&vr_dat, vr_snd ,vr_size);  
  4.  


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:

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
Puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.026s (PHP: 68% SQL: 32%)
Consultas SQL: 9 - Debug off - GZIP Desactivado